work in progress

multistore
Laurent 1 year ago
parent f8742dca15
commit 8ccbd926bf
  1. 11
      PadelClub/Data/DataStore.swift
  2. 59
      PadelClub/Data/Event.swift

@ -23,6 +23,8 @@ class DataStore: ObservableObject {
self.userStorage.setItemNoSync(self.user) self.userStorage.setItemNoSync(self.user)
if Store.main.collectionsCanSynchronize { if Store.main.collectionsCanSynchronize {
Store.main.loadCollectionFromServer() Store.main.loadCollectionFromServer()
self._fixMissingClubCreatorIfNecessary(self.clubs)
self._fixMissingEventCreatorIfNecessary(self.events)
} }
} }
} else { } else {
@ -128,7 +130,8 @@ class DataStore: ObservableObject {
if club.creator == nil && self.user.username.count > 0 { if club.creator == nil && self.user.username.count > 0 {
club.creator = self.user.id club.creator = self.user.id
do { do {
try clubsCollection.addOrUpdate(instance: club) try clubsCollection.writeChangeAndInsertOnServer(instance: club)
// try clubsCollection.addOrUpdate(instance: club)
} catch { } catch {
Logger.error(error) Logger.error(error)
} }
@ -141,7 +144,11 @@ class DataStore: ObservableObject {
if event.creator == nil && self.user.username.count > 0 { if event.creator == nil && self.user.username.count > 0 {
event.creator = self.user.id event.creator = self.user.id
do { 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 { } catch {
Logger.error(error) Logger.error(error)
} }

@ -11,6 +11,7 @@ import SwiftUI
@Observable @Observable
class Event: ModelObject, Storable { class Event: ModelObject, Storable {
static func resourceName() -> String { return "events" } static func resourceName() -> String { return "events" }
static func tokenExemptedMethods() -> [HTTPMethod] { return [] } static func tokenExemptedMethods() -> [HTTPMethod] { return [] }
@ -19,25 +20,37 @@ class Event: ModelObject, Storable {
var club: String? var club: String?
var creationDate: Date = Date() var creationDate: Date = Date()
var name: String? var name: String?
//var federalTournamentData: Data?
//var courtCount: Int?
var tenupId: String? 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) { internal init(creator: String? = nil, club: String? = nil, name: String? = nil, tenupId: String? = nil) {
self.creator = creator self.creator = creator
self.club = club self.club = club
self.name = name self.name = name
// self.courtCount = courtCount
self.tenupId = tenupId 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 { func eventCourtCount() -> Int {
tournaments.map { $0.courtCount }.max() ?? 2 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? { func existingBuild(_ build: any TournamentBuildHolder) -> Tournament? {
tournaments.first(where: { $0.isSameBuild(build) }) tournaments.first(where: { $0.isSameBuild(build) })
} }
@ -77,17 +81,16 @@ class Event: ModelObject, Storable {
}) })
} }
var courtsUnavailability: [DateInterval] { func insertOnServer() throws {
Store.main.filter(isIncluded: { $0.event == id }) 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 { extension Event {
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
case _id = "id" case _id = "id"
@ -95,11 +98,7 @@ extension Event {
case _club = "club" case _club = "club"
case _creationDate = "creationDate" case _creationDate = "creationDate"
case _name = "name" case _name = "name"
//case _courtCount = "courtCount"
case _tenupId = "tenupId" case _tenupId = "tenupId"
// case _groupStageFormat = "groupStageFormat"
// case _roundFormat = "roundFormat"
// case _loserRoundFormat = "loserRoundFormat"
} }
func encode(to encoder: Encoder) throws { func encode(to encoder: Encoder) throws {

Loading…
Cancel
Save