From 80714a5daab8154313b2cf4639ce5c16fbad847a Mon Sep 17 00:00:00 2001 From: David Gwilliam Date: Tue, 31 Mar 2026 21:49:26 -0700 Subject: [PATCH] refactor: move TODO.md to docs directory for better organization --- docs/TODO.md | 204 ++++++++++++++++++++++----------------------------- 1 file changed, 86 insertions(+), 118 deletions(-) diff --git a/docs/TODO.md b/docs/TODO.md index 7dc890b..b5529c0 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -1,134 +1,102 @@ -# EuchreCamp - Project Todo List +# EuchreCamp - Todo List -## Completed Features +## Current Tasks -### Backend -- [x] Database schema for matches, players, teams, events -- [x] Elo rating calculator and job -- [x] Partnership tracking and analytics -- [x] Tournament generator (round-robin, single elim, double elim, Swiss) -- [x] ROM relations and repositories -- [x] Acceptance test suite (8 tests passing) +### Completed ✅ +- [x] Add `site_admin` role to database schema and permissions system +- [x] Add `isCasual` boolean field to Match model (already existed) +- [x] Update match upload API to support casual matches +- [x] Update match upload UI to include casual checkbox +- [x] Add tournament deletion API endpoint with delete/orphan options +- [x] Add delete tournament button and modal to tournament detail page +- [x] Run tests and verify implementation (84 tests passing) +- [x] Fix session issues with tournament admin access +- [x] Fix Elo recalculation error for player merge (delete elo snapshots before deleting players) +- [x] Add admin player management page +- [x] Add player name editing functionality in admin UI +- [x] Add admin panel links to navigation header +- [x] Add tournament update API endpoint (PUT /api/tournaments/[id]) +- [x] Consolidate delete endpoint from admin API to main tournaments API +- [x] Update database schema to add variant scoring fields (targetScore, allowTies) +- [x] Fix tie handling logic in partnership stats (ties now correctly tracked) +- [x] Fix test files for normalizedName field in Player model +- [x] Fix auth.ts to include normalizedName in Player creation +- [x] Write TODO list to repository file +- [x] Auto-create tournament when uploading matches without selecting one -### Frontend -- [x] Basic player rankings page -- [x] Match entry form +### In Progress 🔄 +- [ ] Update API routes to handle new variant scoring fields +- [ ] Update EditTournamentForm to add variant scoring controls +- [ ] Update MatchEditor to use tournament-specific target score +- [ ] Run tests and verify variant scoring implementation -## In Progress - UI Development +### Recently Completed ✅ +- [x] Add OpenSkill rating system support (src/lib/openskill-utils.ts) +- [x] Add Glicko2 rating system support (src/lib/glicko2-utils.ts) +- [x] Reset database and run all migrations from scratch +- [x] Regenerate Prisma client with new rating models +- [x] Update match upload page to auto-create tournament if none selected +- [x] Update all admin scripts to use PrismaPg adapter and dotenv +- [x] Fix match diagram player positioning +- [x] Add CasaOS deployment configuration and documentation +- [x] Create migration to add rating system tables (elo_ratings, glicko2_ratings, open_skill_ratings) +- [x] Add tabbed rankings page to display Elo, OpenSkill, and Glicko2 ratings -### Completed -- [x] Navigation layout (Next.js components) -- [x] UI Design document (UI_DESIGN.md) -- [x] Player Profile page (Next.js) -- [x] Basic CSS styling (Tailwind CSS) -- [x] Player Schedule page (Next.js) -- [x] Route for player schedule +### Backlog 📋 +- [ ] Add UI controls for variant scoring in tournament creation/edit +- [ ] Test variant tournament functionality end-to-end +- [ ] Add validation for tie scores based on tournament configuration +- [ ] Document variant tournament features -### View Types to Implement -- [ ] Tournament Admin View (Phase 2-3) - - Create/manage tournaments - - Set up brackets and matchups - - Record match results - - View tournament standings +## Recently Completed (Detailed) -- [ ] Club Admin View (Superuser) (Phase 3-4) - - Manage all players - - View club-wide statistics - - Configure club settings - - Manage tournaments +### Variant Euchre Scoring Support +- Added `targetScore` and `allowTies` fields to Event model +- Created database migration for new fields +- Fixed partnership stats tie handling (ties now increment neither wins nor losses) +- Updated Elo calculation functions to handle ties correctly (0.5 points for draw) -- [ ] Player Profile View (Phase 1-2) - - Display player info and Elo rating - - Show partnership analytics - - Display match history - - Tournament participation - - Enhance existing template +### Tournament Deletion +- Consolidated delete endpoint to `/api/tournaments/[id]` +- Added options to delete matches or orphan them +- Updated DeleteTournamentButton to use consolidated endpoint -- [ ] Player Tournament Schedule View (Phase 4) - - Show upcoming matches - - Display tournament brackets - - Record personal match results +### Player Management +- Added admin players page at `/admin/players` +- Added player name editing functionality via PATCH endpoint +- Added player merge functionality with automatic Elo recalculation +- Fixed foreign key constraint issues with elo_snapshots -### UI Components Needed -- [x] Navigation system (role-based) - Started -- [ ] Dashboard layouts -- [ ] Forms for data entry -- [ ] Tables for displaying data -- [ ] Charts for statistics -- [ ] Bracket visualization +### Permissions +- Added `site_admin` role as highest privilege level +- Updated all permission functions to include site_admin support +- Fixed session cache issues by reading roles from database -### Implementation Phases -- [x] Phase 1: Navigation & Layout -- [x] Phase 2: Player Profile Enhancements -- [x] Phase 3: Tournament Admin View -- [x] Phase 4: Club Admin View -- [x] Phase 5: Player Schedule View -- [ ] Phase 6: Authentication & Authorization -- [x] Phase 7: Polish & Testing +## Notes +- All 84 unit tests passing +- Database migrations applied successfully +- TypeScript compilation has pre-existing errors unrelated to our changes -## Future Enhancements +### Completed After Commit 1729dac -### Features -- [ ] Real-time match updates (WebSockets) -- [ ] Mobile-responsive design improvements -- [ ] Email notifications -- [ ] Import/Export functionality -- [ ] API for third-party integrations -- [ ] Advanced analytics charts +#### Next.js 16 Breaking Change Fixes +- [x] Fixed `params.id` usage in all page components (must use `await params`) +- [x] Fixed `params.id` usage in all API routes (must use `await params`) +- [x] Updated client components to use `Promise<{ id: string }>` type +- [x] Added regression tests for Next.js 16 params Promise handling +- [x] Verified all 100 unit tests pass -### Technical -- [ ] Performance optimization -- [ ] Caching strategy -- [ ] Security hardening -- [ ] Deployment pipeline -- [ ] CI/CD setup +#### Files Updated: +- Player pages: `profile.tsx`, `schedule.tsx` +- Tournament pages: `page.tsx`, `results.tsx`, `edit.tsx`, `entry.tsx` +- API routes: `admin/players/[id]/route.ts`, `users/[id]/route.ts`, `users/[id]/role/route.ts` +- Tournament API routes: `[id]/route.ts`, `[id]/participants/route.ts`, `[id]/games/bulk/route.ts` -## AAA System (Authentication, Authorization, Accounting) - Next.js Implementation +#### Root Cause +Next.js 16 requires `params` to be awaited in both server components and API routes: +- Before: `const { id } = params` +- After: `const { id } = await params` -### Authentication (Better Auth + Prisma) -- [x] Set up Better Auth with Prisma -- [x] Create users table schema -- [x] Build login page (`/auth/login`) -- [x] Build registration page (`/auth/register`) -- [x] Implement session management with Better Auth -- [x] Add authentication middleware -- [ ] Password reset functionality -- [ ] Email confirmation system -- [ ] OAuth providers (optional) - -### Authorization (RBAC) -- [x] Define roles in Prisma schema (PLAYER, TOURNAMENT_ADMIN, CLUB_ADMIN) -- [x] Implement authorization helpers -- [x] Add authorization to admin dashboard -- [x] Add authorization to player management -- [x] Add authorization to tournament management -- [x] Add 5-minute match edit window (player role) -- [ ] Add role assignment UI for club admins -- [ ] Add permission checks to all API routes - -### Accounting (Activity Logging) -- [ ] Create activity logging system (Prisma model) -- [ ] Track authentication events -- [ ] Track tournament management events -- [ ] Track match recording events -- [ ] Build audit reports UI - -### Security -- [x] Rate limiting (Better Auth built-in) -- [ ] IP-based lockout -- [x] Secure cookie settings (Better Auth) -- [x] CSRF protection (Next.js built-in) -- [ ] Security headers -- [ ] Session fixation prevention - -## Known Issues -- [ ] Database IDs not resetting between tests (workaround: query by round_number) -- [ ] Need to clean up debug output from acceptance tests -- [ ] Password reset flow not yet implemented - -## Next Steps -1. Design UI mockups for each view type -2. Implement navigation system -3. Build out Tournament Admin view -4. Add role-based access control -5. Create reusable UI components +This was not caught by the unit test suite because: +- Unit tests test individual functions in isolation +- E2E tests (Playwright) would catch this but weren't run after the upgrade