Initial AI manga platform

This commit is contained in:
www
2026-06-15 17:45:28 +08:00
commit 7a8191650f
267 changed files with 105987 additions and 0 deletions
+577
View File
@@ -0,0 +1,577 @@
# 05_数据库表结构设计
## 1. 文档目标
本文档定义系统 B 的 MySQL 核心表结构。字段类型为建议值,实际开发时可根据 ORM 选型调整。
## 2. 命名原则
- 表名使用复数:`users`, `projects`
- 主键统一为 `id BIGINT` 或 UUID,根据实现决定
- 时间字段统一:`created_at`, `updated_at`, `deleted_at`
- 状态字段统一使用字符串枚举
- 金额使用整数分:`amount_cent`
- JSON 配置使用 `JSON` 类型
## 3. users 用户表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 用户 ID |
| nickname | VARCHAR(100) | 昵称 |
| phone | VARCHAR(30) | 手机号 |
| email | VARCHAR(100) | 邮箱 |
| wechat_openid | VARCHAR(100) | 微信 openid |
| avatar_asset_id | BIGINT | 头像资源 |
| status | VARCHAR(30) | active/disabled |
| created_at | DATETIME | 创建时间 |
| updated_at | DATETIME | 更新时间 |
索引:
- UNIQUE(phone)
- UNIQUE(wechat_openid)
## 4. admin_users 后台用户表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 管理员 ID |
| username | VARCHAR(100) | 用户名 |
| password_hash | VARCHAR(255) | 密码哈希 |
| role_id | BIGINT | 角色 ID |
| status | VARCHAR(30) | 状态 |
| created_at | DATETIME | 创建时间 |
## 5. roles 角色表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 角色 ID |
| name | VARCHAR(100) | 角色名称 |
| code | VARCHAR(100) | 角色编码 |
| permissions | JSON | 权限列表 |
| status | VARCHAR(30) | 状态 |
## 6. projects 项目表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 项目 ID |
| user_id | BIGINT | 用户 ID |
| title | VARCHAR(200) | 项目标题 |
| life_theme_id | BIGINT | 人生主题 |
| package_id | BIGINT | 套餐 |
| style_id | BIGINT | 视觉风格 |
| output_type | VARCHAR(30) | image/video/both |
| status | VARCHAR(50) | 项目状态 |
| payment_status | VARCHAR(50) | 支付状态 |
| total_duration | INT | 视频秒数 |
| image_count | INT | 图片数量 |
| cover_asset_id | BIGINT | 封面 |
| video_asset_id | BIGINT | 视频 |
| allow_public_case | BOOLEAN | 是否允许公开案例 |
| custom_info | JSON | 用户定制信息 |
| created_at | DATETIME | 创建时间 |
| updated_at | DATETIME | 更新时间 |
| completed_at | DATETIME | 完成时间 |
索引:
- INDEX(user_id, status)
- INDEX(created_at)
- INDEX(life_theme_id)
## 7. orders 订单表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 订单 ID |
| user_id | BIGINT | 用户 ID |
| project_id | BIGINT | 项目 ID |
| package_id | BIGINT | 套餐 ID |
| amount_cent | INT | 金额,单位分 |
| pay_status | VARCHAR(30) | pending/paid/failed/cancelled |
| pay_method | VARCHAR(30) | wechat/alipay/balance/manual |
| transaction_id | VARCHAR(100) | 第三方交易号 |
| refund_status | VARCHAR(30) | none/refunding/refunded |
| created_at | DATETIME | 创建时间 |
| paid_at | DATETIME | 支付时间 |
## 8. packages 套餐表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 套餐 ID |
| code | VARCHAR(100) | 编码 |
| name | VARCHAR(100) | 名称 |
| price_cent | INT | 价格 |
| world_min | INT | 最少世界数 |
| world_max | INT | 最多世界数 |
| scene_min | INT | 最少场景数 |
| scene_max | INT | 最多场景数 |
| image_min | INT | 最少图片数 |
| image_max | INT | 最多图片数 |
| video_duration_min | INT | 最短视频秒数 |
| video_duration_max | INT | 最长视频秒数 |
| revision_count | INT | 修改次数 |
| allow_video | BOOLEAN | 是否视频 |
| allow_voice | BOOLEAN | 是否旁白 |
| allow_advanced_video | BOOLEAN | 是否高级动态 |
| manual_review_required | BOOLEAN | 是否人工审核 |
| config_json | JSON | 扩展配置 |
| status | VARCHAR(30) | 状态 |
## 9. life_themes 人生主题表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 主题 ID |
| code | VARCHAR(100) | 编码 |
| name | VARCHAR(100) | 名称 |
| description | TEXT | 说明 |
| cover_asset_id | BIGINT | 封面 |
| person_schema | JSON | 人物结构规则 |
| default_copy_moods | JSON | 默认文案风格 |
| status | VARCHAR(30) | 状态 |
| sort_order | INT | 排序 |
person_schema 示例:
```json
{
"type": "couple",
"roles": ["person_a", "person_b"],
"min_photos_each": 3,
"max_photos_each": 8,
"minor_sensitive": false
}
```
## 10. style_templates 风格模板表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 风格 ID |
| code | VARCHAR(100) | 编码 |
| name | VARCHAR(100) | 名称 |
| description | TEXT | 说明 |
| cover_asset_id | BIGINT | 封面 |
| prompt_style | TEXT | 风格 Prompt |
| negative_rules | TEXT | 禁止项 |
| supported_theme_ids | JSON | 支持主题 |
| status | VARCHAR(30) | 状态 |
## 11. world_templates 世界观模板表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 世界 ID |
| code | VARCHAR(100) | 编码 |
| name | VARCHAR(100) | 名称 |
| category | VARCHAR(100) | 分类 |
| description | TEXT | 说明 |
| cover_asset_id | BIGINT | 封面 |
| prompt_base | TEXT | 世界基础 Prompt |
| costume_rules | TEXT | 服装规则 |
| scene_rules | TEXT | 场景规则 |
| style_rules | TEXT | 风格规则 |
| negative_rules | TEXT | 禁止项 |
| supported_theme_ids | JSON | 支持主题 |
| supported_style_ids | JSON | 支持风格 |
| is_premium | BOOLEAN | 高级模板 |
| status | VARCHAR(30) | 状态 |
| sort_order | INT | 排序 |
## 12. scene_templates 场景模板表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 场景 ID |
| world_id | BIGINT | 所属世界 |
| code | VARCHAR(100) | 编码 |
| name | VARCHAR(100) | 名称 |
| description | TEXT | 说明 |
| cover_asset_id | BIGINT | 封面 |
| scene_prompt | TEXT | 场景 Prompt |
| composition_rules | TEXT | 构图规则 |
| lighting_rules | TEXT | 光影规则 |
| effect_type | VARCHAR(100) | 特效类型 |
| recommended_shot_count | INT | 推荐镜头数 |
| is_premium | BOOLEAN | 高级场景 |
| status | VARCHAR(30) | 状态 |
| sort_order | INT | 排序 |
## 13. shot_templates 镜头模板表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 镜头模板 ID |
| scene_id | BIGINT | 所属场景 |
| code | VARCHAR(100) | 编码 |
| name | VARCHAR(100) | 名称 |
| shot_type | VARCHAR(100) | 镜头类型 |
| camera_angle | VARCHAR(100) | 视角 |
| composition | TEXT | 构图 |
| prompt_rule | TEXT | Prompt 规则 |
| duration | INT | 默认秒数 |
| effect_type | VARCHAR(100) | 运镜/特效 |
| status | VARCHAR(30) | 状态 |
| sort_order | INT | 排序 |
## 14. project_worlds 项目世界关系表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | ID |
| project_id | BIGINT | 项目 ID |
| world_id | BIGINT | 世界 ID |
| sort_order | INT | 顺序 |
## 15. project_scenes 项目场景关系表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | ID |
| project_id | BIGINT | 项目 ID |
| world_id | BIGINT | 世界 ID |
| scene_id | BIGINT | 场景 ID |
| sort_order | INT | 顺序 |
## 16. person_profiles 人物档案表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 人物档案 ID |
| project_id | BIGINT | 项目 ID |
| role | VARCHAR(50) | person_a/person_b/child 等 |
| name | VARCHAR(100) | 名称 |
| gender_label | VARCHAR(50) | 性别标签,可选 |
| age_group | VARCHAR(50) | 年龄段 |
| appearance_summary | TEXT | 外貌摘要 |
| reference_asset_ids | JSON | 参考照片 |
| anchor_asset_id | BIGINT | 锚点图 |
| quality_score | DECIMAL(5,2) | 质量分 |
| status | VARCHAR(30) | 状态 |
| created_at | DATETIME | 创建时间 |
V3 真人动态视频增强字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| identity_lock_status | VARCHAR(50) | unlocked/generating_anchor/waiting_user_confirm/locked/rejected |
| face_consistency_score | DECIMAL(5,2) | 本人相似度评分 |
| primary_reference_asset_id | BIGINT | 主参考照片 |
| approved_anchor_asset_id | BIGINT | 用户确认的身份锚点 |
| age_preserve_rule | VARCHAR(100) | 年龄保持规则:strict/soft/allow_younger 等 |
| beautify_level | VARCHAR(50) | 美化强度:none/light/medium/high |
| style_transform_level | VARCHAR(50) | 风格转换强度:realistic/semi_real/comic |
| privacy_level | VARCHAR(50) | 隐私等级:normal/sensitive/minor |
## 17. assets 素材表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 素材 ID |
| user_id | BIGINT | 用户 ID |
| project_id | BIGINT | 项目 ID |
| asset_type | VARCHAR(50) | 类型 |
| file_path | VARCHAR(500) | 存储路径 |
| file_url | VARCHAR(500) | 访问 URL,可为空 |
| mime_type | VARCHAR(100) | MIME |
| width | INT | 宽 |
| height | INT | 高 |
| duration | INT | 音视频秒数 |
| size | BIGINT | 文件大小 |
| hash | VARCHAR(100) | 文件哈希 |
| visibility | VARCHAR(30) | private/public/case |
| status | VARCHAR(30) | 状态 |
| created_at | DATETIME | 创建时间 |
asset_type
```text
upload_photo
preview_image
final_image
audio
subtitle
video
cover
case_asset
music
```
## 18. shot_plans 镜头计划表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 镜头计划 ID |
| project_id | BIGINT | 项目 ID |
| world_id | BIGINT | 世界 ID |
| scene_id | BIGINT | 场景 ID |
| shot_template_id | BIGINT | 镜头模板 ID |
| title | VARCHAR(200) | 标题 |
| description | TEXT | 画面描述 |
| prompt_text | TEXT | 正向 Prompt |
| negative_prompt | TEXT | 负向 Prompt |
| duration | INT | 秒数 |
| output_asset_id | BIGINT | 生成图 |
| sort_order | INT | 顺序 |
| status | VARCHAR(30) | 状态 |
## 19. render_tasks 生成任务表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 任务 ID |
| project_id | BIGINT | 项目 ID |
| task_type | VARCHAR(100) | 任务类型 |
| provider_id | BIGINT | Provider |
| status | VARCHAR(30) | 状态 |
| input_json | JSON | 输入 |
| input_hash | VARCHAR(100) | 幂等哈希 |
| output_asset_id | BIGINT | 输出素材 |
| provider_request_id | VARCHAR(200) | 三方请求 ID |
| retry_count | INT | 重试次数 |
| max_retry | INT | 最大重试 |
| cost_estimate_cent | INT | 预估成本 |
| cost_actual_cent | INT | 实际成本 |
| error_code | VARCHAR(100) | 错误码 |
| error_message | TEXT | 错误信息 |
| created_at | DATETIME | 创建时间 |
| started_at | DATETIME | 开始时间 |
| finished_at | DATETIME | 完成时间 |
索引:
- UNIQUE(project_id, task_type, input_hash)
- INDEX(status, created_at)
## 20. provider_configs Provider 配置表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | Provider ID |
| provider_type | VARCHAR(50) | text/image/video/voice/moderation |
| provider_name | VARCHAR(100) | 名称 |
| model_name | VARCHAR(100) | 模型名 |
| api_base | VARCHAR(500) | API Base |
| api_key_ref | VARCHAR(100) | 密钥引用,不直接存明文 |
| priority | INT | 优先级 |
| quality_level | VARCHAR(50) | quality/speed/cost |
| rate_limit_json | JSON | 限流配置 |
| cost_rule_json | JSON | 成本规则 |
| fallback_provider_id | BIGINT | 备用 Provider |
| status | VARCHAR(30) | 状态 |
## 21. provider_logs Provider 日志表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 日志 ID |
| provider_id | BIGINT | Provider |
| project_id | BIGINT | 项目 |
| task_id | BIGINT | 任务 |
| request_payload | JSON | 请求,可脱敏 |
| response_payload | JSON | 响应,可脱敏 |
| status | VARCHAR(30) | 状态 |
| cost_cent | INT | 成本 |
| latency_ms | INT | 耗时 |
| created_at | DATETIME | 创建时间 |
## 22. revision_requests 修改申请表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 修改 ID |
| project_id | BIGINT | 项目 ID |
| user_id | BIGINT | 用户 ID |
| revision_type | VARCHAR(30) | small/medium/major |
| request_text | TEXT | 修改内容 |
| status | VARCHAR(30) | 状态 |
| remaining_count_before | INT | 修改前剩余次数 |
| handled_by | BIGINT | 处理人 |
| created_at | DATETIME | 创建时间 |
| updated_at | DATETIME | 更新时间 |
## 23. authorizations 授权记录表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 授权 ID |
| user_id | BIGINT | 用户 ID |
| project_id | BIGINT | 项目 ID |
| authorization_type | VARCHAR(50) | 类型 |
| content | TEXT | 授权文本 |
| ip | VARCHAR(100) | IP |
| user_agent | TEXT | UA |
| confirmed_at | DATETIME | 确认时间 |
类型:
```text
photo_usage
public_case
minor_guardian
privacy_policy
terms
```
## 24. case_showcases 案例表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 案例 ID |
| project_id | BIGINT | 来源项目 |
| title | VARCHAR(200) | 标题 |
| cover_asset_id | BIGINT | 封面 |
| video_asset_id | BIGINT | 视频 |
| theme_id | BIGINT | 主题 |
| style_id | BIGINT | 风格 |
| world_ids | JSON | 世界列表 |
| sort_order | INT | 排序 |
| is_featured | BOOLEAN | 首页推荐 |
| status | VARCHAR(30) | 状态 |
| authorization_id | BIGINT | 授权记录 |
## 25. music_assets 音乐素材表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 音乐 ID |
| name | VARCHAR(200) | 名称 |
| mood | VARCHAR(100) | 情绪 |
| asset_id | BIGINT | 音频资源 |
| duration | INT | 秒数 |
| license_type | VARCHAR(100) | 授权类型 |
| source | VARCHAR(200) | 来源 |
| usage_scope | TEXT | 使用范围 |
| status | VARCHAR(30) | 状态 |
## 26. system_configs 系统配置表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 配置 ID |
| config_key | VARCHAR(100) | Key |
| config_value | JSON | Value |
| description | TEXT | 说明 |
| updated_at | DATETIME | 更新时间 |
## 27. audit_logs 操作日志表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 日志 ID |
| actor_type | VARCHAR(30) | user/admin/system |
| actor_id | BIGINT | 操作人 |
| action | VARCHAR(100) | 动作 |
| target_type | VARCHAR(100) | 目标类型 |
| target_id | BIGINT | 目标 ID |
| detail_json | JSON | 详情 |
| ip | VARCHAR(100) | IP |
| created_at | DATETIME | 创建时间 |
## 28. V3 identity_anchors 身份锚点表
用于保存真人身份锚点,确保后续图片和视频尽量像本人。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 锚点 ID |
| project_id | BIGINT | 项目 ID |
| person_id | BIGINT | 人物档案 ID |
| anchor_asset_id | BIGINT | 锚点素材 |
| anchor_type | VARCHAR(80) | real_photo_anchor/semi_realistic_anchor/korean_comic_anchor/ancient_costume_anchor/future_style_anchor |
| quality_score | DECIMAL(5,2) | 锚点质量分 |
| face_consistency_score | DECIMAL(5,2) | 与本人相似度 |
| approved_by_user | BOOLEAN | 用户是否确认 |
| approved_by_admin | BOOLEAN | 后台是否确认 |
| status | VARCHAR(50) | generating/waiting_confirm/approved/rejected |
| created_at | DATETIME | 创建时间 |
| updated_at | DATETIME | 更新时间 |
## 29. V3 motion_templates 动作模板表
用于控制动态写真和真人视频片段的动作范围。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 动作模板 ID |
| name | VARCHAR(100) | 动作名称 |
| motion_type | VARCHAR(100) | smile/blink/turn_head/walk_forward/hold_hands 等 |
| description | TEXT | 说明 |
| supported_themes | JSON | 支持人生主题 |
| supported_worlds | JSON | 支持世界模板 |
| supported_styles | JSON | 支持视觉风格 |
| prompt_rule | TEXT | 动作 Prompt 规则 |
| duration | INT | 默认片段秒数 |
| difficulty_level | VARCHAR(50) | easy/medium/hard |
| cost_level | VARCHAR(50) | low/medium/high |
| status | VARCHAR(30) | 状态 |
| sort_order | INT | 排序 |
推荐动作:
```text
smile
blink
turn_head
walk_forward
hold_hands
look_at_each_other
bow_ceremony
lift_veil
hug
wave
stand_still_cinematic
slow_camera_push
```
## 30. V3 video_clips 视频片段表
每个 AI 动态视频片段单独存储,便于重试、替换、质检和成本追踪。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 视频片段 ID |
| project_id | BIGINT | 项目 ID |
| scene_id | BIGINT | 场景 ID |
| shot_id | BIGINT | 镜头 ID |
| person_ids | JSON | 涉及人物 ID |
| provider_id | BIGINT | Provider 配置 ID |
| input_asset_id | BIGINT | 输入关键帧 / 参考图 |
| output_asset_id | BIGINT | 输出视频素材 |
| prompt_text | TEXT | 视频 Prompt |
| duration | INT | 秒数 |
| resolution | VARCHAR(50) | 720p/1080p |
| motion_type | VARCHAR(100) | 动作类型 |
| lipsync_enabled | BOOLEAN | 是否启用口型 |
| status | VARCHAR(50) | pending/running/generated/failed/manual_required |
| retry_count | INT | 重试次数 |
| cost_actual | DECIMAL(12,4) | 实际成本 |
| quality_score | DECIMAL(5,2) | 质检分 |
| quality_issues | JSON | 质检问题 |
| created_at | DATETIME | 创建时间 |
| updated_at | DATETIME | 更新时间 |
## 31. V3 lipsync_tasks 口型任务表
口型任务可选,不应阻塞基础交付;失败时可回退旁白字幕版本。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK | 任务 ID |
| project_id | BIGINT | 项目 ID |
| video_clip_id | BIGINT | 视频片段 ID |
| audio_asset_id | BIGINT | 输入音频 |
| output_asset_id | BIGINT | 口型后视频 |
| provider_id | BIGINT | LipSync Provider |
| status | VARCHAR(50) | pending/running/success/failed/manual_required |
| cost_actual | DECIMAL(12,4) | 实际成本 |
| retry_count | INT | 重试次数 |
| error_code | VARCHAR(100) | 错误码 |
| error_message | TEXT | 错误信息 |
| created_at | DATETIME | 创建时间 |
| updated_at | DATETIME | 更新时间 |