prompt_requirements.txt
レストラン予約Webアプリを作成してください。
必須機能:
- 初期表示で予約作成フォームと予約一覧を表示する。
- 顧客名、電話番号、メールアドレス、日付(YYYY-MM-DD)、時刻(HH:mm)、人数、席種、利用目的、要望を入力できる。
- 予約作成後、成功メッセージを表示する。
- 予約一覧に、少なくとも顧客名、電話番号、メールアドレス、日付、時刻、人数、席種、利用目的、要望を表示する。
- 不正入力では予約を作らず、エラーメッセージを表示する。
- 任意の永続化方式で予約データを保存し、リロード後も予約一覧を復元する。
- 予約可能時間は17:00から22:00開始までとし、30分単位の時刻だけ受け付ける。
- 毎週火曜日は定休日として予約を受け付けない。タイムゾーンはAsia/Tokyoとして扱う。
- 人数は1以上8以下の整数だけ受け付ける。
- 電話番号は数字、ハイフン、プラス記号を使った7文字以上の値だけ受け付ける。
- メールアドレスは一般的な email 形式だけ受け付ける。
- 席種は「テーブル」「カウンター」「個室」「テラス」のいずれかを受け付ける。
- 同じ日付、同じ時刻、同じ席種の予約人数合計は8人までとし、超える予約は満席エラーとして作成しない。
永続化要件:
- データベース、ファイル、KVSなど任意の方式で予約データを永続化してよい。
- ブラウザリロード後も、永続化した予約データから予約一覧を復元する。
- 予約作成に成功した予約だけを永続化する。
- 予約作成に失敗した不正入力や満席エラーの予約は永続化しない。
- 永続化内容をJSONで返す `GET /api/ranked-aa/persistence-dump` APIを提供する。
- `GET /api/ranked-aa/persistence-dump` はHTTP 200で `application/json` のレスポンスを返す。
- レスポンスJSONは `reservations` 配列を持つオブジェクトとし、各要素に少なくとも次のフィールドを含める。
- `customerName`: 顧客名
- `phone`: 電話番号
- `email`: メールアドレス
- `date`: 日付(`YYYY-MM-DD`)
- `time`: 時刻(`HH:mm`)
- `partySize`: 人数
- `seatingArea`: 席種
- `occasion`: 利用目的
- `specialRequests`: 要望
- Playwrightテストは各テストケースの最後にこのAPIを呼び出し、成功予約が含まれ、拒否した予約が含まれないことを検証する。
Playwrightテストは次のDOM IDだけを使います。
- 顧客名入力: id="ranked-aa-customer-name"
- 電話番号入力: id="ranked-aa-phone"
- メールアドレス入力: id="ranked-aa-email"
- 日付入力: id="ranked-aa-date"
- 時刻入力: id="ranked-aa-time"
- 人数入力: id="ranked-aa-party-size"
- 席種入力: id="ranked-aa-seating-area"
- 利用目的入力: id="ranked-aa-occasion"
- 要望入力: id="ranked-aa-special-requests"
- 予約作成ボタン: id="ranked-aa-submit-reservation"
- 成功メッセージ: id="ranked-aa-success-message"
- エラーメッセージ: id="ranked-aa-error-message"
- 予約一覧: id="ranked-aa-reservation-list"
成功メッセージには「予約」と「成功」を含めてください。不正入力時のエラーメッセージには「エラー」を含めてください。満席時のエラーメッセージにも「エラー」を含めてください。