o2o-triple-pick/backend/app/services
hbyang deb1332440 Load all 12 groups' schedule (72 matches) + Naver-style schedule UI
Backend
- teams_data.py: 48-team data (ko/short/en), TLA→FIFA code remap
- config: schedule_all_groups, featured_group("A") — only featured group is votable/AI-predicted
- schedule_fetch: fetch all GROUP_STAGE matches from football-data, KST serialize
- schedule_sync: ingest all groups, unordered-pair match to avoid Group A dup, derive votable from group
- worker: AI generation limited to featured group; settle still covers all
- domain/predictions: is_votable() + MatchOut.votable; reject non-votable submits with 403 MATCH_NOT_VOTABLE

Frontend
- types: Match.votable
- ScheduleBoard: Naver-style date/group tabs + chips; votable(A) cards link to detail with AI split + 참여수, others display-only

Verified: 72 matches (12×6), Group A not duplicated, votable A=6/others=66; A submit 200, B submit 403

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 14:56:24 +09:00
..
__init__.py Refactor: Next.js+Firebase → React(Vite) + FastAPI + PostgreSQL 2026-06-10 13:04:35 +09:00
ai.py fix(ai): 월드컵 중립 경기장 명시 — 잘못된 '홈 이점' 예측 근거 수정 2026-06-11 11:50:36 +09:00
email.py mail config 적용 . 2026-06-11 09:21:10 +09:00
grading.py 포인트 시스템 추가, 프론트 국기 반영 2026-06-10 15:11:56 +09:00
points.py 포인트 시스템 추가, 프론트 국기 반영 2026-06-10 15:11:56 +09:00
schedule_fetch.py Load all 12 groups' schedule (72 matches) + Naver-style schedule UI 2026-06-12 14:56:24 +09:00
schedule_sync.py Load all 12 groups' schedule (72 matches) + Naver-style schedule UI 2026-06-12 14:56:24 +09:00