use utoipa::OpenApi; #[derive(OpenApi)] #[openapi( info( title = "gitdata admin api", version = "1.0", description = "GitData 管理后台 API。独立进程(adminhost)、独立会话 Cookie(gitdata_admin_session)、固定角色 super_admin/operator/viewer。" ), paths( crate::handlers::auth::login, crate::handlers::auth::logout, crate::handlers::auth::me, crate::handlers::auth::change_password, crate::handlers::admins::list_admins, crate::handlers::admins::create_admin, crate::handlers::admins::get_admin, crate::handlers::admins::update_admin, crate::handlers::admins::delete_admin, crate::handlers::admins::reset_admin_password, crate::handlers::users::list_users, crate::handlers::users::get_user, crate::handlers::users::update_user, crate::handlers::users::suspend_user, crate::handlers::users::revoke_suspension, crate::handlers::users::reset_user_password, crate::handlers::users::revoke_user_sessions, crate::handlers::users::delete_user, crate::handlers::spaces::list_spaces, crate::handlers::spaces::get_space, crate::handlers::spaces::update_space, crate::handlers::spaces::transfer_space, crate::handlers::spaces::delete_space, crate::handlers::spaces::list_space_members, crate::handlers::spaces::remove_space_member, crate::handlers::storage::overview, crate::handlers::storage::list_objects, crate::handlers::storage::download_url, crate::handlers::storage::delete_object, crate::handlers::queues::list_queues, crate::handlers::queues::requeue_failed, crate::handlers::queues::purge, crate::handlers::tasks::list_tasks, crate::handlers::tasks::get_task, crate::handlers::tasks::retry_task, crate::handlers::tasks::cancel_task, crate::handlers::tasks::delete_task, crate::handlers::logs::list_audit_logs, crate::handlers::logs::list_job_logs, crate::handlers::system::status ), components(schemas( export::rest::NoData, export::pagination::PageQuery, models::admin::admin_user::AdminRole, models::users::user_suspensions::SuspensionType, crate::services::auth::AdminLoginCmd, crate::services::auth::AdminLoginResp, crate::services::auth::AdminDto, crate::services::auth::ChangePasswordCmd, crate::services::auth::CreateAdminCmd, crate::services::auth::UpdateAdminCmd, crate::services::auth::ResetAdminPasswordCmd, crate::services::users::AdminUserSummary, crate::services::users::AdminUserEmailDto, crate::services::users::AdminUserSessionDto, crate::services::users::AdminUserSpaceDto, crate::services::users::AdminSuspensionDto, crate::services::users::AdminUserDetail, crate::services::users::UpdateUserCmd, crate::services::users::SuspendUserCmd, crate::services::users::ResetUserPasswordCmd, crate::services::users::RevokeSessionsResp, crate::services::users::DeleteUserResp, crate::services::spaces::AdminSpaceSummary, crate::services::spaces::AdminSpaceDetail, crate::services::spaces::UpdateSpaceCmd, crate::services::spaces::TransferSpaceCmd, crate::services::spaces::AdminSpaceMemberDto, crate::services::spaces::RemoveMemberResp, crate::services::storage::StorageCategoryDto, crate::services::storage::StorageOverviewDto, crate::services::storage::StorageObjectDto, crate::services::storage::StorageObjectPageDto, crate::services::storage::DownloadUrlDto, crate::services::storage::DeleteObjectResp, crate::services::queues::QueueSnapshotDto, crate::services::queues::QueueActionResp, crate::services::tasks::TaskDto, crate::services::tasks::TaskPageDto, crate::services::tasks::TaskDetailDto, crate::services::tasks::TaskActionResp, crate::services::logs::AuditLogDto, crate::services::logs::AuditLogPageDto, crate::services::logs::JobLogDto, crate::services::logs::JobLogPageDto, crate::services::system::ProcessInfoDto, crate::services::system::DependencyDto, crate::services::system::DependenciesDto, crate::services::system::FeaturesDto, crate::services::system::CountsDto, crate::services::system::SystemStatusDto )) )] pub struct AdminApiDoc; pub fn api_doc() -> utoipa::openapi::OpenApi { let mut doc = AdminApiDoc::openapi(); doc.servers = Some(vec![utoipa::openapi::Server::new("/api/v1")]); { use utoipa::openapi::security::{ApiKey, ApiKeyValue, SecurityScheme}; let components = doc .components .get_or_insert_with(utoipa::openapi::Components::default); components.add_security_scheme( "admin_session_cookie", SecurityScheme::ApiKey(ApiKey::Cookie(ApiKeyValue::new("gitdata_admin_session"))), ); } doc.security = Some(vec![ utoipa::openapi::security::SecurityRequirement::new( "admin_session_cookie", Vec::::new(), ), ]); doc }