概要
いつお客様が来たのか、いつ呼び出されたのかを記録します。キャンセルもできます。
待ち人数はcounter_historiesの指定したcounter_idのうち、checked_out_at、canceled_atが入っているものを除く件数となります。(以下SQLを参考)
SELECT COUNT(*) FROM counter_histories WHERE checked_out_at IS NULL OR canceled_at IS NULL;
SQLログイン機能や課金機能、ユーザー登録機能などは、本記事とは切り離して考えられるので、ここには含みません。(別記事にする予定です)
そのため、エンドユーザーへの順番伝達はエンドユーザー自身に覚えてもらう必要があります。
代替案としては番号札を渡す、その場でQRコードなどを読み込んでもらうなどがあります。
これくらいの機能があれば、サービスとして最低限運用できるのではないでしょうか。
設計詳細
ER図
erDiagram
shop ||--o{ counters : hasMany
counters ||--o{ counter_histories : hasMany
shop {
int id
varchar email
varchar name
}
counters {
int id
int shop_id
varchar name
}
counter_histories {
int id
int counter_id
varchar name
datetime checked_in_at
datetime checked_out_at
datetime canceled_at
}
テーブル
shops: 店舗
物理名 | 論理名 | 型 | Null | 備考 |
---|---|---|---|---|
id | ID | int | primary | |
メールアドレス | varchar(255) | unique | ||
name | 店舗名 | varchar(255) |
counters: カウンター
nameには日付を入れたり任意の名称を入れる想定です。
物理名 | 論理名 | 型 | Null | 備考 |
---|---|---|---|---|
id | ID | int | primary | |
shop_id | 店舗ID | int | ||
name | カウンター名 | varchar(255) |
counter_histories: カウンター履歴
nameは待っている人の名前や、診察券番号など、公開している行列に表示されるものを想定。
checked_out_atは呼び出された際に日時を入れます。言葉的にこれで良いのかはちょっと分からなかったので、適切なカラム名がわかる方は指摘して頂けると助かります。
物理名 | 論理名 | 型 | Null | 備考 |
---|---|---|---|---|
id | ID | int | primary | |
counter_id | カウンターID | int | ||
name | 待っている人の名前 | varchar(255) | YES | |
checked_in_at | 並び始めた日時 | datetime | ||
checked_out_at | 呼び出された日時 | datetime | YES | |
canceled_at | キャンセルした日時 | datetime | YES |
その他
他にも入れたい機能とかを書き留めておきます。
- 順番になっても来なくて後回しにするフラグ
- 順番を前後することが可能(カウンター席が空いたので1名様を優先的に案内など)
- お客様のメールアドレス
- 呼び出しを行ったかどうかフラグ
- 事前呼び出し設定(自分の順番があと5人未満になった時とかに呼び出す)
コメント