use std::sync::Arc;
use axum::Extension;
use axum::Router;
use axum::routing::{get, post};
use sqlx::{Pool, Sqlite};
use crate::auth::AuthContext;
use crate::writer::WriterHandle;
mod apply_label;
mod audit_view;
mod common;
mod flag_reporter;
mod get_report;
mod list_audit_log;
mod list_labels;
mod list_reports;
mod negate_label;
mod report_view;
mod resolve_report;
mod retention_sweep;
#[derive(Debug, Clone, Default)]
pub struct AdminConfig {
pub label_values: Option<Vec<String>>,
}
pub fn admin_router(
pool: Pool<Sqlite>,
writer: WriterHandle,
auth: Arc<AuthContext>,
config: AdminConfig,
) -> Router {
let state = common::AdminState {
pool,
writer,
auth,
config: Arc::new(config),
};
Router::new()
.route(
"/xrpc/tools.cairn.admin.applyLabel",
post(apply_label::handler),
)
.route(
"/xrpc/tools.cairn.admin.negateLabel",
post(negate_label::handler),
)
.route(
"/xrpc/tools.cairn.admin.listLabels",
get(list_labels::handler),
)
.route(
"/xrpc/tools.cairn.admin.listReports",
get(list_reports::handler),
)
.route(
"/xrpc/tools.cairn.admin.getReport",
get(get_report::handler),
)
.route(
"/xrpc/tools.cairn.admin.resolveReport",
post(resolve_report::handler),
)
.route(
"/xrpc/tools.cairn.admin.flagReporter",
post(flag_reporter::handler),
)
.route(
"/xrpc/tools.cairn.admin.listAuditLog",
get(list_audit_log::handler),
)
.route(
"/xrpc/tools.cairn.admin.retentionSweep",
post(retention_sweep::handler),
)
.layer(Extension(state))
}