diff --git a/docs/backend.md b/docs/backend.md index ae211dc..56dcf13 100644 --- a/docs/backend.md +++ b/docs/backend.md @@ -444,6 +444,27 @@ Node版との差分(意図的な改善): 「引く」ボタン押下時に peek 無しで実際に抽選する。おみくじには参拝のようなポイント等の ゲーム報酬は無く、フレーバー(占い)のみ。 +### 引けるかどうかを開く前に伝える + +引けるかどうかは**前回いつ引いたか**だけで決まり、それは前回引いた瞬間に確定して +いる。にもかかわらずどこにも覚えていなかったため、「おみくじ」を開くたびに +トークン取得 + `omikujiGo`(peek) の往復(関数がコールドなら数秒)を待たされ、 +そのあとで初めて「まだ引けない」と分かっていた。 + +- `web/utils/omikujiCooldown.js` が**次に引ける時刻と前回の結果**を localStorage に + 持つ(キーに `github_id` を含め、アカウント切替で前の人のものを見せない)。 + 純関数で `storage` を注入でき、`web/scripts/test-omikuji-cooldown.js` で検証する。 +- **トップページ**: クールダウン中は「次のおみくじまで ◯時間◯分」を出し、 + ボタンを「前回のおみくじ」に変える。引ければ「おみくじを引く」に戻る。 + ここでは**サーバーに問い合わせない**(前回いつ引いたかだけで決まるため)。 +- **おみくじページ**: マウント時に保存した状態を読み、**通信を待たずに** + 前回の結果とカウントダウンを出す。peek の応答が来たら上書きする(正はサーバー)。 + クールダウンが明けていて前回の結果だけある場合は、結果を添えてボタンを出す。 +- **ヘッダ**: 同じく引けないときは「前回のおみくじ」表記。 +- あくまで表示を先出しするだけで、**実際に引けるかは常にサーバーが決める** + (端末の時計は書き換えられる)。残り時間は8時間(最長のクールダウン)で頭打ち。 + 別端末では保存が無いので、従来どおり peek の応答から復元される。 + ### フロント - `web/pages/omikuji.vue`(状態管理・API呼び出し)と `web/components/OmikujiResult.vue` diff --git a/web/components/CommonHeader.vue b/web/components/CommonHeader.vue index 2734b76..767c4df 100644 --- a/web/components/CommonHeader.vue +++ b/web/components/CommonHeader.vue @@ -38,7 +38,9 @@