From 8ccbd926bf49a304fcfde70b46a0d10db8243df9 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 29 May 2024 09:43:32 +0200 Subject: [PATCH] work in progress --- PadelClub/Data/DataStore.swift | 11 +++++-- PadelClub/Data/Event.swift | 59 +++++++++++++++++----------------- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/PadelClub/Data/DataStore.swift b/PadelClub/Data/DataStore.swift index f33ca16..64a2995 100644 --- a/PadelClub/Data/DataStore.swift +++ b/PadelClub/Data/DataStore.swift @@ -23,6 +23,8 @@ class DataStore: ObservableObject { self.userStorage.setItemNoSync(self.user) if Store.main.collectionsCanSynchronize { Store.main.loadCollectionFromServer() + self._fixMissingClubCreatorIfNecessary(self.clubs) + self._fixMissingEventCreatorIfNecessary(self.events) } } } else { @@ -128,7 +130,8 @@ class DataStore: ObservableObject { if club.creator == nil && self.user.username.count > 0 { club.creator = self.user.id do { - try clubsCollection.addOrUpdate(instance: club) + try clubsCollection.writeChangeAndInsertOnServer(instance: club) +// try clubsCollection.addOrUpdate(instance: club) } catch { Logger.error(error) } @@ -141,7 +144,11 @@ class DataStore: ObservableObject { if event.creator == nil && self.user.username.count > 0 { event.creator = self.user.id do { - try eventsCollection.addOrUpdate(instance: event) + try event.insertOnServer() +// try eventsCollection.writeChangeAndInsertOnServer(instance: event) +// for tournament in event.tournaments { +// try self.tournaments.writeChangeAndInsertOnServer(instance: tournament) +// } } catch { Logger.error(error) } diff --git a/PadelClub/Data/Event.swift b/PadelClub/Data/Event.swift index f28945d..bae99a8 100644 --- a/PadelClub/Data/Event.swift +++ b/PadelClub/Data/Event.swift @@ -11,6 +11,7 @@ import SwiftUI @Observable class Event: ModelObject, Storable { + static func resourceName() -> String { return "events" } static func tokenExemptedMethods() -> [HTTPMethod] { return [] } @@ -19,25 +20,37 @@ class Event: ModelObject, Storable { var club: String? var creationDate: Date = Date() var name: String? - //var federalTournamentData: Data? - //var courtCount: Int? var tenupId: String? -// var groupStageFormat: Int? -// var roundFormat: Int? -// var loserRoundFormat: Int? - //var timeslots ? internal init(creator: String? = nil, club: String? = nil, name: String? = nil, tenupId: String? = nil) { self.creator = creator self.club = club self.name = name -// self.courtCount = courtCount self.tenupId = tenupId -// self.groupStageFormat = groupStageFormat -// self.roundFormat = roundFormat -// self.loserRoundFormat = loserRoundFormat } + override func deleteDependencies() throws { + try Store.main.deleteDependencies(items: self.tournaments) + try Store.main.deleteDependencies(items: self.courtsUnavailability) + } + + // MARK: - Computed dependencies + + var tournaments: [Tournament] { + Store.main.filter { $0.event == self.id } + } + + func clubObject() -> Club? { + guard let club else { return nil } + return Store.main.findById(club) + } + + var courtsUnavailability: [DateInterval] { + Store.main.filter(isIncluded: { $0.event == id }) + } + + // MARK: - + func eventCourtCount() -> Int { tournaments.map { $0.courtCount }.max() ?? 2 } @@ -58,15 +71,6 @@ class Event: ModelObject, Storable { } } - func clubObject() -> Club? { - guard let club else { return nil } - return Store.main.findById(club) - } - - var tournaments: [Tournament] { - Store.main.filter { $0.event == self.id } - } - func existingBuild(_ build: any TournamentBuildHolder) -> Tournament? { tournaments.first(where: { $0.isSameBuild(build) }) } @@ -77,17 +81,16 @@ class Event: ModelObject, Storable { }) } - var courtsUnavailability: [DateInterval] { - Store.main.filter(isIncluded: { $0.event == id }) + func insertOnServer() throws { + try DataStore.shared.events.writeChangeAndInsertOnServer(instance: self) + for tournament in self.tournaments { +// try tournament.insertOnServer() + } } - override func deleteDependencies() throws { - try Store.main.deleteDependencies(items: self.tournaments) - try Store.main.deleteDependencies(items: self.courtsUnavailability) - - } } + extension Event { enum CodingKeys: String, CodingKey { case _id = "id" @@ -95,11 +98,7 @@ extension Event { case _club = "club" case _creationDate = "creationDate" case _name = "name" - //case _courtCount = "courtCount" case _tenupId = "tenupId" -// case _groupStageFormat = "groupStageFormat" -// case _roundFormat = "roundFormat" -// case _loserRoundFormat = "loserRoundFormat" } func encode(to encoder: Encoder) throws {