データ¶
正本は 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。