今回は美容院の予約システムに使うDBをFireStoreで作るには? と考えてみました。
今まで試したことがなかった機能を試行錯誤できそうです。
ドキュメントは、営業時間内に対応できる客には限りがあるので、「予約可能時間とクライアントごとの予約の配列」情報を持つことにします。なのでドキュメント用のインターフェースは2種類ですね。
ドキュメント StaffReserve
ID: 日付+スタッフNo 例 20220822-01
データ部分の型 StaffReserve
interface StaffReserve {
ymd: string, (YYYYMMDD)
staffNo:number, (1〜99)
reservableTime: number, (分単位、予約枠の確認用、予約の都度計算して更新)
reserveArray: Reserve[] (顧客予約配列要素)
}
予約配列要素の型 Reserve
interface Reserve {
clientName:string,
menu: string,
startTime:string, (hh:mm)
endTime:string (hh:mm)
}
FireStoreのドキュメントは予約が入るたびに更新されたり、新しいレコードが作られたりします。予約がキャンセルされたらドキュメントの中の配列が削除されます。
データを入力する際は、時間枠の計算が生じるし、データを取り出す際には、yyyymmddの日付を日付型に変換が必要だったりする。この部分をConvertする機能をFirestoreのDataConverterで書けないかな?
FireStoreの練習用として実用的な良いサンプルではという気がしてます。ポイントは以下の3点
- DataConverterでスッキリ書ける? 日付の計算処理
- 予約配列データの追加削除はarrayUnionやarrayRemove処理
- データの追加・削除・更新を行うフレーズ
実際に作ったらまた記事にしようと思ってます。
以前、美容院の予約システムは、Vue2+AWSのLambda、DynamoDBで実装しましたが、LambaはPythonで実装したりして、予想外に複雑な作りになってしまいました。Nextjs+FireStoreでもっとスッキリ実装できるならそっちのほうがいいんですよね。