feat: Working on search for purchase orders.

This commit is contained in:
2025-01-17 17:04:41 -05:00
parent be0b5a6033
commit 531a385dba
46 changed files with 283 additions and 817 deletions

View File

@@ -29,10 +29,42 @@ public extension DatabaseClient.PurchaseOrders {
throw NotFoundError()
}
try await model.delete(on: database)
} search: { search in
let query = PurchaseOrderModel.allQuery(on: database)
switch search {
case let .employee(employee):
guard let employee = try await EmployeeModel.query(on: database).group(.or, { group in
group.filter(\.$firstName ~~ employee).filter(\.$lastName ~~ employee)
}).first()
else { return Page<PurchaseOrder>.empty }
return try await query.filter(\.$createdFor.$id == employee.id!)
.paginate(.init(page: 1, per: 25))
.map { try $0.toDTO() }
case let .customer(search):
return try await query.filter(\.$customer ~~ search)
.paginate(.init(page: 1, per: 25))
.map { try $0.toDTO() }
case let .vendor(search):
guard let vendor = try await VendorModel.query(on: database).filter(\.$name ~~ search).first() else {
return .empty
}
// TODO: how to search for this??
return .init(items: [], metadata: .init(page: 1, per: 1, total: 0))
}
}
}
}
private extension Page where T == PurchaseOrder {
static var empty: Self {
.init(items: [], metadata: .init(page: 1, per: 1, total: 0))
}
}
extension PurchaseOrder {
struct Migrate: AsyncMigration {