feat: Begins breaking out database interfaces and api controllers into seperate items.

This commit is contained in:
2025-01-10 13:31:56 -05:00
parent 3f30327fd8
commit 88ee71cb68
14 changed files with 624 additions and 36 deletions

View File

@@ -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
)
}
}
}