需求:公开仓库的说明文档不应暴露开发/部署期信息,且 Gitea 会对 README.txt 报"含模棱两可的 Unicode 字符"。 敏感信息(全部替换为占位符或文档示例值): - 真实数据库实例:DB_HOST=192.168.150.10 / DB_USER=dpendance / DB_NAME=dpendance → <数据库主机> / opendance_app / opendance(web-server/.env.example、 deploy/.env.example、contracts/database.md ×3 库、project.yaml、README.txt 的建库 SQL、tasks/001、tasks/002) - 内网网段 192.168.150.0/24 / 192.168.150.20 / 192.168.1.10 → RFC 5737 文档网段 192.0.2.0/24 等(含测试夹具,行为不变) - 真实 Gitea 域名 → https://<Gitea 地址>/<owner>/<repo>(systemd 单元、 Windows/Android README 的交叉链接) - 测试夹具里的真实口令字面量 → 虚构口令(仍覆盖特殊字符场景) - 保留 /opt/opendance、/var/lib/opendance 等产品默认安装路径(非敏感) README.txt 易混淆字符: - 全角拉丁字母(I/K 等)与全角 ASCII 标点((),:;?)→ 半角 + 中文排版空格 - 正文里的乱码字节样例(模å…)→ 改为文字描述 - × → x,★ → * - 注意:代码/测试/契约里的全角「IK」是 MMD 真实骨骼名,**必须保留**, 已回滚误改(mmd-skeleton.ts、mmd-vmd.spec.ts、inspect-vmd.mjs、各契约) 验证:168 项单测通过(含 VMD 31 项,确认全角骨骼名未被破坏)。
58 lines
1.8 KiB
Markdown
58 lines
1.8 KiB
Markdown
# T-WEB-002 TypeORM 迁移生成表结构
|
||
|
||
- **状态**:done
|
||
- **依赖**:T-WEB-001
|
||
|
||
## 目标
|
||
|
||
用 TypeORM migration 在现有实例的 `opendance` 库中建立全部表结构。不使用
|
||
`DB_SYNCHRONIZE`,迁移必须可逆。
|
||
|
||
## load
|
||
|
||
```
|
||
DSH.md
|
||
contracts/database.md
|
||
contracts/data-models.md
|
||
web-server/src/entities/*.entity.ts
|
||
web-server/src/migrations/*.ts
|
||
web-server/src/db/data-source.ts
|
||
```
|
||
|
||
## 表结构
|
||
|
||
| 表 | 用途 | 关键列 |
|
||
|---|---|---|
|
||
| `assets` | 上传文件元数据 | `sha256` 唯一索引(去重)、`stored_path`、`size` |
|
||
| `songs` | 曲目 | 来源五元组、`status`、`deleted_at` |
|
||
| `motions` | 动作数据 | `song_id` FK(ON DELETE SET NULL)、预处理产物列 |
|
||
| `models` | 角色模型 | `format`、`vrm_version`、`is_primary` |
|
||
| `review_records` | 审核流水 | `(target_type, target_id)` 复合索引 |
|
||
|
||
统一约定(`contracts/database.md`):
|
||
|
||
- 表名 `snake_case` 复数;主键 `BIGINT AUTO_INCREMENT`
|
||
- 时间列 `DATETIME`;软删除 `deleted_at`
|
||
- Tags 使用 `simple-json`(MariaDB 下落 LONGTEXT,规避 JSON 类型差异)
|
||
|
||
## 交付物
|
||
|
||
- `web-server/src/entities/{asset,song,motion,model,review-record}.entity.ts`
|
||
- `web-server/src/migrations/1789382903060-InitSchema.ts`(由 `migration:generate`
|
||
对真实库生成,保证与实体零漂移)
|
||
- `web-server/src/db/data-source.ts` 的 `migrations` 通配配置
|
||
|
||
## 验收
|
||
|
||
```bash
|
||
cd web-server
|
||
npm run migration:run # 1 migrations were executed successfully
|
||
npm run migration:show # [X] 1 InitSchema1789382903060
|
||
npm run migration:revert && npm run migration:run # 验证可逆
|
||
```
|
||
|
||
## 结果
|
||
|
||
- 迁移已在 `opendance` 库执行成功,创建 5 张业务表 + `typeorm_migrations`。
|
||
- `down()` 完整删除索引、外键与表,可逆性通过 `migration:revert` 验证。
|