Skip to content

データ

関連: 全体構成 / アクセス制御

正本は D1 のマイグレーション(migrations/)である。 写真のバイト列は R2、メタデータ(キーと並び)は D1 である。

D1

データベース名は home-kitchen。バインディングは DB。

テーブル 中身
profiles メールが主キー。表示名、テーマ、アバターキー
coffee_recipes / cooking_recipes レシピ本体。creator_email は作成者
coffee_steps 注湯
cooking_ingredients / cooking_steps 材料と手順
coffee_images / cooking_images R2 キーと並び。先頭が表紙
favorites (email, kind, recipe_id)
recipe_edits 保存のたびに 1 行。summary は粗いラベル。レシピあたり新しい 50 件

初期マイグレーションがサンプル 2 件を入れる(標準の V60、ペペロンチーノ)。消してよい。

R2

バケット名は home-kitchen-images。バインディングは IMAGES。 キーは UUID に拡張子を付けたものである。 JPEG、PNG、WebP、GIF。上限 8MB。 レシピから外したキーは、保存時にバケットからも消す。

取得も /api/images 経由である。バケットを公開設定にはしない。

編集の競合

更新は WHERE id = ? AND updated_at = ? の CAS である。 0 行なら、残っていれば 409、無ければ 404 である。 実装は shared/write-conflict.ts。

編集履歴のラベル

保存の直前に、今の行と書き込み内容を比べる。 コーヒーは タイトル、写真、豆、入れ方、注湯、メモ、タグ、参考。 料理は タイトル、写真、分量、材料、手順、メモ、タグ、参考。 該当した名前を「・」でつなぐ。新規作成は「作成」。差分が無ければ「保存」。 比較は shared/edit-hint.ts。