Skip to content
Clone
f0a1552
157 lines 5.7 KB Rust
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<AdminService> {
let public: Router<AdminService> = 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)
}