mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-21 12:52:26 +00:00
refactor: 大规模代码重构与项目配置优化
- 调整前端路由前缀为 /web 并新增配置项 - 重构环境变量配置,替换旧环境文件为 dev/prod/test 版本 - 优化后端接口路由与参数校验,替换 dataclass 查询参数为 Pydantic 模型 - 整理后端导入顺序,延迟加载循环依赖模块 - 统一前端 API 调用命名,重构模块命名 - 新增多种响应类型支持,优化代码模板 - 简化后端路由装饰器写法,合并配置参数
This commit is contained in:
@@ -17,11 +17,7 @@ DeptRouter = APIRouter(route_class=OperationLogRoute, prefix="/dept", tags=["部
|
||||
|
||||
_DEPT_NS = "dept"
|
||||
|
||||
@DeptRouter.get(
|
||||
"/tree",
|
||||
summary="查询部门树",
|
||||
response_model=ResponseSchema[list[DeptOutSchema]],
|
||||
)
|
||||
@DeptRouter.get("/tree", summary="查询部门树", response_model=ResponseSchema[list[DeptOutSchema]])
|
||||
@cache(expire=300, namespace=_DEPT_NS)
|
||||
async def get_dept_tree_controller(
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dept:query"]))],
|
||||
@@ -31,11 +27,7 @@ async def get_dept_tree_controller(
|
||||
result_dict_tree = await DeptService(auth).tree(search=search, order_by=order_by)
|
||||
return SuccessResponse(data=result_dict_tree, msg="查询部门树成功")
|
||||
|
||||
@DeptRouter.get(
|
||||
"/detail/{id}",
|
||||
summary="查询部门详情",
|
||||
response_model=ResponseSchema[DeptOutSchema],
|
||||
)
|
||||
@DeptRouter.get("/detail/{id}", summary="查询部门详情", response_model=ResponseSchema[DeptOutSchema])
|
||||
async def get_obj_detail_controller(
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dept:detail"]))],
|
||||
id: Annotated[int, Path(description="部门ID")],
|
||||
@@ -43,11 +35,7 @@ async def get_obj_detail_controller(
|
||||
result_dict = await DeptService(auth).detail(id=id)
|
||||
return SuccessResponse(data=result_dict, msg="查询部门详情成功")
|
||||
|
||||
@DeptRouter.post(
|
||||
"/create",
|
||||
summary="创建部门",
|
||||
response_model=ResponseSchema[DeptOutSchema],
|
||||
)
|
||||
@DeptRouter.post("/create", summary="创建部门", response_model=ResponseSchema[DeptOutSchema])
|
||||
async def create_obj_controller(
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dept:create"]))],
|
||||
data: Annotated[DeptCreateSchema, Body(description="部门创建参数")],
|
||||
@@ -56,11 +44,7 @@ async def create_obj_controller(
|
||||
await FastAPICache.clear(namespace=_DEPT_NS)
|
||||
return SuccessResponse(data=result_dict, msg="创建部门成功")
|
||||
|
||||
@DeptRouter.put(
|
||||
"/update/{id}",
|
||||
summary="修改部门",
|
||||
response_model=ResponseSchema[DeptOutSchema],
|
||||
)
|
||||
@DeptRouter.put("/update/{id}", summary="修改部门", response_model=ResponseSchema[DeptOutSchema])
|
||||
async def update_obj_controller(
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dept:update"]))],
|
||||
id: Annotated[int, Path(description="部门ID")],
|
||||
@@ -70,11 +54,7 @@ async def update_obj_controller(
|
||||
await FastAPICache.clear(namespace=_DEPT_NS)
|
||||
return SuccessResponse(data=result_dict, msg="修改部门成功")
|
||||
|
||||
@DeptRouter.delete(
|
||||
"/delete",
|
||||
summary="删除部门",
|
||||
response_model=ResponseSchema[None],
|
||||
)
|
||||
@DeptRouter.delete("/delete", summary="删除部门", response_model=ResponseSchema[None])
|
||||
async def delete_obj_controller(
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dept:delete"]))],
|
||||
ids: Annotated[list[int], Body(description="ID列表")],
|
||||
@@ -83,11 +63,7 @@ async def delete_obj_controller(
|
||||
await FastAPICache.clear(namespace=_DEPT_NS)
|
||||
return SuccessResponse(msg="删除部门成功")
|
||||
|
||||
@DeptRouter.patch(
|
||||
"/status/batch",
|
||||
summary="批量修改部门状态",
|
||||
response_model=ResponseSchema[None],
|
||||
)
|
||||
@DeptRouter.patch("/status/batch", summary="批量修改部门状态", response_model=ResponseSchema[None])
|
||||
async def batch_set_available_obj_controller(
|
||||
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:dept:patch"]))],
|
||||
data: Annotated[BatchSetAvailable, Body(description="状态设置")],
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
from fastapi import Query
|
||||
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
||||
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
||||
|
||||
from app.common.enums import QueueEnum
|
||||
from app.core.base_params import BaseQueryParam, TenantByQueryParam, UserByQueryParam
|
||||
from app.core.base_schema import BaseSchema, TenantBySchema, UserBySchema
|
||||
from app.core.base_schema import BaseQueryParam, BaseSchema, TenantByQueryParam, TenantBySchema, UserByQueryParam, UserBySchema
|
||||
from app.core.validator import validate_required_code
|
||||
|
||||
|
||||
@@ -63,14 +59,16 @@ class DeptTreeOutSchema(DeptOutSchema):
|
||||
children: list["DeptTreeOutSchema"] | None = Field(default=None, description="子部门列表")
|
||||
|
||||
|
||||
@dataclass
|
||||
class DeptQueryParam(BaseQueryParam, UserByQueryParam, TenantByQueryParam):
|
||||
"""部门管理查询参数"""
|
||||
|
||||
name: str | None = Query(None, description="部门名称")
|
||||
status: int | None = Query(None, ge=0, le=1, description="状态(0:启动 1:停用)")
|
||||
name: str | None = Field(None, description="部门名称")
|
||||
status: int | None = Field(None, ge=0, le=1, description="状态(0:启动 1:停用)")
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
self.name = (QueueEnum.like.value, self.name)
|
||||
@model_validator(mode="after")
|
||||
def validate_query_params(self) -> "DeptQueryParam":
|
||||
if self.name:
|
||||
self.name = (QueueEnum.like.value, self.name)
|
||||
if isinstance(self.status, int):
|
||||
self.status = (QueueEnum.eq.value, self.status)
|
||||
return self
|
||||
|
||||
Reference in New Issue
Block a user