Merge remote-tracking branch 'refs/remotes/origin/main'

sync2
Raz 1 year ago
commit a9735c1c21
  1. 67
      PadelClub/Data/Club.swift
  2. 10
      PadelClub/Data/Court.swift
  3. 29
      PadelClub/Data/Event.swift
  4. 22
      PadelClub/Data/GroupStage.swift
  5. 73
      PadelClub/Data/Match.swift
  6. 100
      PadelClub/Data/PlayerRegistration.swift
  7. 21
      PadelClub/Data/Round.swift
  8. 102
      PadelClub/Data/TeamRegistration.swift
  9. 32
      PadelClub/Data/TeamScore.swift
  10. 62
      PadelClub/Data/Tournament.swift
  11. 84
      PadelClub/Data/User.swift
  12. 8
      PadelClub/Extensions/CodingContainer+Extensions.swift
  13. 6
      PadelClub/Views/Tournament/Subscription/Purchase.swift

@ -109,67 +109,18 @@ final class Club : ModelObject, Storable, Hashable {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(id, forKey: ._id)
if let creator = creator {
try container.encode(creator, forKey: ._creator)
} else {
try container.encodeNil(forKey: ._creator)
}
try container.encode(creator, forKey: ._creator)
try container.encode(name, forKey: ._name)
try container.encode(acronym, forKey: ._acronym)
if let phone = phone {
try container.encode(phone, forKey: ._phone)
} else {
try container.encodeNil(forKey: ._phone)
}
if let code = code {
try container.encode(code, forKey: ._code)
} else {
try container.encodeNil(forKey: ._code)
}
if let address = address {
try container.encode(address, forKey: ._address)
} else {
try container.encodeNil(forKey: ._address)
}
if let city = city {
try container.encode(city, forKey: ._city)
} else {
try container.encodeNil(forKey: ._city)
}
if let zipCode = zipCode {
try container.encode(zipCode, forKey: ._zipCode)
} else {
try container.encodeNil(forKey: ._zipCode)
}
if let latitude = latitude {
try container.encode(latitude, forKey: ._latitude)
} else {
try container.encodeNil(forKey: ._latitude)
}
if let longitude = longitude {
try container.encode(longitude, forKey: ._longitude)
} else {
try container.encodeNil(forKey: ._longitude)
}
try container.encode(phone, forKey: ._phone)
try container.encode(code, forKey: ._code)
try container.encode(address, forKey: ._address)
try container.encode(city, forKey: ._city)
try container.encode(zipCode, forKey: ._zipCode)
try container.encode(latitude, forKey: ._latitude)
try container.encode(longitude, forKey: ._longitude)
try container.encode(courtCount, forKey: ._courtCount)
if let broadcastCode {
try container.encode(broadcastCode, forKey: ._broadcastCode)
} else {
try container.encodeNil(forKey: ._broadcastCode)
}
// try container.encode(alphabeticalName, forKey: ._alphabeticalName)
try container.encode(broadcastCode, forKey: ._broadcastCode)
}
}

@ -79,15 +79,9 @@ final class Court : ModelObject, Storable, Hashable {
try container.encode(id, forKey: ._id)
try container.encode(index, forKey: ._index)
try container.encode(club, forKey: ._club)
if let name = name {
try container.encode(name, forKey: ._name)
} else {
try container.encodeNil(forKey: ._name)
}
try container.encode(name, forKey: ._name)
try container.encode(exitAllowed, forKey: ._exitAllowed)
try container.encode(indoor, forKey: ._indoor)
}
}

@ -120,32 +120,11 @@ extension Event {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(id, forKey: ._id)
if let creator = creator {
try container.encode(creator, forKey: ._creator)
} else {
try container.encodeNil(forKey: ._creator)
}
if let club = club {
try container.encode(club, forKey: ._club)
} else {
try container.encodeNil(forKey: ._club)
}
try container.encode(creator, forKey: ._creator)
try container.encode(club, forKey: ._club)
try container.encode(creationDate, forKey: ._creationDate)
if let name = name {
try container.encode(name, forKey: ._name)
} else {
try container.encodeNil(forKey: ._name)
}
if let tenupId = tenupId {
try container.encode(tenupId, forKey: ._tenupId)
} else {
try container.encodeNil(forKey: ._tenupId)
}
try container.encode(name, forKey: ._name)
try container.encode(tenupId, forKey: ._tenupId)
}
}

@ -454,25 +454,9 @@ final class GroupStage: ModelObject, Storable {
try container.encode(tournament, forKey: ._tournament)
try container.encode(index, forKey: ._index)
try container.encode(size, forKey: ._size)
if let format = format {
try container.encode(format, forKey: ._format)
} else {
try container.encodeNil(forKey: ._format)
}
if let startDate = startDate {
try container.encode(startDate, forKey: ._startDate)
} else {
try container.encodeNil(forKey: ._startDate)
}
if let name = name {
try container.encode(name, forKey: ._name)
} else {
try container.encodeNil(forKey: ._name)
}
try container.encode(format, forKey: ._format)
try container.encode(startDate, forKey: ._startDate)
try container.encode(name, forKey: ._name)
try container.encode(step, forKey: ._step)
}

@ -902,71 +902,18 @@ defer {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(id, forKey: ._id)
if let round = round {
try container.encode(round, forKey: ._round)
} else {
try container.encodeNil(forKey: ._round)
}
if let groupStage = groupStage {
try container.encode(groupStage, forKey: ._groupStage)
} else {
try container.encodeNil(forKey: ._groupStage)
}
if let startDate = startDate {
try container.encode(startDate, forKey: ._startDate)
} else {
try container.encodeNil(forKey: ._startDate)
}
if let endDate = endDate {
try container.encode(endDate, forKey: ._endDate)
} else {
try container.encodeNil(forKey: ._endDate)
}
try container.encode(round, forKey: ._round)
try container.encode(groupStage, forKey: ._groupStage)
try container.encode(startDate, forKey: ._startDate)
try container.encode(endDate, forKey: ._endDate)
try container.encode(format, forKey: ._format)
try container.encode(servingTeamId, forKey: ._servingTeamId)
try container.encode(index, forKey: ._index)
if let format = format {
try container.encode(format, forKey: ._format)
} else {
try container.encodeNil(forKey: ._format)
}
if let servingTeamId = servingTeamId {
try container.encode(servingTeamId, forKey: ._servingTeamId)
} else {
try container.encodeNil(forKey: ._servingTeamId)
}
if let winningTeamId = winningTeamId {
try container.encode(winningTeamId, forKey: ._winningTeamId)
} else {
try container.encodeNil(forKey: ._winningTeamId)
}
if let losingTeamId = losingTeamId {
try container.encode(losingTeamId, forKey: ._losingTeamId)
} else {
try container.encodeNil(forKey: ._losingTeamId)
}
if let name = name {
try container.encode(name, forKey: ._name)
} else {
try container.encodeNil(forKey: ._name)
}
try container.encode(winningTeamId, forKey: ._winningTeamId)
try container.encode(losingTeamId, forKey: ._losingTeamId)
try container.encode(name, forKey: ._name)
try container.encode(disabled, forKey: ._disabled)
if let courtIndex = courtIndex {
try container.encode(courtIndex, forKey: ._courtIndex)
} else {
try container.encodeNil(forKey: ._courtIndex)
}
try container.encode(courtIndex, forKey: ._courtIndex)
try container.encode(confirmed, forKey: ._confirmed)
}

@ -348,96 +348,24 @@ final class PlayerRegistration: ModelObject, Storable {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(id, forKey: ._id)
if let teamRegistration = teamRegistration {
try container.encode(teamRegistration, forKey: ._teamRegistration)
} else {
try container.encodeNil(forKey: ._teamRegistration)
}
try container.encode(teamRegistration, forKey: ._teamRegistration)
try container.encode(firstName, forKey: ._firstName)
try container.encode(lastName, forKey: ._lastName)
if let licenceId = licenceId {
try container.encode(licenceId, forKey: ._licenceId)
} else {
try container.encodeNil(forKey: ._licenceId)
}
if let rank = rank {
try container.encode(rank, forKey: ._rank)
} else {
try container.encodeNil(forKey: ._rank)
}
if let paymentType = paymentType {
try container.encode(paymentType, forKey: ._paymentType)
} else {
try container.encodeNil(forKey: ._paymentType)
}
if let sex = sex {
try container.encode(sex, forKey: ._sex)
} else {
try container.encodeNil(forKey: ._sex)
}
if let tournamentPlayed = tournamentPlayed {
try container.encode(tournamentPlayed, forKey: ._tournamentPlayed)
} else {
try container.encodeNil(forKey: ._tournamentPlayed)
}
if let points = points {
try container.encode(points, forKey: ._points)
} else {
try container.encodeNil(forKey: ._points)
}
if let clubName = clubName {
try container.encode(clubName, forKey: ._clubName)
} else {
try container.encodeNil(forKey: ._clubName)
}
if let ligueName = ligueName {
try container.encode(ligueName, forKey: ._ligueName)
} else {
try container.encodeNil(forKey: ._ligueName)
}
if let assimilation = assimilation {
try container.encode(assimilation, forKey: ._assimilation)
} else {
try container.encodeNil(forKey: ._assimilation)
}
if let phoneNumber = phoneNumber {
try container.encode(phoneNumber, forKey: ._phoneNumber)
} else {
try container.encodeNil(forKey: ._phoneNumber)
}
if let email = email {
try container.encode(email, forKey: ._email)
} else {
try container.encodeNil(forKey: ._email)
}
if let birthdate = birthdate {
try container.encode(birthdate, forKey: ._birthdate)
} else {
try container.encodeNil(forKey: ._birthdate)
}
try container.encode(licenceId, forKey: ._licenceId)
try container.encode(rank, forKey: ._rank)
try container.encode(paymentType, forKey: ._paymentType)
try container.encode(sex, forKey: ._sex)
try container.encode(tournamentPlayed, forKey: ._tournamentPlayed)
try container.encode(points, forKey: ._points)
try container.encode(clubName, forKey: ._clubName)
try container.encode(ligueName, forKey: ._ligueName)
try container.encode(assimilation, forKey: ._assimilation)
try container.encode(phoneNumber, forKey: ._phoneNumber)
try container.encode(email, forKey: ._email)
try container.encode(birthdate, forKey: ._birthdate)
try container.encode(computedRank, forKey: ._computedRank)
if let source = source {
try container.encode(source, forKey: ._source)
} else {
try container.encodeNil(forKey: ._source)
}
try container.encode(source, forKey: ._source)
try container.encode(hasArrived, forKey: ._hasArrived)
}

@ -727,23 +727,10 @@ defer {
try container.encode(groupStageLoserBracket, forKey: ._groupStageLoserBracket)
try container.encode(loserBracketMode, forKey: ._loserBracketMode)
if let parent = parent {
try container.encode(parent, forKey: ._parent)
} else {
try container.encodeNil(forKey: ._parent)
}
if let format = format {
try container.encode(format, forKey: ._format)
} else {
try container.encodeNil(forKey: ._format)
}
if let startDate = startDate {
try container.encode(startDate, forKey: ._startDate)
} else {
try container.encodeNil(forKey: ._startDate)
}
try container.encode(parent, forKey: ._parent)
try container.encode(format, forKey: ._format)
try container.encode(startDate, forKey: ._startDate)
}
func insertOnServer() {

@ -552,99 +552,27 @@ final class TeamRegistration: ModelObject, Storable {
try container.encode(id, forKey: ._id)
try container.encode(tournament, forKey: ._tournament)
if let groupStage = groupStage {
try container.encode(groupStage, forKey: ._groupStage)
} else {
try container.encodeNil(forKey: ._groupStage)
}
if let registrationDate = registrationDate {
try container.encode(registrationDate, forKey: ._registrationDate)
} else {
try container.encodeNil(forKey: ._registrationDate)
}
if let callDate = callDate {
try container.encode(callDate, forKey: ._callDate)
} else {
try container.encodeNil(forKey: ._callDate)
}
if let bracketPosition = bracketPosition {
try container.encode(bracketPosition, forKey: ._bracketPosition)
} else {
try container.encodeNil(forKey: ._bracketPosition)
}
if let groupStagePosition = groupStagePosition {
try container.encode(groupStagePosition, forKey: ._groupStagePosition)
} else {
try container.encodeNil(forKey: ._groupStagePosition)
}
if let comment = comment {
try container.encode(comment, forKey: ._comment)
} else {
try container.encodeNil(forKey: ._comment)
}
if let source = source {
try container.encode(source, forKey: ._source)
} else {
try container.encodeNil(forKey: ._source)
}
if let sourceValue = sourceValue {
try container.encode(sourceValue, forKey: ._sourceValue)
} else {
try container.encodeNil(forKey: ._sourceValue)
}
if let logo = logo {
try container.encode(logo, forKey: ._logo)
} else {
try container.encodeNil(forKey: ._logo)
}
if let name = name {
try container.encode(name, forKey: ._name)
} else {
try container.encodeNil(forKey: ._name)
}
try container.encode(groupStage, forKey: ._groupStage)
try container.encode(registrationDate, forKey: ._registrationDate)
try container.encode(callDate, forKey: ._callDate)
try container.encode(bracketPosition, forKey: ._bracketPosition)
try container.encode(groupStagePosition, forKey: ._groupStagePosition)
try container.encode(comment, forKey: ._comment)
try container.encode(source, forKey: ._source)
try container.encode(sourceValue, forKey: ._sourceValue)
try container.encode(logo, forKey: ._logo)
try container.encode(name, forKey: ._name)
try container.encode(walkOut, forKey: ._walkOut)
try container.encode(wildCardBracket, forKey: ._wildCardBracket)
try container.encode(wildCardGroupStage, forKey: ._wildCardGroupStage)
try container.encode(weight, forKey: ._weight)
if let lockedWeight = lockedWeight {
try container.encode(lockedWeight, forKey: ._lockedWeight)
} else {
try container.encodeNil(forKey: ._lockedWeight)
}
if let confirmationDate = confirmationDate {
try container.encode(confirmationDate, forKey: ._confirmationDate)
} else {
try container.encodeNil(forKey: ._confirmationDate)
}
try container.encode(lockedWeight, forKey: ._lockedWeight)
try container.encode(confirmationDate, forKey: ._confirmationDate)
try container.encode(qualified, forKey: ._qualified)
if let finalRanking {
try container.encode(finalRanking, forKey: ._finalRanking)
} else {
try container.encodeNil(forKey: ._finalRanking)
}
if let pointsEarned {
try container.encode(pointsEarned, forKey: ._pointsEarned)
} else {
try container.encodeNil(forKey: ._pointsEarned)
}
try container.encode(finalRanking, forKey: ._finalRanking)
try container.encode(pointsEarned, forKey: ._pointsEarned)
}
func insertOnServer() {
self.tournamentStore.teamRegistrations.writeChangeAndInsertOnServer(instance: self)
for playerRegistration in self.unsortedPlayers() {

@ -85,34 +85,12 @@ final class TeamScore: ModelObject, Storable {
try container.encode(id, forKey: ._id)
try container.encode(match, forKey: ._match)
if let teamRegistration = teamRegistration {
try container.encode(teamRegistration, forKey: ._teamRegistration)
} else {
try container.encodeNil(forKey: ._teamRegistration)
}
//try container.encode(playerRegistrations, forKey: ._playerRegistrations)
if let score = score {
try container.encode(score, forKey: ._score)
} else {
try container.encodeNil(forKey: ._score)
}
if let walkOut = walkOut {
try container.encode(walkOut, forKey: ._walkOut)
} else {
try container.encodeNil(forKey: ._walkOut)
}
if let luckyLoser = luckyLoser {
try container.encode(luckyLoser, forKey: ._luckyLoser)
} else {
try container.encodeNil(forKey: ._luckyLoser)
}
try container.encode(teamRegistration, forKey: ._teamRegistration)
try container.encode(score, forKey: ._score)
try container.encode(walkOut, forKey: ._walkOut)
try container.encode(luckyLoser, forKey: ._luckyLoser)
}
func insertOnServer() {
self.tournamentStore.teamScores.writeChangeAndInsertOnServer(instance: self)
}

@ -230,69 +230,39 @@ final class Tournament : ModelObject, Storable {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(id, forKey: ._id)
if let event {
try container.encode(event, forKey: ._event)
} else {
try container.encodeNil(forKey: ._event)
}
if let name {
try container.encode(name, forKey: ._name)
} else {
try container.encodeNil(forKey: ._name)
}
try container.encode(event, forKey: ._event)
try container.encode(name, forKey: ._name)
try container.encode(startDate, forKey: ._startDate)
if let endDate {
try container.encode(endDate, forKey: ._endDate)
} else {
try container.encodeNil(forKey: ._endDate)
}
try container.encode(endDate, forKey: ._endDate)
try container.encode(creationDate, forKey: ._creationDate)
try container.encode(isPrivate, forKey: ._isPrivate)
if let groupStageFormat {
try container.encode(groupStageFormat, forKey: ._groupStageFormat)
} else {
try container.encodeNil(forKey: ._groupStageFormat)
}
if let roundFormat {
try container.encode(roundFormat, forKey: ._roundFormat)
} else {
try container.encodeNil(forKey: ._roundFormat)
}
if let loserRoundFormat {
try container.encode(loserRoundFormat, forKey: ._loserRoundFormat)
} else {
try container.encodeNil(forKey: ._loserRoundFormat)
}
try container.encode(groupStageFormat, forKey: ._groupStageFormat)
try container.encode(roundFormat, forKey: ._roundFormat)
try container.encode(loserRoundFormat, forKey: ._loserRoundFormat)
try container.encode(groupStageSortMode, forKey: ._groupStageSortMode)
try container.encode(groupStageCount, forKey: ._groupStageCount)
if let rankSourceDate {
try container.encode(rankSourceDate, forKey: ._rankSourceDate)
} else {
try container.encodeNil(forKey: ._rankSourceDate)
}
try container.encodeOptional(rankSourceDate, forKey: ._rankSourceDate)
try container.encode(dayDuration, forKey: ._dayDuration)
try container.encode(teamCount, forKey: ._teamCount)
try container.encode(teamSorting, forKey: ._teamSorting)
try container.encode(federalCategory, forKey: ._federalCategory)
try container.encode(federalLevelCategory, forKey: ._federalLevelCategory)
try container.encode(federalAgeCategory, forKey: ._federalAgeCategory)
if let closedRegistrationDate {
try container.encode(closedRegistrationDate, forKey: ._closedRegistrationDate)
} else {
try container.encodeNil(forKey: ._closedRegistrationDate)
}
try container.encodeOptional(closedRegistrationDate, forKey: ._closedRegistrationDate)
try container.encode(groupStageAdditionalQualified, forKey: ._groupStageAdditionalQualified)
try container.encode(courtCount, forKey: ._courtCount)
try container.encode(prioritizeClubMembers, forKey: ._prioritizeClubMembers)
try container.encode(qualifiedPerGroupStage, forKey: ._qualifiedPerGroupStage)
try container.encode(teamsPerGroupStage, forKey: ._teamsPerGroupStage)
if let entryFee {
try container.encode(entryFee, forKey: ._entryFee)
} else {
try container.encodeNil(forKey: ._entryFee)
}
try container.encode(entryFee, forKey: ._entryFee)
try self._encodePayment(container: &container)
try container.encode(additionalEstimationDuration, forKey: ._additionalEstimationDuration)

@ -185,84 +185,24 @@ class User: ModelObject, UserBase, Storable {
try container.encode(email, forKey: ._email)
try container.encode(clubs, forKey: ._clubs)
if let umpireCode = umpireCode {
try container.encode(umpireCode, forKey: ._umpireCode)
} else {
try container.encodeNil(forKey: ._umpireCode)
}
if let licenceId = licenceId {
try container.encode(licenceId, forKey: ._licenceId)
} else {
try container.encodeNil(forKey: ._licenceId)
}
try container.encodeOptional(umpireCode, forKey: ._umpireCode)
try container.encodeOptional(licenceId, forKey: ._licenceId)
try container.encode(firstName, forKey: ._firstName)
try container.encode(lastName, forKey: ._lastName)
if let phone = phone {
try container.encode(phone, forKey: ._phone)
} else {
try container.encodeNil(forKey: ._phone)
}
if let country = country {
try container.encode(country, forKey: ._country)
} else {
try container.encodeNil(forKey: ._country)
}
if let summonsMessageBody = summonsMessageBody {
try container.encode(summonsMessageBody, forKey: ._summonsMessageBody)
} else {
try container.encodeNil(forKey: ._summonsMessageBody)
}
if let summonsMessageSignature = summonsMessageSignature {
try container.encode(summonsMessageSignature, forKey: ._summonsMessageSignature)
} else {
try container.encodeNil(forKey: ._summonsMessageSignature)
}
if let summonsAvailablePaymentMethods = summonsAvailablePaymentMethods {
try container.encode(summonsAvailablePaymentMethods, forKey: ._summonsAvailablePaymentMethods)
} else {
try container.encodeNil(forKey: ._summonsAvailablePaymentMethods)
}
try container.encodeOptional(phone, forKey: ._phone)
try container.encodeOptional(country, forKey: ._country)
try container.encodeOptional(summonsMessageBody, forKey: ._summonsMessageBody)
try container.encodeOptional(summonsMessageSignature, forKey: ._summonsMessageSignature)
try container.encodeOptional(summonsAvailablePaymentMethods, forKey: ._summonsAvailablePaymentMethods)
try container.encode(summonsDisplayFormat, forKey: ._summonsDisplayFormat)
try container.encode(summonsDisplayEntryFee, forKey: ._summonsDisplayEntryFee)
try container.encode(summonsUseFullCustomMessage, forKey: ._summonsUseFullCustomMessage)
if let matchFormatsDefaultDuration = matchFormatsDefaultDuration {
try container.encode(matchFormatsDefaultDuration, forKey: ._matchFormatsDefaultDuration)
} else {
try container.encodeNil(forKey: ._matchFormatsDefaultDuration)
}
if let bracketMatchFormatPreference = bracketMatchFormatPreference {
try container.encode(bracketMatchFormatPreference, forKey: ._bracketMatchFormatPreference)
} else {
try container.encodeNil(forKey: ._bracketMatchFormatPreference)
}
if let groupStageMatchFormatPreference = groupStageMatchFormatPreference {
try container.encode(groupStageMatchFormatPreference, forKey: ._groupStageMatchFormatPreference)
} else {
try container.encodeNil(forKey: ._groupStageMatchFormatPreference)
}
if let loserBracketMatchFormatPreference = loserBracketMatchFormatPreference {
try container.encode(loserBracketMatchFormatPreference, forKey: ._loserBracketMatchFormatPreference)
} else {
try container.encodeNil(forKey: ._loserBracketMatchFormatPreference)
}
if let deviceId {
try container.encode(deviceId, forKey: ._deviceId)
} else {
try container.encodeNil(forKey: ._deviceId)
}
try container.encodeOptional(matchFormatsDefaultDuration, forKey: ._matchFormatsDefaultDuration)
try container.encodeOptional(bracketMatchFormatPreference, forKey: ._bracketMatchFormatPreference)
try container.encodeOptional(groupStageMatchFormatPreference, forKey: ._groupStageMatchFormatPreference)
try container.encodeOptional(loserBracketMatchFormatPreference, forKey: ._loserBracketMatchFormatPreference)
try container.encode(deviceId, forKey: ._deviceId)
try container.encode(loserBracketMode, forKey: ._loserBracketMode)
}

@ -27,14 +27,6 @@ extension KeyedDecodingContainer {
extension KeyedEncodingContainer {
mutating func encodeIfPresent<T: Encodable>(_ value: T?, forKey key: Key) throws {
guard let value else {
try self.encodeNil(forKey: key)
return
}
try self.encode(value, forKey: key)
}
mutating func encodeAndEncryptIfPresent(_ value: Data?, forKey key: Key) throws {
guard let value else {
try encodeNil(forKey: key)

@ -59,9 +59,9 @@ class Purchase: ModelObject, Storable {
try container.encodeAndEncryptIfPresent(self.user.data(using: .utf8), forKey: .user)
try container.encode(self.purchaseDate, forKey: .purchaseDate)
try container.encode(self.productId, forKey: .productId)
try container.encodeIfPresent(self.quantity, forKey: .quantity)
try container.encodeIfPresent(self.revocationDate, forKey: .revocationDate)
try container.encodeIfPresent(self.expirationDate, forKey: .expirationDate)
try container.encode(self.quantity, forKey: .quantity)
try container.encode(self.revocationDate, forKey: .revocationDate)
try container.encode(self.expirationDate, forKey: .expirationDate)
}
required init(from decoder: any Decoder) throws {

Loading…
Cancel
Save