diff --git a/PadelClubData/Data/Gen/BaseGroupStage.swift b/PadelClubData/Data/Gen/BaseGroupStage.swift index 5d815b0..8f82856 100644 --- a/PadelClubData/Data/Gen/BaseGroupStage.swift +++ b/PadelClubData/Data/Gen/BaseGroupStage.swift @@ -19,12 +19,9 @@ public class BaseGroupStage: SyncedModelObject, SyncedStorable { public var format: MatchFormat? = nil public var startDate: Date? = nil { didSet { - if self.tournamentValue()?.hasStarted() == false { - plannedStartDate = startDate - } + self.didSetStartDate() } } - public var name: String? = nil public var step: Int = 0 public var plannedStartDate: Date? = nil @@ -55,6 +52,8 @@ public class BaseGroupStage: SyncedModelObject, SyncedStorable { super.init() } + public func didSetStartDate() {} + public enum CodingKeys: String, CodingKey { case _id = "id" case _tournament = "tournament" @@ -118,4 +117,4 @@ public class BaseGroupStage: SyncedModelObject, SyncedStorable { ] } -} +} \ No newline at end of file diff --git a/PadelClubData/Data/Gen/BaseMatch.swift b/PadelClubData/Data/Gen/BaseMatch.swift index 30bc175..a558a8b 100644 --- a/PadelClubData/Data/Gen/BaseMatch.swift +++ b/PadelClubData/Data/Gen/BaseMatch.swift @@ -17,14 +17,9 @@ public class BaseMatch: SyncedModelObject, SyncedStorable { public var groupStage: String? = nil public var startDate: Date? = nil { didSet { - if self.roundValue()?.tournamentObject()?.hasStarted() == false { - plannedStartDate = startDate - } else if self.groupStageValue()?.tournamentObject()?.hasStarted() == false { - plannedStartDate = startDate - } + self.didSetStartDate() } } - public var endDate: Date? = nil public var index: Int = 0 public var format: MatchFormat? = nil @@ -75,6 +70,8 @@ public class BaseMatch: SyncedModelObject, SyncedStorable { super.init() } + public func didSetStartDate() {} + public enum CodingKeys: String, CodingKey { case _id = "id" case _round = "round" @@ -169,4 +166,4 @@ public class BaseMatch: SyncedModelObject, SyncedStorable { ] } -} +} \ No newline at end of file diff --git a/PadelClubData/Data/Gen/BaseRound.swift b/PadelClubData/Data/Gen/BaseRound.swift index ebcd5fe..398283e 100644 --- a/PadelClubData/Data/Gen/BaseRound.swift +++ b/PadelClubData/Data/Gen/BaseRound.swift @@ -19,12 +19,9 @@ public class BaseRound: SyncedModelObject, SyncedStorable { public var format: MatchFormat? = nil public var startDate: Date? = nil { didSet { - if self.tournamentValue()?.hasStarted() == false { - plannedStartDate = startDate - } + self.didSetStartDate() } } - public var groupStageLoserBracket: Bool = false public var loserBracketMode: LoserBracketMode = .automatic public var plannedStartDate: Date? = nil @@ -55,6 +52,8 @@ public class BaseRound: SyncedModelObject, SyncedStorable { super.init() } + public func didSetStartDate() {} + public enum CodingKeys: String, CodingKey { case _id = "id" case _tournament = "tournament" diff --git a/PadelClubData/Data/Gen/GroupStage.json b/PadelClubData/Data/Gen/GroupStage.json index ef293b3..b6f73b9 100644 --- a/PadelClubData/Data/Gen/GroupStage.json +++ b/PadelClubData/Data/Gen/GroupStage.json @@ -33,7 +33,8 @@ "name": "startDate", "type": "Date", "optional": true, - "defaultValue": "nil" + "defaultValue": "nil", + "generateDidSet": true }, { "name": "name", diff --git a/PadelClubData/Data/Gen/Match.json b/PadelClubData/Data/Gen/Match.json index fbe77b4..ff595c0 100644 --- a/PadelClubData/Data/Gen/Match.json +++ b/PadelClubData/Data/Gen/Match.json @@ -26,7 +26,8 @@ { "name": "startDate", "type": "Date", - "optional": true + "optional": true, + "generateDidSet": true }, { "name": "endDate", diff --git a/PadelClubData/Data/Gen/Round.json b/PadelClubData/Data/Gen/Round.json index ac6b36d..12e734c 100644 --- a/PadelClubData/Data/Gen/Round.json +++ b/PadelClubData/Data/Gen/Round.json @@ -35,7 +35,8 @@ { "name": "startDate", "type": "Date", - "optional": true + "optional": true, + "generateDidSet": true }, { "name": "groupStageLoserBracket", diff --git a/PadelClubData/Data/Gen/generator.py b/PadelClubData/Data/Gen/generator.py index 2b8f9b8..2335428 100644 --- a/PadelClubData/Data/Gen/generator.py +++ b/PadelClubData/Data/Gen/generator.py @@ -19,6 +19,7 @@ class SwiftModelGenerator: is_sync = model_data.get("synchronizable", False) is_observable = model_data.get("observable", False) properties = model_data["properties"] + did_set_properties = [] # Get protocol specific configurations resource = self.make_resource_name(model_name) @@ -53,7 +54,16 @@ class SwiftModelGenerator: if prop.get("optional", False): swift_type += "?" default_value = prop.get("defaultValue", "nil" if prop.get("optional", False) else self._get_default_value(swift_type)) - lines.append(f" public var {prop['name']}: {swift_type} = {default_value}") + generate_didset = prop.get("generateDidSet", False) + generate_didset_str = " {" if generate_didset else "" + lines.append(f" public var {prop['name']}: {swift_type} = {default_value}{generate_didset_str}") + if generate_didset: + cap_name = prop['name'][0].upper() + prop['name'][1:] + did_set_properties.append(cap_name) + lines.append(" didSet {") + lines.append(f" self.didSet{cap_name}()") + lines.append(" }") + lines.append(" }") lines.append("") @@ -61,6 +71,11 @@ class SwiftModelGenerator: lines.extend(self._generate_constructor(model_name, properties)) lines.append("") + # Add didSet + if did_set_properties: + lines.extend(self._generate_didset_methods(did_set_properties)) + lines.append("") + # CodingKeys lines.extend(self._generate_coding_keys(model_name, properties, is_observable)) lines.append("") @@ -148,6 +163,12 @@ class SwiftModelGenerator: return lines + def _generate_didset_methods(self, properties) -> List[str]: + lines = [] + for prop in properties: + lines.append(f" public func didSet{prop}() {{}}") + return lines + def _generate_foreign_key_methods(self, properties: List[Dict[str, Any]]) -> List[str]: lines = [] for prop in properties: diff --git a/PadelClubData/Data/GroupStage.swift b/PadelClubData/Data/GroupStage.swift index 7cf6dfc..414322a 100644 --- a/PadelClubData/Data/GroupStage.swift +++ b/PadelClubData/Data/GroupStage.swift @@ -26,6 +26,14 @@ final public class GroupStage: BaseGroupStage, SideStorable { return TournamentLibrary.shared.store(tournamentId: self.tournament) } + // MARK: - DidSet + + public override func didSetStartDate() { + if self.tournamentValue()?.hasStarted() == false { + plannedStartDate = startDate + } + } + // MARK: - Computed dependencies public func _matches() -> [Match] { diff --git a/PadelClubData/Data/Match.swift b/PadelClubData/Data/Match.swift index fc42482..96eb38d 100644 --- a/PadelClubData/Data/Match.swift +++ b/PadelClubData/Data/Match.swift @@ -36,6 +36,18 @@ final public class Match: BaseMatch, SideStorable { super.init() } + // MARK: - DidSet + + public override func didSetStartDate() { + if self.roundValue()?.tournamentObject()?.hasStarted() == false { + plannedStartDate = startDate + } else if self.groupStageValue()?.tournamentObject()?.hasStarted() == false { + plannedStartDate = startDate + } + } + + // MARK: - + public func setMatchName(_ serverName: String?) { self.name = serverName } diff --git a/PadelClubData/Data/Round.swift b/PadelClubData/Data/Round.swift index 9147ef4..053cbbd 100644 --- a/PadelClubData/Data/Round.swift +++ b/PadelClubData/Data/Round.swift @@ -43,6 +43,14 @@ final public class Round: BaseRound, SideStorable { super.init() } + // MARK: - DidSet + + public override func didSetStartDate() { + if self.tournamentValue()?.hasStarted() == false { + plannedStartDate = startDate + } + } + // MARK: - Computed dependencies public var tournamentStore: TournamentStore? {