Add race and station management
Build & Deploy / build-and-deploy (push) Successful in 2m18s

- races table: name, date, description, is_active
- stations table: ordered checkpoints with GPS per race
- New /api/races and /api/races/{id}/stations endpoints
- Upload now requires race + station selection; uses station GPS
  so images without GPS EXIF are accepted
- passages filtered by active race throughout
- RacePage: create races, manage stations (add/edit/delete checkpoints)
- Navbar shows active race name
- Start and finish stations created automatically per race

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-21 09:44:45 +01:00
parent 3dcf979e6f
commit 5393e85a74
15 changed files with 841 additions and 139 deletions
+5 -2
View File
@@ -149,14 +149,17 @@ function ReviewCard({ passage, athletes, onResolved, onDeleted }) {
)
}
export default function ReviewPage() {
export default function ReviewPage({ activeRace }) {
const [queue, setQueue] = useState([])
const [athletes, setAthletes] = useState([])
const [loading, setLoading] = useState(true)
const load = async () => {
setLoading(true)
const [q, a] = await Promise.all([api.getReviewQueue(), api.getAthletes()])
const [q, a] = await Promise.all([
api.getReviewQueue(activeRace?.race_id),
api.getAthletes(),
])
setQueue(q)
setAthletes(a)
setLoading(false)