Commit Graph
18 Commits
Author SHA1 Message Date
DjangoAdmin DevandClaude 5504f3f2c6 refactor: P7 切尾——删除 application/extensions/utils,WSGI 切 src
【切尾】
- src/app.py:应用工厂(原 application/factory.py)
- src/extensions.py:扩展注册编排(原 extensions/)
- src/wsgi.py:生产 WSGI 入口
- 根 app.py 改为 from src.app import create_app(开发入口保留)
- gunicorn/Docker/compose 指向 src.wsgi:app
- 删除 application/、extensions/、utils/(全部代码已迁入 src/)

【清理】21 个 router 中间件导入改 src.core;修复 level 服务潜在 bug
(utils.load2dict 不存在 → model_to_dict);测试文件 R 导入改 src.core

【里程碑】全项目 flake8 从 P1 基线 154 条 → **0 条**;
12 passed;app.py 与 src.wsgi 双入口均启动

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 19:45:28 +08:00
DjangoAdmin DevandClaude 4d74b31431 refactor: P6 API v1 版本化
- src/routes/v1.py:注册中心,148 条路由全部挂 /api/v1
- application/views/__init__.py:自动发现改为 register_v1 显式注册
- 登录白名单更新为 /api/v1/login 等(.env 与 .env.example)
- build_full_url:内部调度调用自动加 /api/v1 前缀

【联动】ui/ 前端需将 API 调用前缀改为 /api/v1(随 ui/ 迁移处理)
【验收】148 路由全 /api/v1;白名单放行(/api/v1/login 表单校验);
鉴权拦截 401;build_full_url 验证;12 passed

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 19:42:05 +08:00
DjangoAdmin DevandClaude 0b0fa0c047 refactor: P5 DI 注入 + 中间件迁入 src/core
【依赖注入(解决 core→modules 倒置)】
- src/core/permission.py:PermissionProvider 协议 + check_permission
  (不再 import menu 服务,改从 current_app.extensions['permission_provider'] 获取)
- src/core/middleware.py:整合 check_login/check_demo/transaction/op_log/error_handler
  (op_log 写入器 DI:current_app.extensions['operation_log_writer'])
- application/factory.py:组合根注入 MenuPermissionProvider + record_operation_log
- src/core/scheduler.py 懒加载指向 src.modules.job.scheduler_service

【验收】src/core 内零 application 引用;DI 注入验证通过;
未登录 401、白名单放行;12 passed;core+中间件 flake8 零告警

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 19:39:19 +08:00
DjangoAdmin DevandClaude 2bf2179611 refactor: P4c 最终批次-6 user 模块(最后一个)——P4 全部完成
【改造】get_user_page/add/update/status/delete 按新范式;
update_user_info/update_password/reset_user_password 入参 data + BizError;
get_info 委托 UserRepository
【验收】flake8 零告警;应用启动;user 分页/详情运行时正常;12 passed

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 17:32:54 +08:00
DjangoAdmin DevandClaude b9ce9dc510 refactor: P4c 最终批次-5 auth 模块(login/index 合并)
【改造】login(data) 入参数据/返回 dict/raise BizError(验证码/限流/密码校验);
_record_login 兼容 dict result;logout 修正误导入(auth→log service)
【修复】auth router login+index 合并的 docstring/import 结构混乱
【验收】flake8 零告警;应用启动;登录表单校验运行时正常;12 passed

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 17:30:44 +08:00
DjangoAdmin DevandClaude 6bd4951f95 refactor: P4c 最终批次-4 job 模块
- get_job_page/add/update/delete/status 按新范式改造(get_info 委托 JobRepository)
- pause_job/resume_job/run_job_once/reload_all_jobs 去 R 改 BizError/返回数据
- router 取参包 R;修复多行 config 导入被 ast 破坏问题

【验收】flake8 零告警;应用启动;job 分页运行时正常;12 passed

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 17:11:39 +08:00
DjangoAdmin DevandClaude 0e0179859f refactor: P4c 最终批次-3 configuration 模块(config+config_item 合并服务)
【修复合并遗留】重名函数重命名(_apply_config_item_filters/
get_config_item_info/_build_config_item_page_data)、router 双 blueprint 合并、
中部 import 块清理、CONFIG_ITEM_TYPE_LIST 并入顶部
【特殊函数】save_config_data(data) 改入参去 R;get_config_data 返回 list
【教训】regex .*?配置项 跨 docstring 误删顶部导入(同 dictionary models),
已恢复并改精确行级处理
【验收】flake8 零告警;应用启动;config/config_item 运行时正常;12 passed

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 16:41:24 +08:00
DjangoAdmin DevandClaude 9acbf6275e refactor: P4c 最终批次-2 dictionary 模块(dict+dict_item 合并服务)
【修复合并遗留】
- 重命名重名函数(_apply_dict_item_filters/get_dict_item_info/
  _build_dict_item_page_data),修复 get_info 调用点
- router 双 blueprint 合并导入、dict_item 视图函数重命名
- schema/service/models 中部重复 import 行级去重
- 修复 schema typo DictItemItem
- models.py 误改后从 git 恢复(P4c 不需改 models)

【教训】regex 改复杂合并文件易误伤(.*?跨 docstring 匹配删了顶部导入),
已恢复并改用精确行级去重

【验收】flake8 零告警;应用启动;dict/dict_item 分页运行时正常;12 passed

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 16:26:33 +08:00
DjangoAdmin DevandClaude a054b14485 refactor: P4c 最终批次-1 log 模块(login_log+operation_log 合并服务)
【关键修复】根 .gitignore 模板规则 log/ 误忽略 src/modules/log/,
log 模块自 P3c 起未入库 → 加 !src/modules/log/ 特例排除并补入

【修复合并遗留 bug】
- 两个 get_info/_apply_filters/_build_page_data 重名互相覆盖 → 重命名
- log router 误导入 src.modules.auth 为 login_log → 改 log service
- 双 blueprint 视图函数重名 → 重命名 operation 版本
- 双 import 块合并(OPERATION_LOG_TYPE_LIST 并入顶部)

【改造】page 函数 params 化返回 dict;get_info 委托 Repository
【验收】flake8 零告警;应用启动;log 分页运行时正常;12 passed

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 16:11:26 +08:00
DjangoAdmin DevandClaude 3dbce04eb1 refactor: P4c 批次4 服务层改造(role/menu/user_role/role_menu)
- role/menu 走 codemod(get_role_page/get_menu_detail 等 + get_info 委托 Repository)
- menu get_menu_list params 化返回 list;权限函数(get_user_permissions/
  get_user_permission_menus/invalidate_*)保持完整未动
- user_role 已符合新范式(参数化+返回 list)仅验证
- role_menu save_role_menu(data) 改 BizError + router 取参包 R

【验收】flake8 零告警;应用启动;权限函数跨模块运行正常;12 passed

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 15:40:33 +08:00
DjangoAdmin DevandClaude d97e456744 refactor: P4c 批次3 服务层改造(dept/city tree 型模块)
- add/update/delete/get_info 按 codemod 改造(get_info 委托 Repository)
- get_dept_list/get_city_list 手动 params 化返回 list
- city 删除函数 f-string R.failed → raise BizError
- router 取参包 R;新增 dept/city repository.py

【验收】flake8 零告警;应用启动;dept/city 服务运行时正常;12 passed

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 15:32:46 +08:00
DjangoAdmin DevandClaude c2a4910d60 refactor: P4c 批次2 服务层改造(article/category/file_template)
- 3 模块按新范式改造(get_x_page(params)、add/update(data)、delete(ids)等)
- category 为 tree 型:list/data 函数改为 params 化返回 list(手动处理)
- get_info 全部委托 Repository(新增 3 个 repository.py)
- upload 记为例外:文件上传依赖 request.files,不适合数据入参范式
  (其辅助函数已是纯函数可测)

【工具】批次1 codemod 复用 + ast 级未用导入清理(避免 prefix 误删)
【验收】flake8 零告警;应用启动;3 服务运行时正常;12 passed

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 15:26:51 +08:00
DjangoAdmin DevandClaude 3f55f62f0d refactor: P4c 批次1 服务层改造(notice/param/link/level)
【服务层新范式批量铺开】4 个 uniform 模块:
- service:get_x_page(params)->dict、add/update/status(data)->None、
  delete(ids)->int、get_info 委托 Repository(新建 repository.py)
- 业务失败 raise BizError;router 取参包 R
- level 的 Excel import/export 暂保留 R 返回(后续统一改造)

【工具】codemod 函数级转换(try/except 退格移除、R.failed→BizError、
R.ok→return data)+ black 格式化 + 未用导入清理

【教训】清理脚本 startswith 前缀误删含多名字的 import 行(models_to_list,
model_to_dict 同行)导致 F821,已按 F821 精确补回

【验收】应用启动;4 服务分页查询运行时正常;12 passed;flake8 零告警

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 15:15:22 +08:00
DjangoAdmin DevandClaude 0cfaf8c894 refactor: P4b position 标杆模块服务层改造 + 单元测试
【服务层新范式】system/position 作为标杆:
- service 函数改「入参数据/出参数据」:get_position_page(params)->dict、
  add_position(data)/update_position(data)/update_position_status(data)->None、
  delete_positions(ids)->int
- 业务失败 raise BizError(不再 return R.failed),由全局处理器转 R.failed
- get_info 委托 PositionRepository(新增 repository.py,继承 BaseRepository)
- router 负责取参(query args / parse_request_body)与 R 包装

【单元测试】tests/unit/test_modules/test_position_service.py:
- 纯函数(_build_page_data)、BizError 契约(空数据/空ID/无效ID)、
  mock 批量删除(ID 解析验证)——无需数据库即可测试
- conftest flask_app fixture 增加 SECRET_KEY + 关闭 CSRF

【验收】12 passed(5 响应 + 7 position);应用启动;flake8 零告警;
position 路由 401 拦截正常。服务层测试化范式验证可行

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 14:42:03 +08:00
DjangoAdmin DevandClaude d33dc1fc34 refactor: P3d 视图层迁入 src/modules/ → router.py(26 视图)——P3 全部完成
- 17 个单视图 + 4 组合并(login+index→auth、config+config_item→configuration、
  dict+dict_item→dictionary、login_log+operation_log→log)
- 重写:服务引用→src.modules(module 别名保留)、models/forms→src.modules
- 中间件引用保持 application.middleware(P5 迁移)
- application/views/__init__.py 蓝图注册加去重(合并模块 shim 重复导出)
- application/views/ 全部替换为 shim

【修复】index.py 组合导入 menu,user 被单名替换先命中残留 user,已修复

【验收】25 蓝图无重复注册;应用启动;pytest 5 passed;接口冒烟(登录校验、
鉴权 401)正常。P3 四层(models/forms/services/views)全部迁入 src/modules/

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 14:23:53 +08:00
DjangoAdmin DevandClaude 87aec4e26e refactor: P3c 服务层迁入 src/modules/ → service.py(29 服务)
- 22 个单服务 + 3 组合并(config+config_item、dict+dict_item、login_log+operation_log)
- 特殊命名:job_executor→executor、scheduler→scheduler_service、
  mail_svc→mail_service、sms_svc→sms_service(含使用处标识符改写)
- 重写引用:跨服务(module 别名/子模块)、models/forms→src.modules、
  db/extensions→src.core、utils→src.common|core、R→src.core.response
- application/services/ 全部替换为 shim

【验收】全部服务文件编译通过;应用启动;pytest 5 passed;核心服务导入正常

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 14:18:40 +08:00
DjangoAdmin DevandClaude 2586c0aace refactor: P3b 表单层迁入 src/modules/ → schema.py(23 表单)
- 20 个模块 schema.py(auth/system/association/cms 等)
- 合并 2 组:dict+dict_item、config+config_item
- 重写 import:base_form/fields→src.common.forms、模型引用→src.modules
- application/forms/ 全部替换为 shim

【教训】codemod 首次运行崩溃后重跑,读到了已替换的 shim 导致 9 个
schema.py 自引用损坏;已从 git(P3a 提交)恢复原版重跑修复

【验收】32 表单类;应用启动;pytest 5 passed

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 14:01:35 +08:00
DjangoAdmin DevandClaude 6de4f3bef2 refactor: P3a 模型层迁入 src/modules/(22 模型)
- 19 个模块目录(system/association/cms/dictionary/configuration/log 等)
- 一对一 16 个 + 合并 3 组(dict+dict_item、config+config_item、login_log+operation_log)
- 重写模型 import:base_db/base_model→src.common、db→src.core.database、
  case_converter/rich_text/request→src.common.utils
- application/models/ 全部替换为 shim(指向 src.modules)
- src/models_registry.py 改为从 src.modules 全量导入

【修复】codemod 两处 bug:shim 与 registry 的 import 路径含斜杠(已改点分);
strip_license 误剥无许可头文件的 docstring 开头(log/models.py 已补回)

【验收】22 表全量识别;应用启动;pytest 5 passed

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 13:48:30 +08:00