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_idRoutines テーブルを指す外部キーであり、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

まあ、正直このテーブルに関しては特に言うことない感じもするので、詳細の説明は省くこととする。

出来上がったテーブルスキーマは以下のようになった。

f:id:tac2nd:20191119233349p:plain


はあ…。とりあえずテーブルスキーマの設計だけは終わらせることができた。 もうすでにプライムリッチを1L近く飲んでしまっているため意識は極めてボンヤリしている状態である。 でもまだやれる! やれるのだ! 次はAPIの設計を軽くしていくこととする。


正直今回のテーブルのスキーマは滅茶苦茶シンプルなので、APIも滅茶苦茶シンプルになると思われる。 しかしもうすでに脳が酒に侵されて頭が全然回ってないのでざーっくりとした草案だけ書き残しておくこととする。

  • ユーザの登録やユーザ情報の取得は /users/users/{userId} エンドポイントを利用する。
  • ユーザのルーティンワークは /users/{userId}/routines エンドポイントを利用する。
  • ルーティンワーク自体を扱うためのエンドポイントとして /routines を生やす。

ダメだ…。 眠みがマックスになってしまった…。 今日はこのくらいにして明日続きを書くこととする。

では、おやすみなさい。