55 lines
1.6 KiB
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)
|
|
}
|
|
}
|
|
}
|