feat: Refactoring routes to use shared / base routes.

This commit is contained in:
2025-01-21 16:00:16 -05:00
parent 20e58114c0
commit 66074d66f4
15 changed files with 445 additions and 227 deletions

View File

@@ -16,22 +16,22 @@ extension ApiRoute {
func handle(request: Request) async throws -> any AsyncResponseEncodable {
switch self {
case let .employee(route):
return try await route.handle(request: request)
return try await route.handleApiRequest(request: request)
case let .purchaseOrder(route):
return try await route.handle(request: request)
return try await route.handleApiRequest(request: request)
case let .user(route):
return try await route.handle(request: request)
return try await route.handleApiRequest(request: request)
case let .vendor(route):
return try await route.handle(request: request)
return try await route.handleApiRequest(request: request)
case let .vendorBranch(route):
return try await route.handle(request: request)
return try await route.handleApiRequest(request: request)
}
}
}
extension ApiRoute.EmployeeApiRoute {
extension BaseRoute.EmployeeRoute {
func handle(request: Request) async throws -> any AsyncResponseEncodable {
func handleApiRequest(request: Request) async throws -> any AsyncResponseEncodable {
@Dependency(\.database) var database
switch self {
case let .create(employee):
@@ -52,9 +52,9 @@ extension ApiRoute.EmployeeApiRoute {
}
}
extension ApiRoute.PurchaseOrderApiRoute {
extension BaseRoute.PurchaseOrderRoute {
func handle(request: Request) async throws -> any AsyncResponseEncodable {
func handleApiRequest(request: Request) async throws -> any AsyncResponseEncodable {
@Dependency(\.database.purchaseOrders) var purchaseOrders
switch self {
case .index:
@@ -76,9 +76,9 @@ extension ApiRoute.PurchaseOrderApiRoute {
}
// TODO: Add Login.
extension ApiRoute.UserApiRoute {
extension BaseRoute.UserRoute {
func handle(request: Request) async throws -> any AsyncResponseEncodable {
func handleApiRequest(request: Request) async throws -> any AsyncResponseEncodable {
@Dependency(\.database.users) var users
switch self {
case let .create(user):
@@ -101,8 +101,8 @@ extension ApiRoute.UserApiRoute {
}
}
extension ApiRoute.VendorApiRoute {
func handle(request: Request) async throws -> any AsyncResponseEncodable {
extension BaseRoute.VendorRoute {
func handleApiRequest(request: Request) async throws -> any AsyncResponseEncodable {
@Dependency(\.database.vendors) var vendors
switch self {
case let .create(vendor):
@@ -126,8 +126,8 @@ extension ApiRoute.VendorApiRoute {
}
}
extension ApiRoute.VendorBranchApiRoute {
func handle(request: Request) async throws -> any AsyncResponseEncodable {
extension BaseRoute.VendorBranchRoute {
func handleApiRequest(request: Request) async throws -> any AsyncResponseEncodable {
@Dependency(\.database.vendorBranches) var vendorBranches
switch self {
case let .create(branch):

View File

@@ -12,6 +12,7 @@ private let viewProtectedMiddleware: [any Middleware] = [
}
]
// TODO: Return `any HTML` instead to make testing the rendered documents easier.
extension SharedModels.ViewRoute {
var middleware: [any Middleware]? {
@@ -348,6 +349,31 @@ extension SharedModels.ViewRoute.VendorBranchRoute {
var middleware: [any Middleware]? { viewProtectedMiddleware }
// func html() async throws -> any HTML {
// @Dependency(\.database) var database
//
// switch self {
// case let .index(for: vendorID):
// guard let vendorID else {
// throw Abort(.badRequest, reason: "Vendor id not supplied")
// }
// return try await VendorBranchList(
// vendorID: vendorID,
// branches: database.vendorBranches.fetchAll(.for(vendorID: vendorID))
// )
//
// case let .select(context: context):
// return try await context.toHTML(branches: database.vendorBranches.fetchAllWithDetail())
//
// case let .create(branch):
// return try await VendorBranchList.Row(branch: database.vendorBranches.create(branch))
//
// case let .delete(id: id):
// try await database.vendorBranches.delete(id)
// return HTTPStatus.ok
// }
// }
func handle(request: Request) async throws -> any AsyncResponseEncodable {
@Dependency(\.database) var database