fix: resolve specificStadium achievement ID mismatch
The Green Monster (Fenway) and Ivy League (Wrigley) achievements weren't working because: 1. Symbolic IDs use lowercase sport (stadium_mlb_bos) 2. Sport enum uses uppercase raw values (MLB) 3. Visits store stadium UUIDs, not symbolic IDs Added resolveSymbolicStadiumId() helper that: - Uppercases the sport string before Sport(rawValue:) - Looks up team by abbreviation and sport - Returns the team's stadiumId as UUID string Also fixed: - getStadiumIdsForLeague returns UUID strings (not symbolic IDs) - AchievementProgress.isEarned computed from progress OR stored record - getStadiumIdsForDivision queries CanonicalTeam properly Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
157
docs/PLAN-REMOVE-CBB.md
Normal file
157
docs/PLAN-REMOVE-CBB.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# Plan: Remove College Basketball (CBB) from iOS App
|
||||
|
||||
**Status**: Complete
|
||||
**Created**: 2026-01-11
|
||||
**Last Updated**: 2026-01-11
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
**Goal**: Permanently remove all traces of College Basketball (CBB) from the SportsTime iOS app.
|
||||
|
||||
**Reason**: Too many games (~5,000+ per season with ~360 Division I teams) creates complexity without sufficient user value.
|
||||
|
||||
**Scope**:
|
||||
- Remove CBB from Sport enum and all related properties
|
||||
- Remove CBB theme colors
|
||||
- Remove CBB from documentation
|
||||
- No backend/CloudKit changes required
|
||||
- No saved trip migration needed (no users have CBB trips)
|
||||
|
||||
---
|
||||
|
||||
## Pre-Implementation Checklist
|
||||
|
||||
- [ ] Confirm no active users have saved trips with CBB games
|
||||
- [ ] Verify CloudKit has no CBB data that needs cleanup
|
||||
|
||||
---
|
||||
|
||||
## Phase 1: Core Model Removal
|
||||
|
||||
**Status**: Not Started
|
||||
|
||||
Remove CBB from the Sport enum and its associated properties.
|
||||
|
||||
| Status | Task | File | Details |
|
||||
|--------|------|------|---------|
|
||||
| [ ] | 1.1 Remove `.cbb` enum case | `Core/Models/Domain/Sport.swift` | Line 17: `case cbb = "CBB"` |
|
||||
| [ ] | 1.2 Remove CBB displayName | `Core/Models/Domain/Sport.swift` | Line 30: `"College Basketball"` in displayName computed property |
|
||||
| [ ] | 1.3 Remove CBB iconName | `Core/Models/Domain/Sport.swift` | Line 43: `"basketball.fill"` in iconName computed property |
|
||||
| [ ] | 1.4 Remove CBB color | `Core/Models/Domain/Sport.swift` | Line 56: `.mint` in color computed property |
|
||||
| [ ] | 1.5 Remove CBB seasonMonths | `Core/Models/Domain/Sport.swift` | Line 70: `(11, 4)` in seasonMonths computed property |
|
||||
| [ ] | 1.6 Remove CBB from `Sport.supported` | `Core/Models/Domain/Sport.swift` | Line 90: Remove `.cbb` from supported array |
|
||||
|
||||
**Verification**: Build succeeds with no compiler errors about missing switch cases.
|
||||
|
||||
---
|
||||
|
||||
## Phase 2: Theme Cleanup
|
||||
|
||||
**Status**: Not Started
|
||||
|
||||
Remove CBB-specific theme colors and view modifier mappings.
|
||||
|
||||
| Status | Task | File | Details |
|
||||
|--------|------|------|---------|
|
||||
| [ ] | 2.1 Remove `cbbMint` color constant | `Core/Theme/Theme.swift` | Line 131: `static let cbbMint = Color(hex: "3EB489")` |
|
||||
| [ ] | 2.2 Remove CBB case from `themeColor` | `Core/Theme/ViewModifiers.swift` | Line 220: `case .cbb: return Theme.cbbMint` |
|
||||
|
||||
**Verification**: Build succeeds, no references to `Theme.cbbMint` remain.
|
||||
|
||||
---
|
||||
|
||||
## Phase 3: Documentation Updates
|
||||
|
||||
**Status**: Not Started
|
||||
|
||||
Update all documentation to reflect CBB removal.
|
||||
|
||||
| Status | Task | File | Details |
|
||||
|--------|------|------|---------|
|
||||
| [ ] | 3.1 Remove CBB from Supported Leagues table | `README.md` | Line 29: Remove CBB row from table |
|
||||
| [ ] | 3.2 Update league count in features | `README.md` | Line 7: Change "8 professional and college leagues" to reflect new count |
|
||||
| [ ] | 3.3 Remove CBB section from data scraping docs | `docs/DATA_SCRAPING.md` | Lines 114-125: Remove entire CBB section |
|
||||
| [ ] | 3.4 Update TO-DOS.md | `TO-DOS.md` | Remove or mark complete task #10 |
|
||||
|
||||
**Verification**: Documentation accurately reflects supported sports.
|
||||
|
||||
---
|
||||
|
||||
## Phase 4: Verification & Testing
|
||||
|
||||
**Status**: Not Started
|
||||
|
||||
Ensure the app builds, runs, and all tests pass.
|
||||
|
||||
| Status | Task | Command/Action | Expected Result |
|
||||
|--------|------|----------------|-----------------|
|
||||
| [ ] | 4.1 Full build | `xcodebuild ... build` | BUILD SUCCEEDED |
|
||||
| [ ] | 4.2 Run all tests | `xcodebuild ... test` | All tests pass |
|
||||
| [ ] | 4.3 Manual UI verification | Launch in Simulator | CBB does not appear in any sport picker, filter, or settings |
|
||||
| [ ] | 4.4 Verify Sport.supported count | Code inspection | Array has correct number of sports (7 remaining) |
|
||||
|
||||
**Build Command**:
|
||||
```bash
|
||||
xcodebuild -project SportsTime.xcodeproj -scheme SportsTime -destination 'platform=iOS Simulator,name=iPhone 17,OS=26.2' build
|
||||
```
|
||||
|
||||
**Test Command**:
|
||||
```bash
|
||||
xcodebuild -project SportsTime.xcodeproj -scheme SportsTime -destination 'platform=iOS Simulator,name=iPhone 17,OS=26.2' test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 5: Commit & Cleanup
|
||||
|
||||
**Status**: Not Started
|
||||
|
||||
| Status | Task | Details |
|
||||
|--------|------|---------|
|
||||
| [ ] | 5.1 Stage all changes | `git add -A` |
|
||||
| [ ] | 5.2 Create commit | Message: `chore: remove college basketball (CBB) from iOS app` |
|
||||
| [ ] | 5.3 Push to remote | If on feature branch |
|
||||
| [ ] | 5.4 Mark plan complete | Update this file's status to "Complete" |
|
||||
|
||||
---
|
||||
|
||||
## Files Changed Summary
|
||||
|
||||
| File | Change Type | Lines Affected |
|
||||
|------|-------------|----------------|
|
||||
| `Core/Models/Domain/Sport.swift` | Modify | Remove CBB from enum + 5 computed properties |
|
||||
| `Core/Theme/Theme.swift` | Modify | Remove 1 color constant |
|
||||
| `Core/Theme/ViewModifiers.swift` | Modify | Remove 1 switch case |
|
||||
| `README.md` | Modify | Update table + feature count |
|
||||
| `docs/DATA_SCRAPING.md` | Modify | Remove ~12 lines (CBB section) |
|
||||
| `TO-DOS.md` | Modify | Remove/update task #10 |
|
||||
|
||||
**Total**: 6 files
|
||||
|
||||
---
|
||||
|
||||
## Rollback Plan
|
||||
|
||||
If issues arise, CBB can be restored by:
|
||||
1. `git revert <commit-hash>` the removal commit
|
||||
2. No data migration needed (CBB had no data)
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- Views using `Sport.supported` will automatically exclude CBB once removed from the array
|
||||
- No CBB-specific views, view models, or tests exist
|
||||
- Python scraper already has no CBB implementation
|
||||
- No bundled JSON contains CBB data
|
||||
|
||||
---
|
||||
|
||||
## Progress Log
|
||||
|
||||
| Date | Phase | Notes |
|
||||
|------|-------|-------|
|
||||
| 2026-01-11 | Planning | Plan created |
|
||||
|
||||
Reference in New Issue
Block a user