diff --git a/PadelClub/Utils/Patcher.swift b/PadelClub/Utils/Patcher.swift index 2fad83c..260a2e8 100644 --- a/PadelClub/Utils/Patcher.swift +++ b/PadelClub/Utils/Patcher.swift @@ -61,60 +61,62 @@ class Patcher { return } - return // TODO review +// return // TODO review let services = Services(url: "https://xlr.alwaysdata.net/roads/") if services.hasToken() { Task { - let clubs: [Club] = try await Store.main.getItems() - let events: [Event] = try await Store.main.getItems() - let tournaments: [Tournament] = try await Store.main.getItems() -// let rounds: [Round] = try await services.get() -// let groupStages: [GroupStage] = try await services.get() -// let matches: [Match] = try await services.get() -// let teamRegistrations: [TeamRegistration] = try await services.get() -// let teamScores: [TeamScore] = try await services.get() -// let playerRegistrations: [PlayerRegistration] = try await services.get() - let courts: [Court] = try await Store.main.getItems() - let dateIntervals: [DateInterval] = try await Store.main.getItems() + let clubs: [Club] = try await services.get() + let events: [Event] = try await services.get() + let tournaments: [Tournament] = try await services.get() + let courts: [Court] = try await services.get() + let dateIntervals: [DateInterval] = try await services.get() -// for club in clubs { -// club.creator = userId -// } - for event in events { - event.creator = userId - if let clubId = event.club, DataStore.shared.clubs.findById(clubId) == nil { - if let club = clubs.first(where: { $0.id == clubId }) { - club.creator = userId - try? DataStore.shared.clubs.addOrUpdate(instance: club) - } - } + let clubIds = Set(events.compactMap { $0.club }) + let myClubs: [Club] = clubIds.compactMap { clubId in + clubs.first { $0.id == clubId } + } + myClubs.forEach { $0.creator = userId } + + try DataStore.shared.clubs.addOrUpdate(contentOfs: myClubs) + for club in myClubs { + let courts = courts.filter { $0.club == club.id } + try DataStore.shared.courts.addOrUpdate(contentOfs: courts) } -// try DataStore.shared.clubs.addOrUpdate(contentOfs: clubs) + events.forEach { $0.creator = userId } + try DataStore.shared.events.addOrUpdate(contentOfs: events) try DataStore.shared.tournaments.addOrUpdate(contentOfs: tournaments) - try DataStore.shared.courts.addOrUpdate(contentOfs: courts) try DataStore.shared.dateIntervals.addOrUpdate(contentOfs: dateIntervals) -// for tournament in DataStore.shared.tournaments { -// let store = tournament.tournamentStore -// try store.rounds.addOrUpdate(contentOfs: rounds) -// try store.groupStages.addOrUpdate(contentOfs: groupStages) -// try store.matches.addOrUpdate(contentOfs: matches) -// try store.teamRegistrations.addOrUpdate(contentOfs: teamRegistrations) -// try store.teamScores.addOrUpdate(contentOfs: teamScores) -// try store.playerRegistrations.addOrUpdate(contentOfs: playerRegistrations) -// } + for tournament in DataStore.shared.tournaments { + let store = tournament.tournamentStore + let identifier = StoreIdentifier(value: tournament.id, parameterName: "tournament") + + let rounds: [Round] = try await services.get(identifier: identifier) + let groupStages: [GroupStage] = try await services.get(identifier: identifier) + let matches: [Match] = try await services.get(identifier: identifier) + let teamRegistrations: [TeamRegistration] = try await services.get(identifier: identifier) + let teamScores: [TeamScore] = try await services.get(identifier: identifier) + let playerRegistrations: [PlayerRegistration] = try await services.get(identifier: identifier) + + try store.teamRegistrations.addOrUpdate(contentOfs: teamRegistrations) + try store.rounds.addOrUpdate(contentOfs: rounds) + try store.groupStages.addOrUpdate(contentOfs: groupStages) + try store.matches.addOrUpdate(contentOfs: matches) + try store.playerRegistrations.addOrUpdate(contentOfs: playerRegistrations) + try store.teamScores.addOrUpdate(contentOfs: teamScores) + } } + } else { + Logger.log("no token for import") } - - } }