Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -142,14 +142,14 @@ class AuctionUploadRepositoryImpl: AuctionUploadRepository {
func fetchBids(auctionId: String) async -> Result<[AuctionBidModel], UploadError> {
do {
let snapshot = try await FirestoreConstants.BidsCollection
.document(auctionId)
.getDocument()
let auctionBids = try snapshot.data(as: [AuctionBidModel].self)
if auctionBids.isEmpty {
return .success([])
}
.getDocuments()

return .success(auctionBids)
let auctionBids: [AuctionBidModel] = snapshot.documents.compactMap { document in
try? document.data(as: AuctionBidModel.self)
}

let finalAuctionBids = auctionBids.filter { $0.auctionId.contains(auctionId)}
return .success(finalAuctionBids)

} catch {
return .failure(
Expand Down
2 changes: 2 additions & 0 deletions TorqueNet/Features/Auction/Domain/Model/AuctionBidModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ import FirebaseCore

struct AuctionBidModel: Identifiable, Codable {
let id: String
let auctionId: String
let bidUser: String
let bidAmount: Double
let bidTime: Timestamp

enum CodingKeys: String, CodingKey {
case id
case auctionId
case bidUser = "bid_user"
case bidAmount = "bid_amount"
case bidTime = "bid_time"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ class UploadAuctionUseCase {
}

func placeBid(
auctionId: String,
bidUser:String,
bidAmount:String,
) async -> Result<String, UploadError> {
Expand All @@ -208,6 +209,7 @@ class UploadAuctionUseCase {

let bidAuction = AuctionBidModel(
id:auctionBidId,
auctionId: auctionId,
bidUser:bidUser,
bidAmount:bidAmount,
bidTime: Timestamp(date: Date())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ struct AuctionCarDetailView: View {
onBidSubmitted: { amount in
Task{
await auctionDetailViewModel.placeBid(
auctionId: auctionId,
bidUser: settingsViewModel.currentUser?.name ?? "",
onSuccess: {
auctionDetailViewModel.auctionDetailsUiState.toast = Toast(style: .success, message: "Bid placed successfully")
Expand Down Expand Up @@ -291,7 +292,6 @@ struct AuctionCarDetailView: View {
}
}

// Key Specs
HStack(spacing: 20) {
if let auction = auction {
SpecBadge(icon: "speedometer", value: auction.mileage, unit: "miles")
Expand Down Expand Up @@ -323,7 +323,7 @@ struct AuctionCarDetailView: View {
Image(systemName: "arrow.up")
.foregroundColor(.green)
.font(.system(size: 12))
Text("\(auction?.bidCount) bids")
Text("\(auctionDetailViewModel.sortedBids.count) bids")
.font(.custom("Exo2-Medium", size: 12))
.foregroundColor(.theme.onSurfaceColor.opacity(0.7))
}
Expand All @@ -340,18 +340,19 @@ struct AuctionCarDetailView: View {
.font(.custom("Exo2-Bold", size: 20))
.foregroundColor(auctionDetailViewModel.auctionDetailsUiState.timeRemaining > 3600 ? .green : .orange)

HStack(spacing: 4) {
Circle()
.fill(.green)
.frame(width: 8, height: 8)
Text("Live Bidding")
.font(.custom("Exo2-Medium", size: 12))
.foregroundColor(.theme.onSurfaceColor.opacity(0.7))
if (auctionDetailViewModel.auctionDetailsUiState.fetchedAuction?.auctionStatus == "Ongoing"){
HStack(spacing: 4) {
Circle()
.fill(.green)
.frame(width: 8, height: 8)
Text("Live Bidding")
.font(.custom("Exo2-Medium", size: 12))
.foregroundColor(.theme.onSurfaceColor.opacity(0.7))
}
}
}
}

// Bid History Preview
bidHistoryPreview
}
.padding(20)
Expand Down Expand Up @@ -503,7 +504,7 @@ struct AuctionCarDetailView: View {

Spacer()

Text("\(auction?.rating.rounded())/10")
Text("\(auction?.rating.rounded() ?? 0)/10")
.font(.custom("Exo2-Bold", size: 18))
.foregroundColor(.green)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,13 @@ class AuctionDetailsViewModel: ObservableObject {
}

func placeBid(
auctionId:String,
bidUser:String,
onSuccess: () -> Void,
onFailure: (String) -> Void) async {

auctionDetailsUiState.auctionState = .isLoading
let result = await auctionUseCase.placeBid(bidUser: bidUser, bidAmount: auctionDetailsUiState.bidAmount)
let result = await auctionUseCase.placeBid(auctionId:auctionId,bidUser: bidUser, bidAmount: auctionDetailsUiState.bidAmount)

switch result {
case .success(let id):
Expand Down Expand Up @@ -85,10 +86,12 @@ class AuctionDetailsViewModel: ObservableObject {
switch result {
case .success(let bids):
self.auctionDetailsUiState.fetchedBids = bids
print ("Vm Fetched bids: \(bids)")
auctionDetailsUiState.auctionState = .good
onSuccess()
case .failure(let error):
let message = error.errorDescription?.description ?? "An unexpected error occurred."
print("FetchBids Error: \(message)")
auctionDetailsUiState.auctionState = .error(message)
auctionDetailsUiState.errorMessage = message
auctionDetailsUiState.showError = true
Expand Down