Files
soul-yongping/soul-api/scripts/README-schema-sync.md
Alex-larget 3d8873fe24 1
2026-03-11 14:49:45 +08:00

97 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 数据库与 Go Model 字段对照检查报告
> 后端工程师对照 `soul-api/internal/model` 与 `soul_miniprogram.sql` 建表结构,列出**数据库表里可能缺失、但代码里在用**的字段。
> 若当前库是由旧版 SQL 导入或从未执行过迁移脚本,按本报告执行 `sync-users-vip-and-schema.sql` 或依赖 AutoMigrate 即可补全。
---
## 一、结论摘要
| 表名 | 是否缺字段 | 缺失字段Model 有、SQL 无) | 影响 |
|------|------------|-----------------------------|------|
| **users** | 是(旧库可能缺) | is_vip, vip_expire_date, vip_activated_at, vip_sort, vip_role | 订单列表、用户列表、VIP 设置、提现、匹配记录等接口报错(不含 vip_name/vip_avatar 等,小程序已改为直接读用户资料) |
| **chapters** | 是SQL 导出无此列) | hot_score | 文章排名、热门章节等依赖热度分的接口报错 |
| 其他业务表 | 否 | - | 与当前 SQL 一致 |
---
## 二、users 表
- **Model 文件**`internal/model/user.go`
- **SQL 表**`soul_miniprogram.sql``CREATE TABLE users` 已包含 VIP 相关列;若你的库是**更早的备份**或**未导入最新 SQL**,可能缺少以下列。
| 列名(蛇形) | 类型 | 说明 |
|-------------|------|------|
| is_vip | TINYINT(1) NULL DEFAULT 0 | 是否 VIP |
| vip_expire_date | DATETIME(3) NULL | VIP 到期时间 |
| vip_activated_at | DATETIME(3) NULL | 成为 VIP 时间,排序用 |
| vip_sort | INT NULL | 手动排序,越小越前 |
| vip_role | VARCHAR(50) NULL | 角色:从 vip_roles 选或手动填写 |
vip_name、vip_avatar、vip_project、vip_contact、vip_bio 不再在迁移中新增,小程序已改为直接读用户资料 nickname/avatar/projectIntro/phone 等;已有库可保留该五列作兼容。)
**修复**:执行 `scripts/sync-users-vip-and-schema.sql` 中 users 部分,或重启 soul-api未设 `SKIP_AUTO_MIGRATE` 时 AutoMigrate 会补列)。
---
## 三、chapters 表
- **Model 文件**`internal/model/chapter.go`
- **SQL 表**:当前 `soul_miniprogram.sql``chapters` 仅有 `hot_score_override`decimal**没有** `hot_score`int
Model 使用的是 `hot_score`(热度分,用于排名算法),因此仅按该 SQL 建表时,数据库**缺少** `hot_score`
| 列名(蛇形) | 类型 | 说明 |
|-------------|------|------|
| hot_score | INT NOT NULL DEFAULT 0 | 热度分,用于排名算法 |
**修复**:执行 `scripts/sync-users-vip-and-schema.sql` 中 chapters 部分,或执行 `scripts/add-hot-score.sql`,或依赖 soul-api 启动时对 Chapter 的 AutoMigrate。
---
## 四、已核对无缺列的表
以下表在 `soul_miniprogram.sql` 中的列与对应 Model 一致,**无需补列**(仅列名与类型一致即可,顺序可不同):
- **orders**:与 `model.Order` 一致
- **withdrawals**:与 `model.Withdrawal` 一致(库中多出的 transaction_id、error_message 不影响)
- **admin_users**:与 `model.AdminUser` 一致
- **system_config**:与 `model.SystemConfig` 一致
- **referral_bindings**Model 字段在表中均存在
- **referral_visits**:与 `model.ReferralVisit` 一致
- **user_rules**:与 `model.UserRule` 一致
- **user_tracks**:与 `model.UserTrack` 一致
- **reading_progress**:与 `model.ReadingProgress` 一致(表为 section_idModel 为 section_id
- **match_records**:与 `model.MatchRecord` 一致
- **mentor_consultations**:与 `model.MentorConsultation` 一致
- **mentors**:与 `model.Mentor` 一致
- **link_tags**:与 `model.LinkTag` 一致
- **persons**:与 `model.Person` 一致
- **author_config**:与 `model.AuthorConfig` 一致
- **ckb_lead_records**:与 `model.CkbLeadRecord` 一致
- **ckb_submit_records**:与 `model.CkbSubmitRecord` 一致
- **user_addresses**:与 `model.UserAddress` 一致
- **vip_roles**:与 `model.VipRole` 一致
- **wechat_callback_logs**:与 `model.WechatCallbackLog` 一致
---
## 五、推荐操作
1. **一次性补全(推荐)**
在备份后执行:
```bash
mysql -u 用户 -p 数据库名 < soul-api/scripts/sync-users-vip-and-schema.sql
```
若某条报 `Duplicate column name`,表示该列已存在,可跳过。
2. **依赖 AutoMigrate**
确保 soul-api 的 `database.Init` 中已对 `User`、`SystemConfig`、`Chapter` 执行 `AutoMigrate`,且未设置 `SKIP_AUTO_MIGRATE`,重启服务后会自动补全缺失列。
3. **新建库**
若从零建库,建议用**最新**的 `soul_miniprogram.sql` 导入后,再执行一次 `sync-users-vip-and-schema.sql`,确保 users 与 chapters 与 Model 完全一致。
---
**检查日期**:按代码与 SQL 导出时点生成
**检查范围**soul-api 全部 `internal/model` 与 soul_miniprogram.sql 中对应表结构