felt/.planning/phases/01-tournament-engine/01-05-SUMMARY.md
Mikkel Georgsen 1978d3d421 docs(01-05): complete Blind Structure + Chip Sets + Templates plan
- SUMMARY.md with self-check passed
- STATE.md updated: plan 6 of 14, 36% progress, 4 decisions added
- ROADMAP.md updated: 5/14 plans complete
- REQUIREMENTS.md: 15 requirements marked complete (BLIND-01-06, CHIP-01-04, FIN-01,02,05,06,10)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 04:02:11 +01:00

140 lines
6.6 KiB
Markdown

---
phase: 01-tournament-engine
plan: 05
subsystem: api, database, template
tags: [go, crud, blind-structure, chip-set, payout, buyin, wizard, tournament-template, chi, libsql]
# Dependency graph
requires:
- phase: 01-tournament-engine (Plan A)
provides: Project scaffold, chi router, middleware, store layer
- phase: 01-tournament-engine (Plan B)
provides: Database schema with all building block tables
provides:
- ChipSet CRUD service with denomination management
- BlindStructure CRUD service with level validation
- PayoutStructure CRUD service with bracket/tier nesting and 100% sum validation
- BuyinConfig CRUD service with rake split validation
- TournamentTemplate CRUD service with FK validation and expanded view
- Structure wizard algorithm (geometric progression, denomination snapping, break insertion)
- 4 built-in blind structures (Turbo, Standard, Deep Stack, WSOP-style)
- Built-in payout structure with 4 entry-count brackets
- 4 built-in buy-in configs with rake splits
- 4 built-in tournament templates composing all above
- Full REST API for all building blocks and templates
affects: [tournament-lifecycle, frontend-templates, clock-engine]
# Tech tracking
tech-stack:
added: []
patterns:
- Service-per-entity CRUD pattern with *sql.DB injection
- Transaction-based create/update with nested entity replacement
- FK reference validation before template creation
- Expanded view pattern (GetTemplate vs GetTemplateExpanded)
- Seed migration with INSERT OR IGNORE for idempotent built-in data
key-files:
created:
- internal/template/chipset.go
- internal/template/payout.go
- internal/template/buyin.go
- internal/template/tournament.go
- internal/blind/structure.go
- internal/blind/wizard.go
- internal/blind/templates.go
- internal/server/routes/templates.go
- internal/store/migrations/005_builtin_templates.sql
- internal/blind/wizard_test.go
- internal/template/tournament_test.go
modified:
- internal/server/server.go
key-decisions:
- "Seed data uses INSERT OR IGNORE with explicit IDs for idempotent re-runs"
- "Wizard generates preview-only levels (not auto-saved) for TD review"
- "BB ante used in WSOP-style template (separate from standard ante field)"
- "Payout brackets must be contiguous ranges (no gaps between min/max entries)"
patterns-established:
- "Service CRUD pattern: NewXService(db) with Create/Get/List/Update/Delete/Duplicate"
- "Nested entity pattern: replace-all on update (delete children, re-insert)"
- "Route registration: Register(chi.Router) method for modular route mounting"
requirements-completed: [BLIND-01, BLIND-02, BLIND-03, BLIND-04, BLIND-05, BLIND-06, CHIP-01, CHIP-02, CHIP-03, CHIP-04, FIN-01, FIN-02, FIN-05, FIN-06, FIN-10]
# Metrics
duration: 10min
completed: 2026-03-01
---
# Plan 05: Blind Structure + Chip Sets + Templates Summary
**Full CRUD for all building blocks (chip sets, blind structures, payouts, buy-ins) with 4 built-in tournament templates, structure wizard algorithm, and REST API endpoints**
## Performance
- **Duration:** 10 min
- **Started:** 2026-03-01T02:48:52Z
- **Completed:** 2026-03-01T02:58:52Z
- **Tasks:** 2
- **Files modified:** 12
## Accomplishments
- Complete CRUD services for all 5 building block types with validation, duplication, and builtin protection
- Structure wizard generates blind structures from high-level inputs (player count, chips, duration, denominations) using geometric progression with denomination snapping
- 4 built-in tournament templates (Turbo, Standard, Deep Stack, WSOP-style) with matching blind structures, buy-in configs, and shared payout structure
- Full REST API with admin-gated mutations and floor-accessible reads
- Comprehensive test suites for wizard (6 tests) and templates (7 tests), all passing
## Task Commits
Each task was committed atomically:
1. **Task E1: Building block CRUD and API routes** - `99545bd` (feat)
2. **Task E2: Built-in templates, seed data, wizard tests, template tests** - `7dbb4ca` (feat)
## Files Created/Modified
- `internal/template/chipset.go` - ChipSet CRUD service with denomination management
- `internal/template/payout.go` - PayoutStructure CRUD with bracket/tier nesting and 100% sum validation
- `internal/template/buyin.go` - BuyinConfig CRUD with rake split validation
- `internal/template/tournament.go` - TournamentTemplate CRUD with FK validation, expanded view, SaveAsTemplate
- `internal/blind/structure.go` - BlindStructure CRUD with level validation (contiguous positions, SB < BB)
- `internal/blind/wizard.go` - Structure wizard: geometric progression, denomination snapping, break insertion, chip-up markers
- `internal/blind/templates.go` - Built-in level definitions (Turbo, Standard, Deep Stack, WSOP-style)
- `internal/server/routes/templates.go` - REST API handlers for all building blocks and templates
- `internal/store/migrations/005_builtin_templates.sql` - Seed data for 4 blind structures, 1 payout structure, 4 buy-in configs, 4 tournament templates
- `internal/blind/wizard_test.go` - Wizard tests: standard, player counts, denomination alignment, short/long, invalid inputs
- `internal/template/tournament_test.go` - Template tests: create, invalid FK, expanded, save-as, duplicate, delete-builtin, list
- `internal/server/server.go` - Wired template routes into protected API group
## Decisions Made
- Seed data uses INSERT OR IGNORE with explicit integer IDs for idempotent migration re-runs
- Wizard generates preview-only levels (not auto-saved) so the TD can review and adjust before saving
- WSOP-style blind structure uses BB ante (separate field from standard ante) starting at level 4
- Payout bracket validation enforces contiguous entry count ranges with no gaps
- All built-in entities use is_builtin=1 flag -- cannot be deleted but can be duplicated
## Deviations from Plan
None - plan executed exactly as written.
## Issues Encountered
- Pre-existing test failure in `cmd/leaf/main_test.go` (missing `clockRegistry` parameter from Plan D) -- out of scope, not caused by this plan
## User Setup Required
None - no external service configuration required.
## Next Phase Readiness
- All building blocks have full CRUD with API endpoints -- ready for frontend template management UI
- Tournament templates compose building blocks by reference -- ready for tournament creation flow
- Structure wizard is functional -- ready for frontend wizard UI
- Built-in templates exist on first boot -- ready for template-first tournament creation
## Self-Check: PASSED
All 11 created files verified on disk. Both task commits (99545bd, 7dbb4ca) found in git log.
---
*Phase: 01-tournament-engine*
*Completed: 2026-03-01*