feat: Begins po detail.

This commit is contained in:
2025-01-10 17:13:43 -05:00
parent 455287fe1c
commit 59b6d46606
8 changed files with 156 additions and 7 deletions

View File

@@ -12,24 +12,36 @@ struct PurchaseOrderViewController: RouteCollection {
pos.get(use: index(req:))
pos.post(use: create(req:))
pos.group(":id") {
$0.get(use: detail(req:))
}
}
// TODO: Use pageinated version.
@Sendable
func index(req: Request) async throws -> View {
let purchaseOrders = try await api2.fetchAll(on: req.db)
let params = try? req.query.decode(PurchaseOrderIndex.self)
let purchaseOrdersPage = try await api2.fetchPage(params?.page ?? 1, limit: params?.limit ?? 50, on: req.db)
let branches = try await self.branches.getBranches(req: req)
let employees = try await employeesApi.index(req: req)
req.logger.debug("Branches: \(branches)")
return try await req.view.render(
"purchaseOrders/index",
PurchaseOrderCTX(
purchaseOrders: purchaseOrders,
page: purchaseOrdersPage,
form: .create(branches: branches, employees: employees)
)
)
}
@Sendable
func detail(req: Request) async throws -> View {
guard let id = req.parameters.get("id", as: PurchaseOrder.IDValue.self) else {
throw Abort(.badRequest, reason: "Id not supplied.")
}
let purchaseOrder = try await api2.get(id: id, on: req.db)
return try await req.view.render("purchaseOrders/detail", ["purchaseOrder": purchaseOrder])
}
@Sendable
func create(req: Request) async throws -> View {
try PurchaseOrder.FormCreate.validate(content: req)
@@ -40,9 +52,33 @@ struct PurchaseOrderViewController: RouteCollection {
}
}
private struct PurchaseOrderIndex: Content {
let page: Int?
let limit: Int?
}
private struct PurchaseOrderCTX: Content {
let purchaseOrders: [PurchaseOrder.DTO]
let page: Int
let limit: Int
let hasNext: Bool
let hasPrevious: Bool
let form: PurchaseOrderFormCTX?
init(page: Page<PurchaseOrder.DTO>, form: PurchaseOrderFormCTX?) {
self.purchaseOrders = page.items
self.page = page.metadata.page
self.limit = page.metadata.per
self.hasNext = page.metadata.hasNext
self.hasPrevious = page.metadata.page > 1
self.form = form
}
}
private extension PageMetadata {
var hasNext: Bool {
total > (page * per)
}
}
private struct PurchaseOrderFormCTX: Content {