brackt/app/models
Chris Parsons 9ae00a8385
Add Zod validation and expand export/import for EV and results data (#14)
* Include participant EV/futures data in data sync export/import

The export now includes the full participantExpectedValues records
(placement probabilities, source, sourceOdds) alongside participants.
On import, EV records are upserted in merge mode and created fresh in
replace mode (cascade handles cleanup). Backward-compatible with older
exports that lack the participantExpectedValues field.

https://claude.ai/code/session_01TVzuuDR7jPtmihaXTrsX7B

* Address all data-sync code review findings

- Wrap importSportsDataFromJSON in a db.transaction() so any mid-import
  failure rolls back cleanly instead of leaving partial data
- Add zod validation of imported JSON before any DB writes, giving a
  clear error on malformed/incompatible files
- Fix N+1 queries: build participantIdMap during participant import so
  the EV and results sections resolve IDs from memory, not extra queries
- Fix merge mode silently skipping existing participants — now updates
  shortName, externalId, and expectedValue
- Add participantResults to export/import (was deleted in replace mode
  but never exported, so results were permanently lost)
- Restore calculatedAt timestamp on EV import instead of defaulting to
  now(); stored as ISO string in the export for portability
- Document that onDelete:cascade covers participantExpectedValues and
  participantResults when participants is deleted; remove the now-
  redundant explicit participantResults delete from replace mode
- Bump export version to 1.1; old v1.0 files still import cleanly since
  participantExpectedValues, participantResults, and calculatedAt are
  all optional in the zod schema
- Collapse all six DB fetches in exportSportsDataToJSON into one
  Promise.all for parallel execution
- Add countAllParticipants() and countAllParticipantEVs() model funcs
- Show Participants and EV Records counts on the dashboard stat cards
- Replace raw DOM form creation/submit in handleImport with useFetcher,
  giving proper loading state, no full-page reload, and type-safe data
- Remove dead export intent handler from the action function

https://claude.ai/code/session_01TVzuuDR7jPtmihaXTrsX7B

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-20 20:25:25 -08:00
..
__tests__ feat: implement Expected Value System with ICM probability calculator 2025-11-17 22:19:46 -08:00
commissioner.ts Add implementation plan for commissioner-without-team feature (#6) 2026-02-20 08:45:09 -08:00
draft-pick.ts fix: Pass database instance to isParticipantDrafted in timer context 2025-10-28 23:40:29 -07:00
draft-queue.ts feat: Refactor database connection handling in draft-related functions for improved flexibility 2025-10-26 20:35:55 -07:00
draft-slot.ts feat: add draft order management with UI for manual and random ordering 2025-10-15 08:58:35 -07:00
draft-timer.ts feat: add draft pick, queue, and timer models with database schema updates 2025-10-16 00:32:48 -07:00
draft-utils.ts Change participant expectedValue from integer to decimal (#1) 2026-02-19 11:26:40 -08:00
event-result.ts feat: Add scoring event and results management with comprehensive scoring rules and standings tracking 2025-10-28 23:50:50 -07:00
index.ts feat: add draft pick, queue, and timer models with database schema updates 2025-10-16 00:32:48 -07:00
league.ts Include commissioner leagues in user's active leagues (#8) 2026-02-20 10:28:37 -08:00
participant-expected-value.ts Add Zod validation and expand export/import for EV and results data (#14) 2026-02-20 20:25:25 -08:00
participant-result.ts feat: Implement bracket expansion plan to support various tournament structures 2025-11-03 09:36:16 -08:00
participant-season-result.ts feat: Implement season standings processing and participant result management for final standings events 2025-11-08 22:35:07 -08:00
participant.ts Add Zod validation and expand export/import for EV and results data (#14) 2026-02-20 20:25:25 -08:00
playoff-match.ts feat: add FIFA World Cup 48-team bracket template with group stage and projected scoring 2026-02-14 22:30:12 -08:00
qualifying-points.ts feat: Implement Qualifying Points Standings component and related logic 2025-11-11 10:08:25 -08:00
scoring-calculator.ts feat: add FIFA World Cup 48-team bracket template with group stage and projected scoring 2026-02-14 22:30:12 -08:00
scoring-event.ts Refactor code structure for improved readability and maintainability 2025-11-03 13:16:37 -08:00
scoring-rules.ts feat: Add scoring rules editor to league settings and creation pages 2025-10-29 00:04:27 -07:00
season-sport.ts feat: Refactor database connection handling in draft-related functions for improved flexibility 2025-10-26 20:35:55 -07:00
season-template-sport.ts refactor: remove isRequired field from season sports and templates 2025-10-13 15:00:59 -07:00
season-template.ts feat: add sports and participant models with admin user functionality 2025-10-12 21:16:00 -07:00
season.ts feat: add recharts library and implement PointProgressionChart component for historical views 2025-11-14 21:18:34 -08:00
sport.ts feat: add icon support for sports with file upload and active seasons display 2025-10-13 10:30:47 -07:00
sports-season.ts feat: add bulk participant creation and expected value field 2025-10-15 21:21:33 -07:00
standings.ts feat: add FIFA World Cup 48-team bracket template with group stage and projected scoring 2026-02-14 22:30:12 -08:00
team.ts feat: add fantasy league schema and new league routes 2025-10-11 00:07:39 -07:00
tournament-group.ts feat: add FIFA World Cup 48-team bracket template with group stage and projected scoring 2026-02-14 22:30:12 -08:00
user.ts feat: add team ownership management UI with admin controls 2025-10-21 22:15:15 -07:00