Files
vapor-po/Sources/App/Controllers/View/UtilsViewController.swift

55 lines
1.6 KiB
Swift

import DatabaseClient
import Dependencies
import SharedModels
import Vapor
import VaporElementary
struct UtilsViewController: RouteCollection {
@Dependency(\.database) var database
func boot(routes: any RoutesBuilder) throws {
let route = routes.protected
route.group("select") {
$0.get("employee", use: employeeSelect(req:))
$0.get("vendor-branches", use: vendorBranchSelect(req:))
}
}
@Sendable
func employeeSelect(req: Request) async throws -> HTMLResponse {
let context = try req.query.decode(SelectQueryContext.self)
let employees = try await database.employees.fetchAll()
return await req.render { context.toHTML(employees: employees) }
}
@Sendable
func vendorBranchSelect(req: Request) async throws -> HTMLResponse {
let context = try req.query.decode(SelectQueryContext.self)
let branches = try await database.vendorBranches.fetchAllWithDetail()
return await req.render { context.toHTML(branches: branches) }
}
}
private struct SelectQueryContext: Content {
let context: SelectContext
func toHTML(employees: [Employee]) -> EmployeeSelect {
switch context {
case .purchaseOrderForm:
return .purchaseOrderForm(employees: employees)
case .purchaseOrderSearch:
return .purchaseOrderSearch(employees: employees)
}
}
func toHTML(branches: [VendorBranch.Detail]) -> VendorBranchSelect {
switch context {
case .purchaseOrderForm:
return .purchaseOrderForm(branches: branches)
case .purchaseOrderSearch:
return .purchaseOrderSearch(branches: branches)
}
}
}