use std::sync::Arc;
use axum::{Json, Router, extract::State, http::StatusCode, response::IntoResponse, routing::post};
use serde::Deserialize;
use super::resolver::IdentityResolver;
#[derive(Debug, Deserialize)]
struct FlushRequest {
sub: String,
}
pub fn identity_admin_router(resolver: Arc<IdentityResolver>) -> Router {
Router::new()
.route("/api/identity/flush", post(flush_subject))
.route("/api/identity/flush-all", post(flush_all))
.with_state(resolver)
}
async fn flush_subject(
State(resolver): State<Arc<IdentityResolver>>,
Json(request): Json<FlushRequest>,
) -> impl IntoResponse {
resolver.flush(&request.sub);
(StatusCode::OK, Json(serde_json::json!({ "flushed": request.sub })))
}
async fn flush_all(State(resolver): State<Arc<IdentityResolver>>) -> impl IntoResponse {
resolver.flush_all();
(StatusCode::OK, Json(serde_json::json!({ "flushed_all": true })))
}