From b700938539d15ea23e45f64c93949837d9da6762 Mon Sep 17 00:00:00 2001 From: "emre.kartal" Date: Thu, 30 May 2024 15:32:25 +0200 Subject: [PATCH] Add popular bet --- .../AllInApp/AllIn/Components/BetCard.swift | 5 ++-- .../AllIn/Components/TrendingBetCard.swift | 17 ++++++++++-- .../AllIn/ViewModels/BetViewModel.swift | 10 +++++++ Sources/AllInApp/AllIn/Views/BetView.swift | 15 ++++------- Sources/Api/Sources/Api/BetApiManager.swift | 26 +++++++++++++++++++ Sources/Api/Sources/Api/UserApiManager.swift | 2 +- .../Model/Sources/Model/BetDataManager.swift | 2 ++ Sources/Model/Sources/Model/Manager.swift | 6 +++++ .../Sources/StubLib/BetStubManager.swift | 4 +++ 9 files changed, 71 insertions(+), 16 deletions(-) diff --git a/Sources/AllInApp/AllIn/Components/BetCard.swift b/Sources/AllInApp/AllIn/Components/BetCard.swift index 2fb87a9..c261ed5 100644 --- a/Sources/AllInApp/AllIn/Components/BetCard.swift +++ b/Sources/AllInApp/AllIn/Components/BetCard.swift @@ -13,7 +13,7 @@ struct BetCard: View { var bet: Bet @State var showDetails: Bool = false @State var showParticipate: Bool = false - + var body: some View { VStack(spacing: 0) { VStack(alignment: .leading,spacing: 2){ @@ -63,12 +63,11 @@ struct BetCard: View { .cornerRadius(20, corners: [.bottomLeft,.bottomRight]) .border(width: 1, edges: [.top], color: AllInColors.delimiterGrey) } - .onTapGesture { showDetails.toggle() } .fullScreenCover(isPresented: $showDetails) { - DetailsView(isModalPresented: $showDetails, isModalParticipated: $showParticipate,id: bet.id) + DetailsView(isModalPresented: $showDetails, isModalParticipated: $showParticipate, id: bet.id) } } } diff --git a/Sources/AllInApp/AllIn/Components/TrendingBetCard.swift b/Sources/AllInApp/AllIn/Components/TrendingBetCard.swift index 82f39a7..de512af 100644 --- a/Sources/AllInApp/AllIn/Components/TrendingBetCard.swift +++ b/Sources/AllInApp/AllIn/Components/TrendingBetCard.swift @@ -6,8 +6,13 @@ // import SwiftUI +import Model struct TrendingBetCard: View { + + var bet: Bet + @State var showDetails: Bool = false + var body: some View { VStack(alignment: .leading) { HStack { @@ -20,7 +25,7 @@ struct TrendingBetCard: View { } .padding([.leading, .top], 10) - Text("Emre va réussir son TP de CI/CD mercredi?") + Text(bet.theme) .textStyle(weight: .heavy, color: .white, size: 17) .frame(height: 47) .multilineTextAlignment(.leading) @@ -61,6 +66,14 @@ struct TrendingBetCard: View { struct TrendingBetCard_Previews: PreviewProvider { static var previews: some View { - TrendingBetCard() + TrendingBetCard(bet: BinaryBet(theme: "Football - Finale de la Ligue des Champions", + phrase: "Le gagnant de la finale sera l'équipe avec le plus de tirs au but.", + endRegisterDate: Date().addingTimeInterval(86400), + endBetDate: Date().addingTimeInterval(172800), + isPublic: true, + status: .inProgress, + invited: [], + author: "Imri", + registered: [])) } } diff --git a/Sources/AllInApp/AllIn/ViewModels/BetViewModel.swift b/Sources/AllInApp/AllIn/ViewModels/BetViewModel.swift index 21d2541..4b73477 100644 --- a/Sources/AllInApp/AllIn/ViewModels/BetViewModel.swift +++ b/Sources/AllInApp/AllIn/ViewModels/BetViewModel.swift @@ -14,6 +14,7 @@ class BetViewModel: ObservableObject { @Inject var manager: Manager + @Published var popularBet: Bet? @Published private(set) var bets: [Bet] = [] @Published var betsOver: [BetDetail] = [] @Published var showingSheet: Bool = false @@ -25,6 +26,7 @@ class BetViewModel: ObservableObject { init() { getItems() + getPopularBet() } func getItems() { @@ -42,4 +44,12 @@ class BetViewModel: ObservableObject { } } } + + func getPopularBet() { + manager.getPopularBet() { bet in + DispatchQueue.main.async { + self.popularBet = bet + } + } + } } diff --git a/Sources/AllInApp/AllIn/Views/BetView.swift b/Sources/AllInApp/AllIn/Views/BetView.swift index 80e8630..cb154e3 100644 --- a/Sources/AllInApp/AllIn/Views/BetView.swift +++ b/Sources/AllInApp/AllIn/Views/BetView.swift @@ -20,7 +20,11 @@ struct BetView: View { ScrollView(showsIndicators: false) { LazyVStack(alignment: .leading, spacing: 0, pinnedViews: [.sectionHeaders]) { - TrendingBetCard().padding(.top,25).padding([.leading,.trailing],25) + if let bet = viewModel.popularBet { + TrendingBetCard(bet: bet) + .padding(.top,25) + .padding([.leading,.trailing],25) + } Section { VStack(spacing: 20){ @@ -62,14 +66,5 @@ struct BetView: View { } .edgesIgnoringSafeArea(.bottom) .background(AllInColors.backgroundColor) - - } -} - - -struct BetView_Previews: PreviewProvider { - static var previews: some View { - BetView(showMenu: .constant(false)) - .preferredColorScheme(.light) } } diff --git a/Sources/Api/Sources/Api/BetApiManager.swift b/Sources/Api/Sources/Api/BetApiManager.swift index 1259564..e764231 100644 --- a/Sources/Api/Sources/Api/BetApiManager.swift +++ b/Sources/Api/Sources/Api/BetApiManager.swift @@ -86,4 +86,30 @@ public struct BetApiManager: BetDataManager { } }.resume() } + + public func getPopularBet(completion: @escaping (Bet) -> Void) { + let url = URL(string: allInApi + "bets/popular")! + + var request = URLRequest(url: url) + request.httpMethod = "GET" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") + + URLSession.shared.dataTask(with: request) { data, response, error in + if let data = data { + print ("ALLIN : get popular bet") + do { + if let httpResponse = response as? HTTPURLResponse, let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] { + + if let bet = FactoryApiBet().toBet(from: json) { + completion(bet) + } + print(httpResponse.statusCode) + } + } catch { + print("Error parsing JSON: \(error)") + } + } + }.resume() + } } diff --git a/Sources/Api/Sources/Api/UserApiManager.swift b/Sources/Api/Sources/Api/UserApiManager.swift index 34a77c8..5859241 100644 --- a/Sources/Api/Sources/Api/UserApiManager.swift +++ b/Sources/Api/Sources/Api/UserApiManager.swift @@ -206,7 +206,7 @@ public struct UserApiManager: UserDataManager { URLSession.shared.dataTask(with: request) { data, response, error in if let data = data { - print ("ALLIN : get current bets") + print ("ALLIN : get old bets") do { if let httpResponse = response as? HTTPURLResponse, let jsonArray = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] { for json in jsonArray { diff --git a/Sources/Model/Sources/Model/BetDataManager.swift b/Sources/Model/Sources/Model/BetDataManager.swift index 200ccf4..d370b06 100644 --- a/Sources/Model/Sources/Model/BetDataManager.swift +++ b/Sources/Model/Sources/Model/BetDataManager.swift @@ -11,4 +11,6 @@ public protocol BetDataManager { func getBets(withIndex index: Int, withCount count: Int, filters: [BetFilter], completion: @escaping ([Bet]) -> Void) func getUsers(username: String) -> [User] func getBet(withId id: String, completion: @escaping (BetDetail) -> Void) + func getPopularBet(completion: @escaping (Bet) -> Void) + } diff --git a/Sources/Model/Sources/Model/Manager.swift b/Sources/Model/Sources/Model/Manager.swift index 4eb319e..de6ba3d 100644 --- a/Sources/Model/Sources/Model/Manager.swift +++ b/Sources/Model/Sources/Model/Manager.swift @@ -70,6 +70,12 @@ public struct Manager { } } + public func getPopularBet(completion: @escaping (Bet) -> Void) { + betDataManager.getPopularBet() { bet in + completion(bet) + } + } + public func getCurrentBets(withIndex index: Int, withCount count: Int, completion: @escaping ([BetDetail]) -> Void) { userDataManager.getCurrentBets(withIndex: index, withCount: count) { bets in completion(bets) diff --git a/Sources/StubLib/Sources/StubLib/BetStubManager.swift b/Sources/StubLib/Sources/StubLib/BetStubManager.swift index acd1460..f5cd6ef 100644 --- a/Sources/StubLib/Sources/StubLib/BetStubManager.swift +++ b/Sources/StubLib/Sources/StubLib/BetStubManager.swift @@ -29,6 +29,10 @@ public struct BetStubManager: BetDataManager { } } + public func getPopularBet(completion: @escaping (Bet) -> Void) { + + } + public func getABetDetail() -> BetDetail{ Stub.shared.betsDetail.first! }