将 Clover 从上层产品包旧仓库中独立出来,建立专属版本控制。 当前状态=纵切片端到端已打通(登录→选品→出文出图→审核→下载包), M1文案质量去套路化已验收。此提交作为后续按核销清单逐条修复的基线。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1.9 KiB
1.9 KiB
paths
| paths | |||
|---|---|---|---|
|
数据库规则(Clover · MySQL + Alembic)
承接架构方案v0.3 第三章(16表)。一期建14张,matrix_accounts/preference_profile 二期预留。
迁移
- 每次 schema 变更创建迁移文件,不手动改数据库
- 迁移文件不可修改已提交的,只能新增
- 迁移必须包含 up 和 down
- 按序:001(banana搬3张) → 002(多租户基础) → 003(业务7张) → 004(飞轮)
查询
- 禁止 SELECT *,明确列出字段
- 大表查询必须有索引支撑,新增查询模式时同步加索引
- N+1 问题:关联查询用 JOIN 或批量加载
- 飞轮聚合走 MySQL JOIN(MongoDB 只存 AI debug trace,业务不依赖)
命名
- 表名:snake_case 复数(users, generation_tasks, preference_events)
- 字段名:snake_case(created_at, workspace_id)
- 索引名:idx_表名_字段名
关键约束(架构方案)
- 任务主键:自增 BIGINT + mongo_trace_id VARCHAR(24)
- user_api_keys:UNIQUE(user_id, workspace_id, provider)
- 所有业务表必须有 workspace_id(多租户逻辑隔离)
- preference_events 必须有 workspace_id + product_id(跨公司隔离+按产品分开学)
状态机(generation_tasks.status)
pending → generating → pending_selection → pending_review → approved/rejected → archived
- 打回后回到 pending_selection
- 非法流转返错误码 40901
字段红线
- API Key 字段:encrypted_key(Fernet),不存 url 字段(token站固定自家站)
- users 表:删除 banana 的 credits 字段
- eval_score:留 NULL(不接 banana 假评分)
- data_ownership:client_data / platform_asset(洞7分层归属)
- banned_words.level:auto_fix / soft_warn / hard_block(三级)
枚举约束
- DB 枚举约束要有对应代码侧常量文件(消除三套命名打架)
- 品类(products.category)是纯数据字段,禁止任何品类枚举常量