use axum::Router; use axum::routing::{delete, get, patch, post}; use crate::handlers::{admins, auth, chat, logs, queues, spaces, storage, system, tasks, users}; use crate::services::service::AdminService; use crate::share::guard::admin_guard; pub fn router(service: AdminService) -> Router { let public: Router = Router::new() .route("/admin/auth/login", post(auth::login)) .route("/admin/auth/logout", post(auth::logout)); let protected = Router::new() .route("/admin/me", get(auth::me)) .route("/admin/me/password", patch(auth::change_password)) .route( "/admin/admins", get(admins::list_admins).post(admins::create_admin), ) .route( "/admin/admins/{id}", get(admins::get_admin) .patch(admins::update_admin) .delete(admins::delete_admin), ) .route( "/admin/admins/{id}/reset-password", post(admins::reset_admin_password), ) .route( "/admin/admins/{id}/revoke-sessions", post(admins::revoke_admin_sessions), ) .route( "/admin/users", get(users::list_users).post(users::create_user), ) .route("/admin/users/export", get(users::export_users)) .route("/admin/users/bulk", post(users::bulk_users)) .route( "/admin/users/{uid}", get(users::get_user) .patch(users::update_user) .delete(users::delete_user), ) .route("/admin/users/{uid}/suspend", post(users::suspend_user)) .route( "/admin/users/{uid}/suspensions/{suspension_id}/revoke", post(users::revoke_suspension), ) .route( "/admin/users/{uid}/reset-password", post(users::reset_user_password), ) .route( "/admin/users/{uid}/revoke-sessions", post(users::revoke_user_sessions), ) .route( "/admin/users/{uid}/sessions", get(users::list_user_sessions), ) .route( "/admin/users/{uid}/sessions/{session_id}", delete(users::revoke_user_session), ) .route( "/admin/users/{uid}/security", get(users::get_user_security), ) .route( "/admin/users/{uid}/two-factor", delete(users::clear_user_two_factor), ) .route("/admin/chat/stats", get(chat::stats)) .route("/admin/chat/rooms", get(chat::list_rooms)) .route( "/admin/chat/rooms/{id}", get(chat::get_room) .patch(chat::update_room) .delete(chat::delete_room), ) .route( "/admin/chat/rooms/{id}/members", get(chat::list_members), ) .route( "/admin/chat/rooms/{id}/members/{uid}", delete(chat::remove_member), ) .route("/admin/chat/rooms/{id}/purge", post(chat::purge_room)) .route("/admin/chat/messages", get(chat::list_messages)) .route("/admin/chat/messages/export", get(chat::export_messages)) .route( "/admin/chat/messages/bulk-delete", post(chat::bulk_delete_messages), ) .route("/admin/chat/messages/{id}", get(chat::get_message)) .route("/admin/chat/attachments", get(chat::list_attachments)) .route( "/admin/chat/attachments/{id}", delete(chat::delete_attachment), ) .route("/admin/spaces", get(spaces::list_spaces)) .route( "/admin/spaces/{id}", get(spaces::get_space) .patch(spaces::update_space) .delete(spaces::delete_space), ) .route("/admin/spaces/{id}/transfer", post(spaces::transfer_space)) .route( "/admin/spaces/{id}/members", get(spaces::list_space_members).post(spaces::add_space_member), ) .route( "/admin/spaces/{id}/members/{uid}", delete(spaces::remove_space_member), ) .route("/admin/storage/overview", get(storage::overview)) .route( "/admin/storage/objects", get(storage::list_objects).delete(storage::delete_object), ) .route("/admin/storage/download-url", get(storage::download_url)) .route("/admin/queues", get(queues::list_queues)) .route("/admin/queues/{name}/failed", get(queues::failed_jobs)) .route( "/admin/queues/{name}/requeue-failed", post(queues::requeue_failed), ) .route("/admin/queues/{name}/purge", post(queues::purge)) .route("/admin/tasks", get(tasks::list_tasks)) .route("/admin/tasks/stats", get(tasks::task_stats)) .route( "/admin/tasks/{source}/{id}", get(tasks::get_task).delete(tasks::delete_task), ) .route("/admin/tasks/{source}/bulk", post(tasks::bulk_tasks)) .route("/admin/tasks/{source}/{id}/retry", post(tasks::retry_task)) .route( "/admin/tasks/{source}/{id}/cancel", post(tasks::cancel_task), ) .route("/admin/logs/audit", get(logs::list_audit_logs)) .route("/admin/logs/audit/export", get(logs::export_audit_logs)) .route("/admin/logs/jobs", get(logs::list_job_logs)) .route("/admin/dashboard", get(system::dashboard)) .route("/admin/system/status", get(system::status)) .route("/admin/system/config", get(system::config)) .route_layer(axum::middleware::from_fn_with_state( service.clone(), admin_guard, )); public.merge(protected) }