# EuchreCamp - Todo List ## Current Tasks ### 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 ### 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 ### 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 ### 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 ## Recently Completed (Detailed) ### 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) ### Tournament Deletion - Consolidated delete endpoint to `/api/tournaments/[id]` - Added options to delete matches or orphan them - Updated DeleteTournamentButton to use consolidated endpoint ### 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 ### 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 ## Notes - All 84 unit tests passing - Database migrations applied successfully - TypeScript compilation has pre-existing errors unrelated to our changes ### Completed After Commit 1729dac #### 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 #### 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` #### 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` 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