2019/11/19
また今日も帰ってくることが出来た。 今は茄子の生姜醤油炒めと、大根ステーキをつまみながらプライムリッチをカッ食らっているところである。 やはり茄子は美味い。 特にアブラがギットギトに染みた茄子は、これさえあれば死ぬまで無限にビールが飲めるんじゃないかと思うくらいに美味い。
よし、今日も作業を始めていく。
と、思ったのだが少し待ってほしい。 豚の切り落としの唐揚げでプライムリッチをゴックゴクと流し込みたい欲がマックスに高まってしまっている。 ちょっと先に作ってきます…。
作ってきたので始める。
昨日は Users
テーブルと Routines
テーブルの設計をした。
今日はまずルーティンワークの履歴を管理するためのテーブル RoutineHistories
から始める。
CREATE TABLE IF NOT EXISTS `routine_histories` ( `routine_id` CHAR(36) NOT NULL, `created_at` DATETIME(6) NOT NULL, `event` VARCHAR(16) NOT NULL, PRIMARY KEY (`routine_id`, `created_at`), CONSTRAINT `routine_id` FOREIGN KEY () REFERENCES `routines` () ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB
言わずもがな routine_id
は Routines
テーブルを指す外部キーであり、created_at
はその履歴が発生した時間をミリ秒単位で保存するフィールドである。
そしてこれら二つを主キーとして設定している。
DATETIME
で細かく設定する方法に関しては、こちら(https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-type-overview.html)を参考にすると良い。
また、event
フィールドにはそのルーティンワークに対して行われたイベントが文字列として保存される。
ENUM
を型に使うことも考えたが、どういうイベントが必要かも全然定まってないし、正直そこまで厳密に縛る必要性もあまり感じられないため通常の文字列として保存することにした。
最後に、一日の感想を軽く残すための Diaries
テーブルの仕様を決める。
CREATE TABLE IF NOT EXISTS `diaries` ( `id` CHAR(36) NOT NULL, `user_id` CHAR(36) NOT NULL, `datetime` DATETIME NOT NULL, `content` TEXT NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, PRIMARY KEY (`id`), CONSTRAINT `user_id` FOREIGN KEY () REFERENCES `users` () ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB
まあ、正直このテーブルに関しては特に言うことない感じもするので、詳細の説明は省くこととする。
出来上がったテーブルスキーマは以下のようになった。
はあ…。とりあえずテーブルスキーマの設計だけは終わらせることができた。 もうすでにプライムリッチを1L近く飲んでしまっているため意識は極めてボンヤリしている状態である。 でもまだやれる! やれるのだ! 次はAPIの設計を軽くしていくこととする。
正直今回のテーブルのスキーマは滅茶苦茶シンプルなので、APIも滅茶苦茶シンプルになると思われる。 しかしもうすでに脳が酒に侵されて頭が全然回ってないのでざーっくりとした草案だけ書き残しておくこととする。
- ユーザの登録やユーザ情報の取得は
/users
と/users/{userId}
エンドポイントを利用する。 - ユーザのルーティンワークは
/users/{userId}/routines
エンドポイントを利用する。 - ルーティンワーク自体を扱うためのエンドポイントとして
/routines
を生やす。
ダメだ…。 眠みがマックスになってしまった…。 今日はこのくらいにして明日続きを書くこととする。
では、おやすみなさい。