# Game database migrations

`game.prisma`의 운영·검증 DB는 이 디렉터리의 migration chain으로
준비한다. 새 환경을 `prisma db push`만으로 만들지 않는다.

## 적용

Git에서 제외된 환경 파일 또는 secret 주입으로 `DATABASE_URL`을 설정한 뒤
저장소 루트에서 실행한다.

```bash
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 파일을
수정하지 말고 뒤에 추가한다.

## 빈 DB 검증

다른 개발 DB나 volume을 재사용하지 말고 전용 임시 PostgreSQL database를
만든다. 위 deploy 명령을 한 번 실행해 전체 migration이 성공하는지,
두 번째 실행이 `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` 존재
- `city.trade` nullable, `city.trust` REAL
- `auction_bid.meta` JSONB, NOT NULL

검증 뒤에는 이름을 확인한 임시 database와 role만 제거한다. 공유 개발
database나 Compose volume을 삭제하지 않는다.
