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