thread-master/apps/backend/generate/database/README.md

65 lines
1.8 KiB
Markdown
Raw 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.

# Database migrationsgolang-migrate + MongoDB
**第一性原理:** indexseed 用 **檔案** 宣告,交給 `migrate`;沒有 Go seederinit 程式。
工具:[golang-migrate](https://github.com/golang-migrate/migrate)
Mongo driver 讀的是 **JSON**`db.runCommand` 陣列),不是 shell `.js`
## 目錄
```text
generate/database/mongo/
000001_members_indexes.up.json
000001_members_indexes.down.json
000002_jobs_indexes.up.json
...
000003_seed_admin.up.json # 可選種子
```
命名:`{version}_{name}.up.json` / `.down.json`
## 指令
```bash
# 安裝 CLI一次
go install -tags 'mongodb' github.com/golang-migrate/migrate/v4/cmd/migrate@latest
# 連線字串要含 database 名
export MONGO_URL='mongodb://127.0.0.1:27017/haixun'
# 套用全部
migrate -path generate/database/mongo -database "$MONGO_URL" up
# 回滾一步
migrate -path generate/database/mongo -database "$MONGO_URL" down 1
# 看版本
migrate -path generate/database/mongo -database "$MONGO_URL" version
```
Makefile
```bash
make migrate-up
make migrate-down
```
## 何時寫什麼
| 類型 | 放哪 | 範例 |
|------|------|------|
| Index / collection 約束 | `*.up.json` createIndexes | members.uid unique |
| 種子資料 | 另開 version如 000003_seed_* | admin 帳 |
| 業務邏輯、密碼 runtime 產生 | **不要**寫進 migration | 用 API / 測試 helper |
種子 admin 預設:`admin@haixun.local` / `admin123`hash 寫死在 up 檔;正式環境請改或不要跑 seed migration
## 與 gateway
`make migrate-up`,再 `go run . -f etc/gateway.yaml`(需 Mongo + Redis
## 不要
- 手寫 Go seederinit
- 手寫 migration runner
- 把 stand-alone 電商 `.txt` 當 migrate 來源(格式不同;要用 JSON runCommand