refactor: 完成项目整体架构升级与依赖优化

此提交包含多项核心优化:
1.  依赖库升级:更新FastAPI、替换fastapi-limiter为slowapi,更换MySQL驱动为aiomysql,重构缓存系统使用fastapi-cache2-fork
2.  代码重构:移除自定义缓存工具,统一使用fastapi-cache2;重构请求限流逻辑,修复操作日志记录开关逻辑
3.  接口规范:统一将Depends分页/查询参数改为Query注解,补全File上传依赖注解
4.  前端优化:调整登录滑块进度条颜色、移除冗余demo页面样式类
5.  日志优化:重构日志配置,使用time.perf_counter替代time.time统计耗时
6.  测试优化:移除冗余的限流mock配置,改用官方限流方案
7.  模板优化:更新vue代码生成模板,移除冗余导入并优化组件使用
8.  导入功能优化:移除pandas依赖,使用Excel工具类重构文件导入逻辑
This commit is contained in:
zhangtao
2026-07-01 00:35:28 +08:00
parent a39bedabb9
commit a86233d6c2
51 changed files with 1126 additions and 42754 deletions
@@ -1,15 +1,15 @@
from typing import Annotated
from fastapi import APIRouter, Body, Depends, Path
from fastapi import APIRouter, Body, Depends, Path, Query
from fastapi.responses import JSONResponse
from app.common.response import ResponseSchema, SuccessResponse
from app.core import cache_util
from app.core.base_params import PaginationQueryParam
from app.core.base_schema import AuthSchema, BatchSetAvailable, PageResultSchema
from app.core.cache_util import cache
from app.core.dependencies import AuthPermission
from app.core.router_class import OperationLogRoute
from fastapi_cache import FastAPICache
from fastapi_cache.decorator import cache
from .schema import (
PackageCreateSchema,
@@ -32,8 +32,8 @@ _PKG_NS = "package"
)
@cache(expire=300, namespace=_PKG_NS)
async def get_obj_detail_controller(
id: Annotated[int, Path(description="套餐ID")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_package:package:query"]))],
id: Annotated[int, Path(description="套餐ID", ge=1)],
) -> JSONResponse:
result_dict = await PackageService(auth).detail(id=id)
return SuccessResponse(data=result_dict, msg="获取套餐详情成功")
@@ -44,9 +44,9 @@ async def get_obj_detail_controller(
response_model=ResponseSchema[PageResultSchema[PackageOutSchema]],
)
async def get_obj_list_controller(
page: Annotated[PaginationQueryParam, Depends()],
search: Annotated[PackageQueryParam, Depends()],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_package:package:query"]))],
page: Annotated[PaginationQueryParam, Query(description="分页参数")],
search: Annotated[PackageQueryParam, Query(description="查询参数")],
) -> JSONResponse:
result_dict = await PackageService(auth).page(
page_no=page.page_no,
@@ -62,11 +62,11 @@ async def get_obj_list_controller(
response_model=ResponseSchema[PackageOutSchema],
)
async def create_obj_controller(
data: Annotated[PackageCreateSchema, Body(description="套餐信息")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_package:package:create"]))],
data: Annotated[PackageCreateSchema, Body(description="套餐信息")],
) -> JSONResponse:
result_dict = await PackageService(auth).create(data=data)
await cache_util.clear(namespace=_PKG_NS)
await FastAPICache.clear(namespace=_PKG_NS)
return SuccessResponse(data=result_dict, msg="创建成功")
@PackageRouter.put(
@@ -75,12 +75,12 @@ async def create_obj_controller(
response_model=ResponseSchema[PackageOutSchema],
)
async def update_obj_controller(
id: Annotated[int, Path(description="套餐ID")],
data: Annotated[PackageUpdateSchema, Body(description="套餐信息")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_package:package:update"]))],
id: Annotated[int, Path(description="套餐ID", ge=1)],
data: Annotated[PackageUpdateSchema, Body(description="套餐信息")],
) -> JSONResponse:
result_dict = await PackageService(auth).update(id=id, data=data)
await cache_util.clear(namespace=_PKG_NS)
await FastAPICache.clear(namespace=_PKG_NS)
return SuccessResponse(data=result_dict, msg="更新成功")
@PackageRouter.delete(
@@ -89,11 +89,11 @@ async def update_obj_controller(
response_model=ResponseSchema,
)
async def delete_obj_controller(
ids: Annotated[list[int], Body(description="ID列表")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_package:package:delete"]))],
ids: Annotated[list[int], Body(description="ID列表")],
) -> JSONResponse:
await PackageService(auth).delete(ids=ids)
await cache_util.clear(namespace=_PKG_NS)
await FastAPICache.clear(namespace=_PKG_NS)
return SuccessResponse(msg="删除成功")
@PackageRouter.patch(
@@ -102,12 +102,12 @@ async def delete_obj_controller(
response_model=ResponseSchema,
)
async def set_available_controller(
data: Annotated[BatchSetAvailable, Body(description="状态设置")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_package:package:update"]))],
data: Annotated[BatchSetAvailable, Body(description="状态设置")],
) -> JSONResponse:
for id in data.ids:
await PackageService(auth).update(id=id, data=PackageUpdateSchema(status=data.status))
await cache_util.clear(namespace=_PKG_NS)
await FastAPICache.clear(namespace=_PKG_NS)
return SuccessResponse(msg="状态设置成功")
@PackageRouter.get(
@@ -116,8 +116,8 @@ async def set_available_controller(
response_model=ResponseSchema[list[int]],
)
async def get_menus_controller(
package_id: Annotated[int, Path(description="套餐ID")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_package:package:query"]))],
package_id: Annotated[int, Path(description="套餐ID", ge=1)],
) -> JSONResponse:
result = await PackageService(auth).get_menus(package_id=package_id)
return SuccessResponse(data=result, msg="获取成功")
@@ -128,9 +128,9 @@ async def get_menus_controller(
response_model=ResponseSchema,
)
async def set_menus_controller(
package_id: Annotated[int, Path(description="套餐ID")],
data: Annotated[PackageMenuSetSchema, Body(description="菜单列表")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_package:package:update"]))],
package_id: Annotated[int, Path(description="套餐ID", ge=1)],
data: Annotated[PackageMenuSetSchema, Body(description="菜单列表")],
) -> JSONResponse:
await PackageService(auth).set_menus(package_id=package_id, data=data)
return SuccessResponse(msg="设置成功")
@@ -141,8 +141,8 @@ async def set_menus_controller(
response_model=ResponseSchema[list[int]],
)
async def get_plugins_controller(
package_id: Annotated[int, Path(description="套餐ID")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_package:package:query"]))],
package_id: Annotated[int, Path(description="套餐ID", ge=1)],
) -> JSONResponse:
result = await PackageService(auth).get_plugins(package_id=package_id)
return SuccessResponse(data=result, msg="获取成功")
@@ -153,9 +153,9 @@ async def get_plugins_controller(
response_model=ResponseSchema,
)
async def set_plugins_controller(
package_id: Annotated[int, Path(description="套餐ID")],
data: Annotated[PackagePluginSetSchema, Body(description="插件列表")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_package:package:update"]))],
package_id: Annotated[int, Path(description="套餐ID", ge=1)],
data: Annotated[PackagePluginSetSchema, Body(description="插件列表")],
) -> JSONResponse:
await PackageService(auth).set_plugins(package_id=package_id, data=data)
return SuccessResponse(msg="设置成功")