feat: Begins po detail.
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user