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.
104 lines
2.9 KiB
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"
|
|
}
|
|
}
|
|
|