fix(handlers): add handlers

This commit is contained in:
2026-01-30 16:31:53 +08:00
parent bb82c75834
commit ce12b997f4
38 changed files with 3746 additions and 317 deletions

105
src/docs.rs Normal file
View File

@@ -0,0 +1,105 @@
use crate::handlers;
use crate::models::{
CreateRoleRequest, CreateTenantRequest, CreateUserRequest, LoginRequest, LoginResponse, Role,
RoleResponse, Tenant, TenantResponse, UpdateTenantRequest, UpdateTenantStatusRequest,
UpdateUserRequest, User, UserResponse,
};
use utoipa::openapi::security::{HttpAuthScheme, HttpBuilder, SecurityScheme};
use utoipa::{Modify, OpenApi};
struct SecurityAddon;
impl Modify for SecurityAddon {
fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) {
let components = openapi
.components
.get_or_insert_with(utoipa::openapi::Components::new);
components.add_security_scheme(
"bearer_auth",
SecurityScheme::Http(
HttpBuilder::new()
.scheme(HttpAuthScheme::Bearer)
.bearer_format("JWT")
.build(),
),
);
}
}
#[derive(OpenApi)]
#[openapi(
modifiers(&SecurityAddon),
info(
title = "IAM Service API",
version = "0.1.0",
description = include_str!("../docs/SCALAR_GUIDE.md")
),
paths(
handlers::auth::register_handler,
handlers::auth::login_handler,
handlers::authorization::my_permissions_handler,
handlers::tenant::create_tenant_handler,
handlers::tenant::get_tenant_handler,
handlers::tenant::update_tenant_handler,
handlers::tenant::update_tenant_status_handler,
handlers::tenant::delete_tenant_handler,
handlers::role::create_role_handler,
handlers::role::list_roles_handler,
handlers::user::list_users_handler,
handlers::user::get_user_handler,
handlers::user::update_user_handler,
handlers::user::delete_user_handler,
// Add other handlers here as you implement them
),
components(
schemas(
User,
UserResponse,
CreateUserRequest,
UpdateUserRequest,
LoginRequest,
LoginResponse,
Role,
CreateRoleRequest,
RoleResponse,
Tenant,
TenantResponse,
CreateTenantRequest,
UpdateTenantRequest,
UpdateTenantStatusRequest
)
),
tags(
(name = "Auth", description = "认证:注册/登录/令牌"),
(name = "Tenant", description = "租户:创建/查询/更新/状态/删除"),
(name = "User", description = "用户:查询/列表/更新/删除(需权限)"),
(name = "Role", description = "角色:创建/列表(需权限)"),
(name = "Me", description = "当前用户:权限自查等"),
(name = "Policy", description = "策略预留ABAC/策略引擎后续扩展)")
)
)]
pub struct ApiDoc;
#[cfg(test)]
mod tests {
use super::ApiDoc;
use utoipa::OpenApi;
#[test]
fn openapi_schema_contains_defaults() {
let doc = ApiDoc::openapi();
let json = serde_json::to_value(&doc).unwrap();
let token_type_default = json
.pointer("/components/schemas/LoginResponse/properties/token_type/default")
.and_then(|v| v.as_str())
.unwrap_or_default();
assert_eq!(token_type_default, "Bearer");
let tenant_status_default = json
.pointer("/components/schemas/Tenant/properties/status/default")
.and_then(|v| v.as_str())
.unwrap_or_default();
assert_eq!(tenant_status_default, "active");
}
}