Fix adding a bet with API

pull/23/head
Emre KARTAL 1 year ago
parent 059b3fec74
commit 65c49e1b40

@ -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],

@ -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: [])
}
}
}

@ -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)

@ -22,6 +22,7 @@ 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] = []

@ -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"
}
}
}

@ -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
}

@ -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)
}
}

Loading…
Cancel
Save