You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
PadelClub/PadelClub/Data/Event.swift

104 lines
2.9 KiB

//
// Event_v2.swift
// Padel Tournament
//
// Created by razmig on 10/03/2024.
//
import Foundation
import LeStorage
import SwiftUI
@Observable
class Event: ModelObject, Storable {
static func resourceName() -> String { return "events" }
static func tokenExemptedMethods() -> [HTTPMethod] { return [] }
var id: String = Store.randomId()
var creator: String?
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
}
func eventCourtCount() -> Int {
tournaments.map { $0.courtCount }.max() ?? 2
}
func eventStartDate() -> Date {
tournaments.map { $0.startDate }.min() ?? Date()
}
func eventDayDuration() -> Int {
tournaments.map { $0.dayDuration }.max() ?? 1
}
func eventTitle() -> String {
if let name, name.isEmpty == false {
return name
} else {
return "Événement"
}
}
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) })
}
func tournamentsCourtsUsed(exluding tournamentId: String) -> [DateInterval] {
tournaments.filter { $0.id != tournamentId }.flatMap({ tournament in
tournament.getPlayedMatchDateIntervals(in: self)
})
}
var courtsUnavailability: [DateInterval] {
Store.main.filter(isIncluded: { $0.event == id })
}
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"
case _creator = "creator"
case _club = "club"
case _creationDate = "creationDate"
case _name = "name"
//case _courtCount = "courtCount"
case _tenupId = "tenupId"
// case _groupStageFormat = "groupStageFormat"
// case _roundFormat = "roundFormat"
// case _loserRoundFormat = "loserRoundFormat"
}
}