feat: Some updates to employee views.
This commit is contained in:
@@ -6,7 +6,6 @@ import Vapor
|
||||
struct EmployeeViewController: RouteCollection {
|
||||
|
||||
@Dependency(\.employees) var employees
|
||||
private let api = EmployeeApiController()
|
||||
|
||||
func boot(routes: any RoutesBuilder) throws {
|
||||
let protected = routes.protected.grouped("employees")
|
||||
@@ -17,7 +16,7 @@ struct EmployeeViewController: RouteCollection {
|
||||
$0.get(use: edit(req:))
|
||||
$0.delete(use: delete(req:))
|
||||
$0.put(use: update(req:))
|
||||
$0.post("toggle-active", use: toggleActive(req:))
|
||||
$0.patch("toggle-active", use: toggleActive(req:))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,33 +35,35 @@ struct EmployeeViewController: RouteCollection {
|
||||
|
||||
@Sendable
|
||||
func toggleActive(req: Request) async throws -> View {
|
||||
guard let employee = try await Employee.find(req.parameters.get("employeeID"), on: req.db) else {
|
||||
throw Abort(.notFound)
|
||||
guard let id = req.parameters.get("employeeID", as: Employee.IDValue.self) else {
|
||||
throw Abort(.badRequest, reason: "Employee id not supplied.")
|
||||
}
|
||||
employee.active.toggle()
|
||||
try await employee.save(on: req.db)
|
||||
let employees = try await employees.fetchAll()
|
||||
return try await req.view.render("employees/table", ["employees": employees])
|
||||
let employee = try await employees.toggleActive(id)
|
||||
return try await req.view.render("employees/table-row", employee)
|
||||
}
|
||||
|
||||
@Sendable
|
||||
func delete(req: Request) async throws -> View {
|
||||
_ = try await api.delete(req: req)
|
||||
let id = try req.requireEmployeeID()
|
||||
_ = try await employees.delete(id)
|
||||
let employees = try await employees.fetchAll()
|
||||
return try await req.view.render("employees/table", ["employees": employees])
|
||||
}
|
||||
|
||||
@Sendable
|
||||
func edit(req: Request) async throws -> View {
|
||||
guard let employee = try await Employee.find(req.parameters.get("employeeID"), on: req.db) else {
|
||||
guard let employee = try await employees.get(req.parameters.get("employeeID")) else {
|
||||
throw Abort(.notFound)
|
||||
}
|
||||
return try await req.view.render("employees/form", EmployeeFormCTX(employee: employee.toDTO()))
|
||||
return try await req.view.render("employees/form", EmployeeFormCTX(employee: employee))
|
||||
}
|
||||
|
||||
@Sendable
|
||||
func update(req: Request) async throws -> View {
|
||||
_ = try await api.update(req: req)
|
||||
let id = try req.requireEmployeeID()
|
||||
try Employee.Update.validate(content: req)
|
||||
let updates = try req.content.decode(Employee.Update.self)
|
||||
_ = try await employees.update(id, updates)
|
||||
return try await req.view.render("employees/index", EmployeesCTX(oob: true, db: employees))
|
||||
}
|
||||
|
||||
@@ -73,6 +74,15 @@ struct EmployeeViewController: RouteCollection {
|
||||
|
||||
}
|
||||
|
||||
private extension Request {
|
||||
func requireEmployeeID() throws -> Employee.IDValue {
|
||||
guard let id = parameters.get("employeeID", as: Employee.IDValue.self) else {
|
||||
throw Abort(.badRequest, reason: "Employee id not supplied")
|
||||
}
|
||||
return id
|
||||
}
|
||||
}
|
||||
|
||||
private struct EmployeesCTX: Content {
|
||||
let oob: Bool
|
||||
let employees: [Employee.DTO]
|
||||
|
||||
Reference in New Issue
Block a user