From 3380122211a2e75c75b00e16ea2aced19294aec8 Mon Sep 17 00:00:00 2001 From: Rory Devitt Date: Fri, 12 Sep 2025 11:32:37 +0100 Subject: [PATCH 1/2] Refresh leaderboard in refresh endpoint if it is present --- sweepy/api.py | 3 +++ sweepy/generate_sweepstakes.py | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/sweepy/api.py b/sweepy/api.py index 8758f9d..7194ebd 100644 --- a/sweepy/api.py +++ b/sweepy/api.py @@ -237,6 +237,9 @@ def refresh_sweepstake( __bf_client, sweepstake, session ) + if updated_sweepstake.has_leaderboard: + generate_sweepstakes.refresh_sweepstake_leaderboard + session.refresh(updated_sweepstake) resp = generate_sweepstakes.convert_db_model_to_response(updated_sweepstake) diff --git a/sweepy/generate_sweepstakes.py b/sweepy/generate_sweepstakes.py index ee0dae6..410a11b 100644 --- a/sweepy/generate_sweepstakes.py +++ b/sweepy/generate_sweepstakes.py @@ -263,7 +263,7 @@ def refresh_sweepstake_leaderboard( client: LiveGolfClient, sweepstake_db: db_models.Sweepstakes, session: sqlmodel.Session, -): +) -> db_models.Sweepstakes: """ Refresh the sweepstakes leaderboard by re-fetching the market data and updating the participants. """ @@ -308,3 +308,5 @@ def refresh_sweepstake_leaderboard( session.commit() logging.info(f"Refreshed sweepstakes leaderboard for {sweepstake_db.id}") + + return sweepstake_db From 1b4d3615c30d8cc802767fe7a8434fd6ca86d7e1 Mon Sep 17 00:00:00 2001 From: Rory Devitt Date: Fri, 12 Sep 2025 12:02:07 +0100 Subject: [PATCH 2/2] Show loading component while data is being fetched from API --- sweepy-ui/src/App.jsx | 19 ++++++++++++++++--- sweepy-ui/src/components/LeaderboardTable.jsx | 2 -- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/sweepy-ui/src/App.jsx b/sweepy-ui/src/App.jsx index 1a25e95..11a6bd7 100644 --- a/sweepy-ui/src/App.jsx +++ b/sweepy-ui/src/App.jsx @@ -5,6 +5,7 @@ import SweepstakeDetail from "./components/SweepstakeDetail"; import ApiClient from "./Api"; const App = () => { + const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [displayHome, setDisplayHome] = useState(true); const [displayCreateForm, setDisplayCreateForm] = useState(false); @@ -39,8 +40,18 @@ const App = () => { }; useEffect(() => { - fetchEventTypes(); - fetchAllSweepstakes(); + setLoading(true); + Promise.all([apiClient.getEventTypes(), apiClient.getAllSweepstakes()]) + .then(([eventTypes, allSweepstakes]) => { + setEventTypes(eventTypes); + setAllSweepstakes(allSweepstakes); + }) + .catch((error) => { + setError("Failed to fetch initial data"); + }) + .finally(() => { + setLoading(false); + }); }, []); const handleCreateApiResponse = (responseData) => { @@ -113,7 +124,9 @@ const App = () => { const mainComponent = () => { let component; - if (displayHome) { + if (loading) { + component =

Loading...

; + } else if (displayHome) { component = ( stringifyScore(val), }; - console.log("Leaderboard data:", allAssignments); - return (