refactor: change domain model IDs from UUID to String canonical IDs
This refactor fixes the achievement system by using stable canonical string IDs (e.g., "stadium_mlb_fenway_park") instead of random UUIDs. This ensures stadium mappings for achievements are consistent across app launches and CloudKit sync operations. Changes: - Stadium, Team, Game: id property changed from UUID to String - Trip, TripStop, TripPreferences: updated to use String IDs for games/stadiums - CKModels: removed UUID parsing, use canonical IDs directly - AchievementEngine: now matches against canonical stadium IDs - All test files updated to use String IDs instead of UUID() Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -181,10 +181,10 @@ final class AchievementEngineIntegrationTests: XCTestCase {
|
||||
var modelContainer: ModelContainer!
|
||||
var modelContext: ModelContext!
|
||||
|
||||
// Test UUIDs for stadiums
|
||||
let fenwayUUID = UUID(uuidString: "11111111-1111-1111-1111-111111111111")!
|
||||
let wrigleyUUID = UUID(uuidString: "22222222-2222-2222-2222-222222222222")!
|
||||
let msgUUID = UUID(uuidString: "33333333-3333-3333-3333-333333333333")!
|
||||
// Canonical IDs for test stadiums
|
||||
let fenwayId = "stadium_mlb_bos"
|
||||
let wrigleyId = "stadium_mlb_chc"
|
||||
let msgId = "stadium_nba_nyk"
|
||||
|
||||
override func setUp() async throws {
|
||||
try await super.setUp()
|
||||
@@ -231,8 +231,7 @@ final class AchievementEngineIntegrationTests: XCTestCase {
|
||||
private func setupTestData() async {
|
||||
// Create Fenway Park stadium
|
||||
let fenway = CanonicalStadium(
|
||||
canonicalId: "stadium_mlb_bos",
|
||||
uuid: fenwayUUID,
|
||||
canonicalId: fenwayId,
|
||||
name: "Fenway Park",
|
||||
city: "Boston",
|
||||
state: "MA",
|
||||
@@ -245,8 +244,7 @@ final class AchievementEngineIntegrationTests: XCTestCase {
|
||||
|
||||
// Create Wrigley Field stadium
|
||||
let wrigley = CanonicalStadium(
|
||||
canonicalId: "stadium_mlb_chc",
|
||||
uuid: wrigleyUUID,
|
||||
canonicalId: wrigleyId,
|
||||
name: "Wrigley Field",
|
||||
city: "Chicago",
|
||||
state: "IL",
|
||||
@@ -259,8 +257,7 @@ final class AchievementEngineIntegrationTests: XCTestCase {
|
||||
|
||||
// Create MSG stadium
|
||||
let msg = CanonicalStadium(
|
||||
canonicalId: "stadium_nba_nyk",
|
||||
uuid: msgUUID,
|
||||
canonicalId: msgId,
|
||||
name: "Madison Square Garden",
|
||||
city: "New York",
|
||||
state: "NY",
|
||||
@@ -317,10 +314,9 @@ final class AchievementEngineIntegrationTests: XCTestCase {
|
||||
// Create engine
|
||||
let engine = AchievementEngine(modelContext: modelContext, dataProvider: AppDataProvider.shared)
|
||||
|
||||
// Create a visit to Fenway using the actual stadium UUID format
|
||||
// Create a visit to Fenway using the canonical stadium ID
|
||||
let visit = StadiumVisit(
|
||||
canonicalStadiumId: fenwayUUID.uuidString,
|
||||
stadiumUUID: fenwayUUID,
|
||||
stadiumId: fenwayId,
|
||||
stadiumNameAtVisit: "Fenway Park",
|
||||
visitDate: Date(),
|
||||
sport: .mlb
|
||||
@@ -347,8 +343,7 @@ final class AchievementEngineIntegrationTests: XCTestCase {
|
||||
let engine = AchievementEngine(modelContext: modelContext, dataProvider: AppDataProvider.shared)
|
||||
|
||||
let visit = StadiumVisit(
|
||||
canonicalStadiumId: wrigleyUUID.uuidString,
|
||||
stadiumUUID: wrigleyUUID,
|
||||
stadiumId: wrigleyId,
|
||||
stadiumNameAtVisit: "Wrigley Field",
|
||||
visitDate: Date(),
|
||||
sport: .mlb
|
||||
@@ -386,8 +381,7 @@ final class AchievementEngineIntegrationTests: XCTestCase {
|
||||
|
||||
// Add a visit
|
||||
let visit = StadiumVisit(
|
||||
canonicalStadiumId: fenwayUUID.uuidString,
|
||||
stadiumUUID: fenwayUUID,
|
||||
stadiumId: fenwayId,
|
||||
stadiumNameAtVisit: "Fenway Park",
|
||||
visitDate: Date(),
|
||||
sport: .mlb
|
||||
@@ -406,10 +400,9 @@ final class AchievementEngineIntegrationTests: XCTestCase {
|
||||
let engine = AchievementEngine(modelContext: modelContext, dataProvider: AppDataProvider.shared)
|
||||
|
||||
// Add TD Garden for NHL
|
||||
let tdGardenUUID = UUID()
|
||||
let tdGardenId = "stadium_nhl_bos"
|
||||
let tdGarden = CanonicalStadium(
|
||||
canonicalId: "stadium_nhl_bos",
|
||||
uuid: tdGardenUUID,
|
||||
canonicalId: tdGardenId,
|
||||
name: "TD Garden",
|
||||
city: "Boston",
|
||||
state: "MA",
|
||||
@@ -437,8 +430,7 @@ final class AchievementEngineIntegrationTests: XCTestCase {
|
||||
|
||||
// Visit MLB stadium only - not enough
|
||||
let mlbVisit = StadiumVisit(
|
||||
canonicalStadiumId: fenwayUUID.uuidString,
|
||||
stadiumUUID: fenwayUUID,
|
||||
stadiumId: fenwayId,
|
||||
stadiumNameAtVisit: "Fenway Park",
|
||||
visitDate: Date(),
|
||||
sport: .mlb
|
||||
@@ -453,8 +445,7 @@ final class AchievementEngineIntegrationTests: XCTestCase {
|
||||
|
||||
// Visit NBA stadium - still not enough
|
||||
let nbaVisit = StadiumVisit(
|
||||
canonicalStadiumId: msgUUID.uuidString,
|
||||
stadiumUUID: msgUUID,
|
||||
stadiumId: msgId,
|
||||
stadiumNameAtVisit: "MSG",
|
||||
visitDate: Date(),
|
||||
sport: .nba
|
||||
@@ -469,8 +460,7 @@ final class AchievementEngineIntegrationTests: XCTestCase {
|
||||
|
||||
// Visit NHL stadium - now earned!
|
||||
let nhlVisit = StadiumVisit(
|
||||
canonicalStadiumId: tdGardenUUID.uuidString,
|
||||
stadiumUUID: tdGardenUUID,
|
||||
stadiumId: tdGardenId,
|
||||
stadiumNameAtVisit: "TD Garden",
|
||||
visitDate: Date(),
|
||||
sport: .nhl
|
||||
|
||||
Reference in New Issue
Block a user