# 予約番号統一化 Phase 2 Runbook

## 1. この作業でやること
- `booking_code`（新予約番号）を唯一の正本にする
- `reservation_seq` への互換保存を止める
- 既存データの未設定 `booking_code` を補完する
- 新規登録時に旧番号へ戻らないよう DBトリガーで固定する

## 2. 適用SQL
- `admins/sql/migrate_booking_code_phase2_stop_legacy_seq.sql`

## 3. 影響API一覧

### 3-1. 今回修正済み（書き込み系）
- `admins/api/create_reservation.php`
- `posrg/api/create_reservation.php`
- `web_yoyaku/payment.php`
- `web_yoyaku/process_booking.php`
- `admins/api/WaitlistService.php`

### 3-2. 参照項目名として旧キーが残る可能性あり（読み取り系/互換レスポンス）
- `posrg/api/get_reservation_for_print.php`
- `posrg/api/search_ticket.php`
- `admins/api/check_in.php`
- `admins/api/qr_check_in.php`
- `admins/api/export_passengers.php`
- `web_yoyaku/guest_lookup.php`
- `web_yoyaku/view_ticket.php`
- `web_yoyaku/view_single_ticket.php`

### 3-3. 参照系API 最終統一の実施結果（2026-02-16）
- 上記 3-2 の8ファイルは `booking_code` 表示/検索へ統一済み
- 互換キー（`reservation_number` / `reservation_seq`）が必要なレスポンスは `booking_code` を同値で返却

### 3-4. 互換キー名の最終整理（2026-02-16 追記）
- `posrg/api/*` と `admins/api/check_in.php` / `admins/api/qr_check_in.php` のレスポンスから `reservation_seq` を削除
- クライアント側は `booking_code` / `reservation_number` のみ参照するよう更新
- `reservation_seq` が残るのは POS(VB.NET) 連携メッセージの互換項目のみ（値は常に新予約番号）

## 4. 実行順チェックリスト（初心者向け）
- [ ] 1) 変更ファイルの構文チェック
- [ ] 2) DBバックアップ取得
- [ ] 3) Phase 2 SQLを適用
- [ ] 4) 適用後チェックSQLを実行
- [ ] 5) 画面/APIの最小動作確認（個人予約・当日予約）

## 5. 実行コマンド例

### 5-1. 構文チェック
```bash
php -l admins/api/create_reservation.php
php -l posrg/api/create_reservation.php
php -l web_yoyaku/payment.php
php -l web_yoyaku/process_booking.php
php -l admins/api/WaitlistService.php
```

### 5-2. DBバックアップ（必須）
```bash
mysqldump -udoto_yoyaku -p'OdObj*TEhdT104*e' doto_yoyaku > backups/phase2_before_$(date +%Y%m%d_%H%M%S).sql
```

### 5-3. SQL適用
```bash
mysql -udoto_yoyaku -p'OdObj*TEhdT104*e' doto_yoyaku < admins/sql/migrate_booking_code_phase2_stop_legacy_seq.sql
```

### 5-4. 適用後チェック
```sql
SELECT COUNT(*) AS null_booking_code_reservations
FROM reservations
WHERE booking_code IS NULL OR booking_code = '';

SELECT COUNT(*) AS null_booking_code_group_bookings
FROM group_bookings
WHERE booking_code IS NULL OR booking_code = '';

SELECT COUNT(*) AS nonnull_reservation_seq
FROM reservations
WHERE reservation_seq IS NOT NULL AND reservation_seq <> '';

SHOW TRIGGERS LIKE 'reservations';
```

## 6. 完了判定
- `reservations.booking_code` の未設定件数が `0`
- `group_bookings.booking_code` の未設定件数が `0`
- `reservations.reservation_seq` の非NULL件数が `0`
- `reservations` に `bi_reservations_stop_legacy_seq` / `bu_reservations_stop_legacy_seq` が存在

## 7. 今回の適用実績
- バックアップ:
  - `backups/phase2_before_20260216_095629.sql`
- SQL適用:
  - `admins/sql/migrate_booking_code_phase2_stop_legacy_seq.sql` 実行済み
- 適用後確認:
  - `null_booking_code_reservations = 0`
  - `null_booking_code_group_bookings = 0`
  - `nonnull_reservation_seq = 0`
