gitadmin
|
2857e0f2da
|
签入版本
|
2026-09-12 18:57:19 +08:00 |
|
 DjangoAdmin DevandClaude
|
d45b61d808
|
docs+tests: P8 测试与文档(CHANGELOG/CONTRIBUTING + 补充单测)
- CHANGELOG.md / CONTRIBUTING.md
- 新增 exceptions / case_converter 单元测试
- pytest 12 → 22 passed;全项目 flake8 0
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-07 19:53:01 +08:00 |
|
 DjangoAdmin DevandClaude
|
8937799973
|
refactor: P9 运维完善(健康端点/Docker 加固/CI-CD/scripts)
- /health 健康端点(白名单已加,Docker HEALTHCHECK 目标)
- docker-compose 加固:build context 修复、privileged false、flask_user、bridge 网络
- .github/workflows/ci.yml:flake8 + mypy + pytest(含 MySQL/Redis 服务)
- scripts/:health_check.py / init_db.py
- Makefile 更新为 src/ 结构
【验收】全项目 flake8 0;12 passed;/health 200;health_check 脚本运行正常
【注】docker-compose 实际构建验证需 Docker 环境执行
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-07 19:51:51 +08:00 |
|
DjangoAdmin Dev
|
2b001dde95
|
docs: CLAUDE.md 更新为 src/ 新结构与 /api/v1;方案文档 P7 完成
|
2026-08-07 19:47:24 +08:00 |
|
 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 Dev
|
4b0b28105c
|
docs: P5 DI 注入完成
|
2026-08-07 19:39:36 +08:00 |
|
DjangoAdmin Dev
|
410096547f
|
chore: 清理 P5 临时 codemod
|
2026-08-07 19:39:28 +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 Dev
|
35f89395a2
|
docs: P4 服务层改造全部完成(21 模块)
|
2026-08-07 17:33:09 +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 Dev
|
63afa4e629
|
docs: 重构方案 v2 更新 P4 状态(地基+标杆完成,铺开中)
|
2026-08-07 14:43:52 +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
|
a6e094378c
|
refactor: P4a 服务层改造地基(BizError + base_repository + base_service)
- src/core/exceptions.py:BizError/NotFoundError/PermissionDeniedError
- 全局异常处理器接入 BizError → R.failed(含事务回滚语义)
- src/common/base_repository.py:泛型 CRUD 仓储基类
- src/common/base_service.py:服务基类(入参数据/出参数据范式)
【验收】BizError 端到端转换为 R.failed(code=403/ok=false);应用启动
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-07 14:29:07 +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 |
|
 DjangoAdmin DevandClaude
|
658ee6d596
|
refactor: P2 core+common 建设(应用工厂/扩展/工具层迁入 src/)
【结构】
- src/core/:database/response/jwt/password/security/redis_client/mail/scheduler
- src/common/:base_model/base_db/forms(base_form+fields)/constants/utils
- src/models_registry.py:模型聚合器(Flask-Migrate 全量表识别)
【绞杀者 shim】extensions/、utils/、application/constants|forms|models 打兼容转发
【兼容修复】应用工厂抽取至 application/factory.py(P2 前置,P1 已完成)
【基线修复】application/models(25) + middleware(7) 原被嵌套 .gitignore(*)
误排除出版本库,已补入(base_model/base_db 现为 shim,原版在 src/common/)
【登记既有缺陷】
1. flask db CLI 因 .env FLASK_VERSION 与 --version 冲突报错 → Makefile 已加 FLASK_SKIP_DOTENV=1
2. 本机 Redis 未设密码但 REDIS_AUTH=True,/captcha 报 AUTH 错误(环境问题)
【验收】22 模型表全量识别;src/ flake8 零告警;pytest 5 passed;应用启动;
/login 表单校验、/user/page 鉴权拦截冒烟正常
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-07 13:20:46 +08:00 |
|
 DjangoAdmin DevandClaude
|
92130ef070
|
chore: P1 验证通过 + 应用工厂抽取(修复循环导入)
- application/factory.py:应用工厂独立成模块,application 包保持轻量
(修复 utils→application.constants 触发全量导入的循环依赖,P2 前置改造)
- app.py 改为 from application.factory import create_app
- tests/conftest.py:新增 flask_app 上下文 fixture
- test_response.py:R.ok/failed 在应用上下文中测试
- .flake8:修复 extend-ignore 行内注释导致 flake8 解析失败
验证:
- pytest 5 passed
- 应用完整构建 OK(MySQL/Redis 就绪)
- flake8 存量基线 154 条(F401×111 / E402×36 / 其余 7)已登记
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-07 12:22:56 +08:00 |
|
 DjangoAdmin DevandClaude
|
8691412ec6
|
chore: P1 工程化工具链
- pyproject.toml:pytest/black/isort/mypy 统一配置
- requirements-dev.txt:测试与代码规范开发依赖
- .flake8 / .editorconfig:PEP8 与编辑器统一
- .pre-commit-config.yaml:提交前钩子
- Makefile:常用命令集
- .env.example:环境变量模板(76 键)
- tests/:pytest 骨架 + R 响应格式冒烟测试
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-07 12:14:51 +08:00 |
|
 DjangoAdmin DevandClaude
|
15f2a5e097
|
chore: 基线提交(重构前代码快照)
- git 初始化 + .gitignore 补全(根 .env / logs / instance / __pycache__ 等)
- 修复 utils/.gitignore 误将整个 utils/ 源码层忽略的问题,补入全部工具源码(含 ip2region.xdb)
- 含后端全部代码:application / extensions / utils / config / migrations
- 含前端 ui/(后续整体迁走)
- 不含根 .env(含密钥,本地保留)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-07 12:12:06 +08:00 |
|