docs: consolidate current architecture documentation

This commit is contained in:
2026-07-30 14:15:47 +00:00
parent 2045086278
commit 027225081d
56 changed files with 924 additions and 6369 deletions
+22 -24
View File
@@ -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을 삭제하지 않습니다.