新增 mysql.md(t_ 表名与 migrate 流程),补全 /v1/music·square 与 admin 路由说明;description 与 AGENTS/rules 对齐 make test→lint 与 deploy 门禁,减少与 verify-before-done 重复。 Co-authored-by: Cursor <cursoragent@cursor.com>
35 lines
1.4 KiB
Markdown
35 lines
1.4 KiB
Markdown
# MySQL: `t_` tables, migrations, GORM
|
|
|
|
## Table names
|
|
|
|
All application tables use the **`t_` prefix** (`t_users`, `t_messages`, `t_music_tracks`, …).
|
|
|
|
| Layer | Rule |
|
|
|-------|------|
|
|
| SQL migrations | `CREATE TABLE t_*`, `RENAME TABLE … TO t_*` |
|
|
| GORM | `func (Row) TableName() string { return "t_…" }` on every row struct |
|
|
| Raw SQL in logic/model | Use `t_*` names; do not reference unprefixed legacy names |
|
|
|
|
Legacy DBs: `migrations/0000_table_prefix.sql` renames old tables before `0001+` (no-op if already prefixed). New environments rely on `CREATE t_*` in later files.
|
|
|
|
## Migrations workflow
|
|
|
|
- Files live in `migrations/*.sql`; **`cmd/migrate` replays every file** on each run (no version table). Order matters: `0000` before creates.
|
|
- Every new/changed migration: run in the agent session:
|
|
|
|
```bash
|
|
go run ./cmd/migrate -config configs/config.yaml
|
|
```
|
|
|
|
Do not tell the user to apply SQL manually on deploy unless they asked for ops-only steps.
|
|
|
|
## Schema documentation
|
|
|
|
- Table-level and column-level **`COMMENT`** in SQL; mirror intent in GORM struct tags where the team already uses comments.
|
|
- Closed numeric/string sets: entity enum + OpenAPI `$ref` ([enums.md](enums.md)), not ad hoc magic numbers in SQL.
|
|
|
|
## Logic tests vs DB
|
|
|
|
- `internal/module/*/logic` tests use stubs/fakes; they must **not** require MySQL.
|
|
- Model/repo integration belongs in transport tests or dedicated DB tests if added later.
|