feat: Working on search for purchase orders.
This commit is contained in:
@@ -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 {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user