feat: working on detail views.

This commit is contained in:
2025-01-12 17:42:06 -05:00
parent 0e31d2c30c
commit 1ce369e156
27 changed files with 527 additions and 137 deletions

View File

@@ -14,13 +14,18 @@ public extension DependencyValues {
public struct VendorBranchDB: Sendable {
var create: @Sendable (VendorBranch.Create, Vendor.IDValue) async throws -> VendorBranch.DTO
var delete: @Sendable (VendorBranch.IDValue) async throws -> Void
var fetchAll: @Sendable (Bool) async throws -> [VendorBranch.DTO]
var fetchForVendor: @Sendable (Vendor.IDValue) async throws -> [VendorBranch.DTO]
var fetchAll: @Sendable (FetchRequest) async throws -> [VendorBranch.DTO]
var get: @Sendable (VendorBranch.IDValue) async throws -> VendorBranch.DTO?
var update: @Sendable (VendorBranch.IDValue, VendorBranch.Update) async throws -> VendorBranch.DTO
enum FetchRequest: Equatable {
case `default`
case `for`(vendorID: Vendor.IDValue)
case withVendor
}
func fetchAll() async throws -> [VendorBranch.DTO] {
try await fetchAll(false)
try await fetchAll(.default)
}
}
@@ -43,28 +48,30 @@ extension VendorBranchDB: TestDependencyKey {
}
try await branch.delete(on: db)
},
fetchAll: { withVendor in
fetchAll: { request in
var query = VendorBranch.query(on: db)
if withVendor == true {
switch request {
case .withVendor:
query = query.with(\.$vendor)
case let .for(vendorID: vendorID):
let branches = try await Vendor.query(on: db)
.filter(\.$id == vendorID)
.with(\.$branches)
.first()?
.branches
.map { $0.toDTO() }
guard let branches else { throw Abort(.badGateway, reason: "Vendor id not found.") }
return branches
case .default:
break
}
return try await query.all().map { $0.toDTO() }
},
fetchForVendor: { vendorID in
guard let vendor = try await Vendor.query(on: db)
.filter(\.$id == vendorID)
.with(\.$branches)
.first()
else {
throw Abort(.notFound)
}
return vendor.branches.map { $0.toDTO() }
},
get: { id in
try await VendorBranch.find(id, on: db).map { $0.toDTO() }
},
update: { id, updates in