|
|
|
@ -391,7 +391,7 @@ final class Tournament : ModelObject, Storable { |
|
|
|
// MARK: - |
|
|
|
// MARK: - |
|
|
|
|
|
|
|
|
|
|
|
/// Warning: if the enum has more than 10 cases, the payment algo is broken |
|
|
|
/// Warning: if the enum has more than 10 cases, the payment algo is broken |
|
|
|
enum TournamentPayment: Int, CaseIterable { |
|
|
|
enum TournamentPayment: Int, Codable, CaseIterable { |
|
|
|
case free, unit, subscriptionUnit, unlimited |
|
|
|
case free, unit, subscriptionUnit, unlimited |
|
|
|
|
|
|
|
|
|
|
|
var isSubscription: Bool { |
|
|
|
var isSubscription: Bool { |
|
|
|
@ -2022,16 +2022,32 @@ defer { |
|
|
|
case cantPayTournament |
|
|
|
case cantPayTournament |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func payIfNecessary() throws { |
|
|
|
private let userCanPayCall: ServiceCall = ServiceCall(path: "can-pay-tournament/", method: .post, requiresToken: true) |
|
|
|
|
|
|
|
struct ClubPayload: Codable { |
|
|
|
|
|
|
|
var club: String |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
struct PaymentReturn: Codable { |
|
|
|
|
|
|
|
var payment: TournamentPayment? |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func payIfNecessary() async throws { |
|
|
|
if self.payment != nil { return } |
|
|
|
if self.payment != nil { return } |
|
|
|
if let payment = Guard.main.paymentForNewTournament() { |
|
|
|
if let payment = Guard.main.paymentForNewTournament() { |
|
|
|
self.payment = payment |
|
|
|
self.payment = payment |
|
|
|
try DataStore.shared.tournaments.addOrUpdate(instance: self) |
|
|
|
try DataStore.shared.tournaments.addOrUpdate(instance: self) |
|
|
|
return |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let services = try StoreCenter.main.service() |
|
|
|
|
|
|
|
if let clubId = self.club()?.id { |
|
|
|
|
|
|
|
let pr: PaymentReturn = try await services.runCall(userCanPayCall, payload: ClubPayload(club: clubId)) |
|
|
|
|
|
|
|
self.payment = pr.payment |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
throw PaymentError.cantPayTournament |
|
|
|
throw PaymentError.cantPayTournament |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
fileprivate extension Bool { |
|
|
|
fileprivate extension Bool { |
|
|
|
|