fix(handlers): add handlers
This commit is contained in:
105
src/docs.rs
Normal file
105
src/docs.rs
Normal 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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user