From 65c49e1b404646a9dfb37070a12edf90e994546d Mon Sep 17 00:00:00 2001 From: "emre.kartal" Date: Tue, 6 Feb 2024 19:55:00 +0100 Subject: [PATCH] Fix adding a bet with API --- .../AllInApp/AllIn/Services/AuthService.swift | 1 + .../ViewModels/CreationBetViewModel.swift | 16 ++++++++++- .../AllIn/Views/CreationBetView.swift | 5 ++-- Sources/Api/Sources/Api/BetApiManager.swift | 3 ++- .../Sources/Api/Factory/FactoryApiBet.swift | 27 ++++++++++++++----- .../Sources/Model/Factory/FactoryBet.swift | 2 +- Sources/Model/Sources/Model/Manager.swift | 4 +-- 7 files changed, 44 insertions(+), 14 deletions(-) diff --git a/Sources/AllInApp/AllIn/Services/AuthService.swift b/Sources/AllInApp/AllIn/Services/AuthService.swift index 700fd21..1ba93af 100644 --- a/Sources/AllInApp/AllIn/Services/AuthService.swift +++ b/Sources/AllInApp/AllIn/Services/AuthService.swift @@ -70,6 +70,7 @@ class AuthService: IAuthService { URLSession.shared.uploadTask(with: request, from: jsonData) { data, response, error in print ("ALLIN : Process REGISTER") if let httpResponse = response as? HTTPURLResponse { + print(httpResponse.statusCode) if httpResponse.statusCode == 201 { if let data = data, let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any], diff --git a/Sources/AllInApp/AllIn/ViewModels/CreationBetViewModel.swift b/Sources/AllInApp/AllIn/ViewModels/CreationBetViewModel.swift index 718097e..623d5f5 100644 --- a/Sources/AllInApp/AllIn/ViewModels/CreationBetViewModel.swift +++ b/Sources/AllInApp/AllIn/ViewModels/CreationBetViewModel.swift @@ -19,6 +19,7 @@ class CreationBetViewModel: ObservableObject { @Published var endRegisterDate = Date() @Published var endBetDate = Date() @Published var betAdded = false + @Published var selectedOption = 0 @Published var themeFieldError: String? @Published var descriptionFieldError: String? @@ -37,7 +38,7 @@ class CreationBetViewModel: ObservableObject { resetAllFieldErrors() if let user = AppStateContainer.shared.user { - manager.addBet(theme: theme, description: description, endRegister: endRegisterDate, endBet: endBetDate, isPublic: isPublic, creator: user) { statusCode in + manager.addBet(bet: toBet(theme: theme, description: description, endRegister: endRegisterDate, endBet: endBetDate, isPublic: isPublic, status: .IN_PROGRESS, creator: user, type: selectedOption)) { statusCode in switch statusCode { case 201: self.betAdded = true @@ -108,4 +109,17 @@ class CreationBetViewModel: ObservableObject { self.showErrorMessage = true self.errorMessage = errorMessage } + + func toBet(theme: String, description: String, endRegister: Date, endBet: Date, isPublic: Bool, status: BetStatus, creator: User, type: Int) -> Bet { + switch type { + case 0: + return BinaryBet(theme: theme, phrase: description, endRegisterDate: endRegister, endBetDate: endBet, isPublic: isPublic, status: status, invited: [], author: creator, registered: []) + case 1: + return MatchBet(theme: theme, phrase: description, endRegisterDate: endRegister, endBetDate: endBet, isPublic: isPublic, status: status, invited: [], author: creator, registered: [], nameTeam1: "", nameTeam2: "") + case 2: + return CustomBet(theme: theme, phrase: description, endRegisterDate: endRegister, endBetDate: endBet, isPublic: isPublic, status: status, invited: [], author: creator, registered: []) + default: + return BinaryBet(theme: theme, phrase: description, endRegisterDate: endRegister, endBetDate: endBet, isPublic: isPublic, status: status, invited: [], author: creator, registered: []) + } + } } diff --git a/Sources/AllInApp/AllIn/Views/CreationBetView.swift b/Sources/AllInApp/AllIn/Views/CreationBetView.swift index 3add10e..98a367f 100644 --- a/Sources/AllInApp/AllIn/Views/CreationBetView.swift +++ b/Sources/AllInApp/AllIn/Views/CreationBetView.swift @@ -31,7 +31,6 @@ struct CreationBetView: View { @State private var response = "" @State private var values: [String] = [] - @State private var selectedOption = 0 let options: [(Int, String, String)] = [ (0, "questionMarkIcon", "Oui / Non"), (1, "footballIcon", "Pari sportif"), @@ -341,14 +340,14 @@ struct CreationBetView: View { VStack(spacing: 5) { VStack() { - DropDownMenu(selectedOption: $selectedOption, options: options) + DropDownMenu(selectedOption: $viewModel.selectedOption, options: options) } .padding([.bottom], 15) .frame(width: 340) Group { - switch selectedOption { + switch viewModel.selectedOption { case 0: Text("Les utilisateurs devront répondre au pari avec OUI ou NON.") .textStyle(weight: .bold, color: AllInColors.veryLightPurpleColor, size: 13) diff --git a/Sources/Api/Sources/Api/BetApiManager.swift b/Sources/Api/Sources/Api/BetApiManager.swift index 380d832..f1a697d 100644 --- a/Sources/Api/Sources/Api/BetApiManager.swift +++ b/Sources/Api/Sources/Api/BetApiManager.swift @@ -22,7 +22,8 @@ public struct BetApiManager: BetDataManager { var request = URLRequest(url: url) request.httpMethod = "GET" request.setValue("application/json", forHTTPHeaderField: "Content-Type") - + request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") + var bets: [Bet] = [] URLSession.shared.dataTask(with: request) { data, response, error in diff --git a/Sources/Api/Sources/Api/Factory/FactoryApiBet.swift b/Sources/Api/Sources/Api/Factory/FactoryApiBet.swift index 555d852..1fb92f5 100644 --- a/Sources/Api/Sources/Api/Factory/FactoryApiBet.swift +++ b/Sources/Api/Sources/Api/Factory/FactoryApiBet.swift @@ -25,6 +25,7 @@ public class FactoryApiBet: FactoryBet { "endBet": formatZonedDateTime(dateTime: bet.endBetDate), "isPrivate": String(bet.isPublic), "response": ["Yes","No"], + "type": betTypeString(fromType: String(describing: type(of: bet))) ] return json @@ -45,7 +46,8 @@ public class FactoryApiBet: FactoryBet { let endRegisterDateString = json["endRegistration"] as? String, let endBetDateString = json["endBet"] as? String, let isPublic = json["isPrivate"] as? Bool, - let createdBy = json["createdBy"] as? String else { + let createdBy = json["createdBy"] as? String, + let type = json["type"] as? String else { return nil } @@ -54,16 +56,16 @@ public class FactoryApiBet: FactoryBet { return nil } - return toBet(id: id, theme: theme, description: phrase, endRegister: endRegisterDate, endBet: endBetDate, isPublic: isPublic, status: .FINISHED, creator: User(username: createdBy, email: createdBy, nbCoins: 0, friends: []), type: 0) + return toBet(id: id, theme: theme, description: phrase, endRegister: endRegisterDate, endBet: endBetDate, isPublic: isPublic, status: .FINISHED, creator: User(username: createdBy, email: createdBy, nbCoins: 0, friends: []), type: type) } - public func toBet(id: String, theme: String, description: String, endRegister: Date, endBet: Date, isPublic: Bool, status: BetStatus, creator: User, type: Int) -> Bet { + public func toBet(id: String, theme: String, description: String, endRegister: Date, endBet: Date, isPublic: Bool, status: BetStatus, creator: User, type: String) -> Bet { switch type { - case 0: + case "BINARY": return BinaryBet(id: id, theme: theme, phrase: description, endRegisterDate: endRegister, endBetDate: endBet, isPublic: isPublic, status: status, invited: [], author: creator, registered: []) - case 1: + case "MATCH": return MatchBet(id: id, theme: theme, phrase: description, endRegisterDate: endRegister, endBetDate: endBet, isPublic: isPublic, status: status, invited: [], author: creator, registered: [], nameTeam1: "", nameTeam2: "") - case 2: + case "CUSTOM": return CustomBet(id: id, theme: theme, phrase: description, endRegisterDate: endRegister, endBetDate: endBet, isPublic: isPublic, status: status, invited: [], author: creator, registered: []) default: return BinaryBet(id: id, theme: theme, phrase: description, endRegisterDate: endRegister, endBetDate: endBet, isPublic: isPublic, status: status, invited: [], author: creator, registered: []) @@ -100,4 +102,17 @@ public class FactoryApiBet: FactoryBet { return Participation(id: id, stake: stake, date: Date(), response: answer, user: User(username: username, email: "Email", nbCoins: 0, friends: []), betId: betId) } + + public func betTypeString(fromType type: String) -> String { + switch type { + case "BinaryBet": + return "BINARY" + case "MatchBet": + return "MATCH" + case "CustomBet": + return "CUSTOM" + default: + return "CUSTOM" + } + } } diff --git a/Sources/Model/Sources/Model/Factory/FactoryBet.swift b/Sources/Model/Sources/Model/Factory/FactoryBet.swift index be18215..d4c65a4 100644 --- a/Sources/Model/Sources/Model/Factory/FactoryBet.swift +++ b/Sources/Model/Sources/Model/Factory/FactoryBet.swift @@ -11,5 +11,5 @@ public protocol FactoryBet { func toResponse(bet: Bet) -> [String: Any] func toBet(from json: [String: Any]) -> Bet? func toBetDetail(from json: [String: Any]) -> BetDetail? - func toBet(id: String, theme: String, description: String, endRegister: Date, endBet: Date, isPublic: Bool, status: BetStatus, creator: User, type: Int) -> Bet + func toBet(id: String, theme: String, description: String, endRegister: Date, endBet: Date, isPublic: Bool, status: BetStatus, creator: User, type: String) -> Bet } diff --git a/Sources/Model/Sources/Model/Manager.swift b/Sources/Model/Sources/Model/Manager.swift index c619123..5f80c08 100644 --- a/Sources/Model/Sources/Model/Manager.swift +++ b/Sources/Model/Sources/Model/Manager.swift @@ -16,8 +16,8 @@ public struct Manager { self.userDataManager = userDataManager } - public func addBet(theme: String, description: String, endRegister: Date, endBet: Date, isPublic: Bool, creator: User, completion : @escaping (Int)-> ()) { - userDataManager.addBet(bet: BinaryBet(theme: theme, phrase: description, endRegisterDate: endRegister, endBetDate: endBet, isPublic: isPublic, status: .IN_PROGRESS, invited: [], author: creator, registered: [])) { status in + public func addBet(bet: Bet, completion : @escaping (Int)-> ()) { + userDataManager.addBet(bet: bet) { status in completion(status) } }