|
|
|
|
@ -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 { |
|
|
|
|
|