From cd3c538eb7c26dd5bf527366d14de6f629079171 Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 11 May 2026 08:57:14 +0900 Subject: [PATCH] =?UTF-8?q?feat(lotto):=20useReview=20=ED=9B=85=20+=20useB?= =?UTF-8?q?riefing=204=EA=B3=84=EC=B8=B5=20=EC=A0=95=EA=B7=9C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/lotto/hooks/useBriefing.js | 16 ++++++++++++++-- src/pages/lotto/hooks/useReview.js | 23 +++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 src/pages/lotto/hooks/useReview.js diff --git a/src/pages/lotto/hooks/useBriefing.js b/src/pages/lotto/hooks/useBriefing.js index a405623..02394ed 100644 --- a/src/pages/lotto/hooks/useBriefing.js +++ b/src/pages/lotto/hooks/useBriefing.js @@ -1,6 +1,18 @@ import { useState, useEffect, useCallback, useRef } from 'react'; import { getLatestBriefing, triggerLottoCurate } from '../../../api'; +const normalizePicks = (picks) => { + if (Array.isArray(picks)) { + return { core: picks, bonus: [], extended: [], pool: [] }; + } + return { + core: picks?.core || [], + bonus: picks?.bonus || [], + extended: picks?.extended || [], + pool: picks?.pool || [], + }; +}; + export default function useBriefing() { const [briefing, setBriefing] = useState(null); const [loading, setLoading] = useState(true); @@ -12,7 +24,7 @@ export default function useBriefing() { setLoading(true); setError(''); try { const data = await getLatestBriefing(); - setBriefing(data); + setBriefing(data ? { ...data, picks: normalizePicks(data.picks) } : data); } catch (e) { setError(e.message); } finally { @@ -33,7 +45,7 @@ export default function useBriefing() { try { const data = await getLatestBriefing(); if (data && data.generated_at !== prevGen) { - setBriefing(data); + setBriefing({ ...data, picks: normalizePicks(data.picks) }); setRegenerating(false); clearInterval(pollingRef.current); } diff --git a/src/pages/lotto/hooks/useReview.js b/src/pages/lotto/hooks/useReview.js new file mode 100644 index 0000000..b7dac64 --- /dev/null +++ b/src/pages/lotto/hooks/useReview.js @@ -0,0 +1,23 @@ +import { useEffect, useState } from 'react'; +import { getLatestReview, getReviewHistory } from '../../../api'; + +export default function useReview() { + const [latest, setLatest] = useState(null); + const [history, setHistory] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + let cancel = false; + Promise.all([getLatestReview(), getReviewHistory(4)]) + .then(([l, h]) => { + if (cancel) return; + setLatest(l); + setHistory(h); + }) + .catch(() => {}) + .finally(() => !cancel && setLoading(false)); + return () => { cancel = true; }; + }, []); + + return { latest, history, loading }; +}