docs: consolidate current architecture documentation
This commit is contained in:
@@ -1,40 +1,38 @@
|
||||
# Game database migrations
|
||||
# Game database migration
|
||||
|
||||
`game.prisma`의 운영·검증 DB는 이 디렉터리의 migration chain으로
|
||||
준비한다. 새 환경을 `prisma db push`만으로 만들지 않는다.
|
||||
`game.prisma`의 운영·검증 database는 이 디렉터리의 migration chain으로
|
||||
준비합니다. `prisma db push`는 정식 migration을 대신하지 않습니다.
|
||||
|
||||
## 적용
|
||||
|
||||
Git에서 제외된 환경 파일 또는 secret 주입으로 `DATABASE_URL`을 설정한 뒤
|
||||
저장소 루트에서 실행한다.
|
||||
Git에서 제외된 환경 파일 또는 secret 주입으로 `DATABASE_URL`을 설정합니다.
|
||||
|
||||
```bash
|
||||
```sh
|
||||
pnpm --filter @sammo-ts/infra prisma:migrate:deploy:game
|
||||
pnpm --filter @sammo-ts/infra prisma:migrate:status:game
|
||||
```
|
||||
|
||||
`20250101000000_init_game_schema`는 증분 migration 이력이 생기기 전에
|
||||
`db push`로 제공되던 핵심 game table의 baseline이다. 기존 설치에는
|
||||
이미 같은 object가 있으므로 type, table과 index 생성은 idempotent하게
|
||||
작성했다. 새 migration은 이 baseline 또는 기존 migration 파일을
|
||||
수정하지 말고 뒤에 추가한다.
|
||||
`20250101000000_init_game_schema`가 game schema의 baseline입니다. Baseline과
|
||||
적용된 migration 파일·checksum은 수정하지 않고 새 timestamp migration을
|
||||
추가합니다.
|
||||
|
||||
## 빈 DB 검증
|
||||
|
||||
다른 개발 DB나 volume을 재사용하지 말고 전용 임시 PostgreSQL database를
|
||||
만든다. 위 deploy 명령을 한 번 실행해 전체 migration이 성공하는지,
|
||||
두 번째 실행이 `No pending migrations to apply`인지 확인한다. 최소한
|
||||
다음도 확인한다.
|
||||
전용 임시 PostgreSQL database에 deploy를 두 번 실행합니다. 첫 실행은 전체
|
||||
chain을 적용하고 두 번째 실행은 `No pending migrations to apply`여야 합니다.
|
||||
|
||||
최소 확인 항목은 다음과 같습니다.
|
||||
|
||||
- `_prisma_migrations`의 모든 행이 완료 상태
|
||||
- `world_state`, `nation`, `city`, `general`, `message`, `troop`,
|
||||
`general_turn`, `nation_turn`, `diplomacy`, `event`, `log_entry`,
|
||||
`error_log` 존재
|
||||
- `nation.chief_general_id` 존재
|
||||
- `world_state`, `nation`, `city`, `general`, `message`, `troop`
|
||||
- `general_turn`, `nation_turn`과 revision·lease field
|
||||
- `input_event`, `turn_daemon_lease`
|
||||
- `diplomacy`, `event`, `log_entry`, `error_log`
|
||||
- auction, board, vote, yearbook, archive와 inheritance table
|
||||
- `nation.chief_general_id`
|
||||
- `city.trade` nullable, `city.trust` REAL
|
||||
- `auction_bid.meta` JSONB, NOT NULL
|
||||
- `traffic_period`, `traffic_period_general` 존재 및
|
||||
`(world_state_id, year, month)`/`(period_id, general_id)` unique key
|
||||
- `auction_bid.meta` JSONB NOT NULL
|
||||
- `traffic_period`, `traffic_period_general`과 unique key
|
||||
|
||||
검증 뒤에는 이름을 확인한 임시 database와 role만 제거한다. 공유 개발
|
||||
database나 Compose volume을 삭제하지 않는다.
|
||||
검증이 끝나면 이름을 직접 확인한 임시 database와 role만 제거합니다. 공유
|
||||
database나 Compose volume을 삭제하지 않습니다.
|
||||
|
||||
Reference in New Issue
Block a user