Build lightweight AI agent admin

This commit is contained in:
Codex
2026-06-08 18:14:59 +08:00
commit e164840f43
2530 changed files with 435693 additions and 0 deletions
+180
View File
@@ -0,0 +1,180 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Permission Schema - 权限数据验证模式
"""
from datetime import datetime
from typing import Optional, List
from pydantic import BaseModel, ConfigDict, Field, field_validator
from app.base_schema import CSTDatetime
class PermissionBase(BaseModel):
"""权限基础Schema"""
menu_id: str = Field(..., description="菜单ID")
name: str = Field(..., min_length=1, max_length=64, description="权限名称")
code: str = Field(..., min_length=1, max_length=64, description="权限编码")
permission_type: int = Field(default=0, description="权限类型(0-按钮权限, 1-API权限, 3-其他权限)")
api_path: Optional[str] = Field(None, max_length=200, description="API路径")
http_method: int = Field(default=0, description="HTTP方法(0-GET, 1-POST, 2-PUT, 3-DELETE, 4-PATCH, 5-ALL")
description: Optional[str] = Field(None, description="权限描述")
is_active: bool = Field(default=True, description="是否启用")
sort: int = Field(default=0, description="排序")
@field_validator("code")
@classmethod
def validate_code(cls, v):
"""验证权限编码格式"""
if not v:
raise ValueError("权限编码不能为空")
if not all(c.isalnum() or c in '_:' for c in v):
raise ValueError("权限编码只能包含字母、数字、下划线和冒号")
return v
@field_validator("http_method")
@classmethod
def validate_http_method(cls, v):
"""验证HTTP方法"""
if v not in [0, 1, 2, 3, 4, 5]:
raise ValueError("HTTP方法必须在 0-5 之间")
return v
@field_validator("permission_type")
@classmethod
def validate_permission_type(cls, v):
"""验证权限类型"""
if v not in [0, 1, 3]:
raise ValueError("权限类型必须在 0, 1, 3 之间")
return v
class PermissionCreate(PermissionBase):
"""权限创建Schema"""
pass
class PermissionUpdate(BaseModel):
"""权限更新Schema - 所有字段可选"""
menu_id: Optional[str] = Field(None, description="菜单ID")
name: Optional[str] = Field(None, min_length=1, max_length=64, description="权限名称")
code: Optional[str] = Field(None, min_length=1, max_length=64, description="权限编码")
permission_type: Optional[int] = Field(None, description="权限类型")
api_path: Optional[str] = Field(None, max_length=200, description="API路径")
http_method: Optional[int] = Field(None, description="HTTP方法")
description: Optional[str] = Field(None, description="权限描述")
is_active: Optional[bool] = Field(None, description="是否启用")
sort: Optional[int] = Field(None, description="排序")
@field_validator("code")
@classmethod
def validate_code(cls, v):
"""验证权限编码格式"""
if v is not None:
if not v:
raise ValueError("权限编码不能为空")
if not all(c.isalnum() or c in '_:' for c in v):
raise ValueError("权限编码只能包含字母、数字、下划线和冒号")
return v
@field_validator("http_method")
@classmethod
def validate_http_method(cls, v):
"""验证HTTP方法"""
if v is not None and v not in [0, 1, 2, 3, 4, 5]:
raise ValueError("HTTP方法必须在 0-5 之间")
return v
@field_validator("permission_type")
@classmethod
def validate_permission_type(cls, v):
"""验证权限类型"""
if v is not None and v not in [0, 1, 3]:
raise ValueError("权限类型必须在 0, 1, 3 之间")
return v
class PermissionResponse(BaseModel):
"""权限响应Schema"""
id: str
menu_id: str
menu_name: Optional[str] = None
name: str
code: str
permission_type: int
permission_type_display: Optional[str] = None
api_path: Optional[str] = None
http_method: int
http_method_display: Optional[str] = None
description: Optional[str] = None
is_active: bool
sort: int = 0
is_deleted: bool = False
sys_create_datetime: Optional[CSTDatetime] = None
sys_update_datetime: Optional[CSTDatetime] = None
model_config = ConfigDict(from_attributes=True)
class PermissionSimple(BaseModel):
"""权限简单输出"""
id: str
name: str
code: str
permission_type: int
is_active: bool
model_config = ConfigDict(from_attributes=True)
class PermissionBatchDeleteIn(BaseModel):
"""批量删除权限输入"""
ids: List[str] = Field(..., description="要删除的权限ID列表")
class PermissionBatchDeleteOut(BaseModel):
"""批量删除权限输出"""
count: int = Field(..., description="删除的记录数")
class PermissionBatchUpdateStatusIn(BaseModel):
"""批量更新权限状态输入"""
ids: List[str] = Field(..., description="权限ID列表")
is_active: bool = Field(..., description="是否启用")
class PermissionBatchUpdateStatusOut(BaseModel):
"""批量更新权限状态输出"""
count: int = Field(..., description="更新的记录数")
class PermissionSearchRequest(BaseModel):
"""搜索权限请求"""
keyword: str = Field(..., description="搜索关键词")
class PermissionRouteItem(BaseModel):
"""单个路由权限项"""
path: str = Field(..., description="API路径")
method: str = Field(..., description="HTTP方法")
name: str = Field(..., description="权限名称")
code: str = Field(..., description="权限编码")
summary: Optional[str] = Field(None, description="权限描述")
permission_type: int = Field(default=1, description="权限类型")
http_method: int = Field(..., description="HTTP方法编码")
is_active: bool = Field(default=True, description="是否启用")
class PermissionBatchCreateFromRoutesIn(BaseModel):
"""从路由批量创建权限输入"""
menu_id: str = Field(..., description="菜单ID")
routes: List[PermissionRouteItem] = Field(..., description="要创建的权限列表")
class PermissionBatchCreateFromRoutesOut(BaseModel):
"""从路由批量创建权限输出"""
created: int = Field(..., description="创建的权限数")
skipped: int = Field(..., description="跳过的权限数")
failed: int = Field(..., description="失败的权限数")
errors: List[str] = Field(default=[], description="错误信息列表")