feat(phase4): 全部业务模块迁移到 modules/(结构迁移)

- 21 个模块目录(auth/system/dictionary/configuration/cms/member/region/link/notice/job/log/upload/index)
- 每个模块 router.py(合并模块导出多个 router)/schemas.py/service.py/repository.py/models.py
- routers/v1.py 与 routers/__init__.py 改为直接引用 modules,前缀与权限串原样保留
- core/middleware.py 懒加载指向 modules.system.menu / modules.log;core/redis_client.py 指向 modules.job.scheduler
- apps/views|services|forms 全部改为 re-export 垫片
- 迁移后 grep 守门通过:modules/core 无 apps/extensions 残留引用
- 实测登录、27+ 模块接口、写操作 commit、操作日志落库均正常

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Claude
2026-08-07 10:13:30 +08:00
co-authored by Claude
parent b2c7b93786
commit 64a5504396
156 changed files with 7977 additions and 7533 deletions
+4 -4
View File
@@ -116,8 +116,8 @@ def permission_required(permission: str):
userId = get_user_id(request)
if userId == 1:
return None
# 懒加载业务 service,避免 core → apps 顶层依赖(迁移完成后指向 modules)
from apps.services import menu
# 懒加载业务 service,避免 core → 业务模块顶层依赖
from modules.system.menu import service as menu
permission_list = menu.get_permissions_list_sync(userId)
if permission not in permission_list:
return R.failed("权限不足")
@@ -271,8 +271,8 @@ async def operation_log_middleware(request: Request, call_next):
consume_time = int((time.time() - start_time) * 1000)
user_id = get_user_id(request)
if user_id and user_id > 0:
# 懒加载业务 service,避免 core → apps 顶层依赖(迁移完成后指向 modules)
from apps.services import operation_log
# 懒加载业务 service,避免 core → 业务模块顶层依赖
from modules.log import service as operation_log
operation_log.record_operation_log(
request,
title=_get_route_summary(request),
+1 -1
View File
@@ -57,7 +57,7 @@ async def redis_lifespan(app: FastAPI):
logger.info(f"Redis 连接成功: {REDIS_HOST}:{REDIS_PORT}/{REDIS_INDEX}")
# startup: 初始化定时任务调度器
from apps.services.scheduler import init_scheduler, shutdown_scheduler
from modules.job.scheduler import init_scheduler, shutdown_scheduler
job_count = init_scheduler()
logger.info(f"定时任务调度器已启动,加载 {job_count} 个任务")