harden media
This commit is contained in:
89
test_fix_verification.md
Normal file
89
test_fix_verification.md
Normal file
@@ -0,0 +1,89 @@
|
||||
# Fix Verification for Team Logo Issue
|
||||
|
||||
## Problem Summary
|
||||
- **Issue**: Teams with stale `logoRef` values (`system-default/logo`) persist across force reseeds
|
||||
- **Root Cause**: `clearExistingRacingData()` didn't clear `racing_teams` table
|
||||
- **Impact**: API returns `/media/default/logo.png` instead of `/media/teams/{id}/logo`
|
||||
|
||||
## Fix Applied
|
||||
Updated `adapters/bootstrap/SeedRacingData.ts` `clearExistingRacingData()` method to:
|
||||
|
||||
1. **Clear team join requests** - Before deleting teams
|
||||
2. **Clear team memberships** - Before deleting teams
|
||||
3. **Clear teams** - The critical fix (teams have stale logoRef)
|
||||
4. **Clear related racing data** - Results, standings, races, etc.
|
||||
|
||||
## Key Changes
|
||||
```typescript
|
||||
// Before (incomplete):
|
||||
private async clearExistingRacingData(): Promise<void> {
|
||||
// Only cleared drivers and leagues
|
||||
// Missing: teams, team_memberships, team_join_requests
|
||||
}
|
||||
|
||||
// After (complete):
|
||||
private async clearExistingRacingData(): Promise<void> {
|
||||
// Clear stats
|
||||
await this.seedDeps.driverStatsRepository.clear();
|
||||
await this.seedDeps.teamStatsRepository.clear();
|
||||
|
||||
// Clear race registrations
|
||||
const races = await this.seedDeps.raceRepository.findAll();
|
||||
for (const race of races) {
|
||||
await this.seedDeps.raceRegistrationRepository.clearRaceRegistrations(race.id.toString());
|
||||
}
|
||||
|
||||
// Clear team join requests
|
||||
const teams = await this.seedDeps.teamRepository.findAll();
|
||||
for (const team of teams) {
|
||||
const joinRequests = await this.seedDeps.teamMembershipRepository.getJoinRequests(team.id.toString());
|
||||
for (const request of joinRequests) {
|
||||
await this.seedDeps.teamMembershipRepository.removeJoinRequest(request.id);
|
||||
}
|
||||
}
|
||||
|
||||
// Clear team memberships
|
||||
for (const team of teams) {
|
||||
const memberships = await this.seedDeps.teamMembershipRepository.getTeamMembers(team.id.toString());
|
||||
for (const membership of memberships) {
|
||||
await this.seedDeps.teamMembershipRepository.removeMembership(team.id.toString(), membership.driverId.toString());
|
||||
}
|
||||
}
|
||||
|
||||
// Clear teams (CRITICAL FIX)
|
||||
for (const team of teams) {
|
||||
await this.seedDeps.teamRepository.delete(team.id.toString());
|
||||
}
|
||||
|
||||
// Clear other racing data...
|
||||
// Results, standings, races, league memberships, etc.
|
||||
}
|
||||
```
|
||||
|
||||
## Expected Behavior After Fix
|
||||
|
||||
### Before Fix:
|
||||
1. Start dev with `GRIDPILOT_API_FORCE_RESEED=1`
|
||||
2. Teams from previous seed remain with `logoRef: {"type":"system-default","variant":"logo"}`
|
||||
3. `GET /teams/all` returns `"logoUrl": "/media/default/logo.png"`
|
||||
|
||||
### After Fix:
|
||||
1. Start dev with `GRIDPILOT_API_FORCE_RESEED=1`
|
||||
2. All racing data cleared including teams
|
||||
3. New teams seeded with `logoRef: MediaReference.generated('team', teamId)`
|
||||
4. `GET /teams/all` returns `"logoUrl": "/media/teams/{id}/logo"`
|
||||
|
||||
## Verification Steps
|
||||
|
||||
1. **Start with existing data**: Run API with force reseed enabled
|
||||
2. **Check database**: Verify `racing_teams` table is cleared
|
||||
3. **Verify new data**: Teams should have generated logoRef
|
||||
4. **Test API**: `/teams/all` should return correct logo URLs
|
||||
|
||||
## Files Modified
|
||||
- `adapters/bootstrap/SeedRacingData.ts` - Enhanced `clearExistingRacingData()` method
|
||||
|
||||
## Related Code
|
||||
- `RacingTeamFactory.createTeams()` - Sets `logoRef: MediaReference.generated('team', teamId)`
|
||||
- `AllTeamsPresenter.present()` - Derives `logoUrl` from `logoRef`
|
||||
- `MediaController.debugResolve()` - Validates media resolution
|
||||
Reference in New Issue
Block a user