feat: Begins breaking out database interfaces and api controllers into seperate items.
This commit is contained in:
@@ -3,6 +3,7 @@ import Vapor
|
||||
|
||||
struct PurchaseOrderViewController: RouteCollection {
|
||||
private let api = ApiController()
|
||||
private let api2 = PurchaseOrderDB()
|
||||
|
||||
func boot(routes: any RoutesBuilder) throws {
|
||||
let pos = routes.protected.grouped("purchase-orders")
|
||||
@@ -11,9 +12,10 @@ struct PurchaseOrderViewController: RouteCollection {
|
||||
pos.post(use: create(req:))
|
||||
}
|
||||
|
||||
// TODO: Use pageinated version.
|
||||
@Sendable
|
||||
func index(req: Request) async throws -> View {
|
||||
let purchaseOrders = try await api.purchaseOrdersIndex(req: req)
|
||||
let purchaseOrders = try await api2.fetchAll(on: req.db)
|
||||
let branches = try await api.getBranches(req: req)
|
||||
let employees = try await api.employeesIndex(req: req)
|
||||
req.logger.debug("Branches: \(branches)")
|
||||
@@ -30,31 +32,9 @@ struct PurchaseOrderViewController: RouteCollection {
|
||||
func create(req: Request) async throws -> View {
|
||||
try PurchaseOrder.FormCreate.validate(content: req)
|
||||
let createdById = try req.auth.require(User.self).requireID()
|
||||
let create = try req.content.decode(PurchaseOrder.FormCreate.self)
|
||||
|
||||
guard let employee = try await Employee.find(create.createdForID, on: req.db) else {
|
||||
throw Abort(.notFound, reason: "Employee not found.")
|
||||
}
|
||||
|
||||
guard employee.active else {
|
||||
throw Abort(.badRequest, reason: "Employee is not active, unable to generate a PO for in-active employees")
|
||||
}
|
||||
|
||||
let purchaseOrder = create.toModel(createdByID: createdById)
|
||||
try await purchaseOrder.save(on: req.db)
|
||||
let loaded = try await PurchaseOrder.query(on: req.db)
|
||||
.filter(\.$id == purchaseOrder.requireID())
|
||||
.with(\.$createdFor)
|
||||
.with(\.$createdBy)
|
||||
.with(\.$vendorBranch) {
|
||||
$0.with(\.$vendor)
|
||||
}
|
||||
.first()
|
||||
|
||||
return try await req.view.render("purchaseOrders/table-row", loaded)
|
||||
|
||||
// let purchaseOrders = try await api.purchaseOrdersIndex(req: req)
|
||||
// return try await req.view.render("purchaseOrders/table", ["purchaseOrders": purchaseOrders])
|
||||
let create = try req.content.decode(PurchaseOrder.FormCreate.self).toCreate()
|
||||
let purchaseOrder = try await api2.create(create, createdById: createdById, on: req.db)
|
||||
return try await req.view.render("purchaseOrders/table-row", purchaseOrder)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,6 +93,7 @@ private extension PurchaseOrder {
|
||||
let createdForID: Employee.IDValue
|
||||
let vendorBranchID: VendorBranch.IDValue
|
||||
|
||||
// TODO: Remove.
|
||||
func toModel(createdByID: User.IDValue) -> PurchaseOrder {
|
||||
.init(
|
||||
id: id,
|
||||
@@ -127,6 +108,18 @@ private extension PurchaseOrder {
|
||||
updatedAt: nil
|
||||
)
|
||||
}
|
||||
|
||||
func toCreate() -> PurchaseOrder.Create {
|
||||
.init(
|
||||
id: id,
|
||||
workOrder: workOrder != nil ? (workOrder == "" ? nil : Int(workOrder!)) : nil,
|
||||
materials: materials,
|
||||
customer: customer,
|
||||
truckStock: truckStock,
|
||||
createdForID: createdForID,
|
||||
vendorBranchID: vendorBranchID
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user