feat: Begins implementing dependencies as db controllers.

This commit is contained in:
2025-01-10 21:33:17 -05:00
parent 59b6d46606
commit 6f206bbd82
7 changed files with 235 additions and 106 deletions

View File

@@ -1,9 +1,10 @@
import Dependencies
import Fluent
import Vapor
struct EmployeeApiController: RouteCollection {
private let employeeDB = EmployeeDB()
@Dependency(\.employees) var employees
func boot(routes: any RoutesBuilder) throws {
let protected = routes.apiProtected(route: "employees")
@@ -19,20 +20,20 @@ struct EmployeeApiController: RouteCollection {
@Sendable
func index(req: Request) async throws -> [Employee.DTO] {
let params = try req.query.decode(EmployeesIndexQuery.self)
return try await employeeDB.fetchAll(active: params.active, on: req.db)
return try await employees.fetchAll(params.active ?? false)
}
@Sendable
func create(req: Request) async throws -> Employee.DTO {
try Employee.Create.validate(content: req)
let create = try req.content.decode(Employee.Create.self)
return try await employeeDB.create(create, on: req.db)
return try await employees.create(create)
}
@Sendable
func get(req: Request) async throws -> Employee.DTO {
guard let id = req.parameters.get("employeeID", as: Employee.IDValue.self),
let employee = try await employeeDB.get(id: id, on: req.db)
let employee = try await employees.get(id)
else {
throw Abort(.notFound)
}
@@ -46,7 +47,7 @@ struct EmployeeApiController: RouteCollection {
throw Abort(.badRequest, reason: "Employee id value not provided")
}
let updates = try req.content.decode(Employee.Update.self)
return try await employeeDB.update(id: employeeID, with: updates, on: req.db)
return try await employees.update(employeeID, updates)
}
@Sendable
@@ -54,7 +55,7 @@ struct EmployeeApiController: RouteCollection {
guard let employeeID = req.parameters.get("employeeID", as: Employee.IDValue.self) else {
throw Abort(.badRequest, reason: "Employee id value not provided")
}
try await employeeDB.delete(id: employeeID, on: req.db)
try await employees.delete(employeeID)
return .ok
}
}