feat: Adds middleware to routes

This commit is contained in:
2025-01-19 14:20:51 -05:00
parent b23dc6bf07
commit 185ebbbc15
6 changed files with 158 additions and 37 deletions

View File

@@ -1,10 +1,30 @@
import DatabaseClient
import DatabaseClientLive
import Dependencies
import Elementary
import SharedModels
import Vapor
private let viewProtectedMiddleware: [any Middleware] = [
UserPasswordAuthenticator(),
UserSessionAuthenticator(),
User.redirectMiddleware { req in
"/login?next=\(req.url)"
}
]
extension SharedModels.ViewRoute {
var middleware: [any Middleware]? {
switch self {
case let .employee(route): return route.middleware
case .login: return nil
case let .purchaseOrder(route): return route.middleware
case let .user(route): return route.middleware
case let .vendor(route): return route.middleware
case let .vendorBranch(route): return route.middleware
}
}
func handle(request: Request) async throws -> any AsyncResponseEncodable {
@Dependency(\.database.users) var users
switch self {
@@ -68,6 +88,8 @@ extension SharedModels.ViewRoute.EmployeeRoute {
}
}
var middleware: [any Middleware]? { viewProtectedMiddleware }
func handle(request: Request) async throws -> any AsyncResponseEncodable {
@Dependency(\.database.employees) var employees
@@ -133,6 +155,8 @@ extension SharedModels.ViewRoute.PurchaseOrderRoute {
try await mainPage(html, page: 1, limit: 25)
}
var middleware: [any Middleware]? { viewProtectedMiddleware }
func handle(request: Vapor.Request) async throws -> any AsyncResponseEncodable {
@Dependency(\.database.purchaseOrders) var purchaseOrders
switch self {
@@ -220,6 +244,10 @@ extension SharedModels.ViewRoute.UserRoute {
}
}
var middleware: [any Middleware]? {
viewProtectedMiddleware
}
func handle(request: Request) async throws -> any AsyncResponseEncodable {
@Dependency(\.database.users) var users
switch self {
@@ -271,6 +299,8 @@ extension SharedModels.ViewRoute.VendorRoute {
}
}
var middleware: [any Middleware]? { viewProtectedMiddleware }
func handle(request: Request) async throws -> any AsyncResponseEncodable {
@Dependency(\.database) var database
@@ -318,6 +348,8 @@ extension SharedModels.ViewRoute.VendorRoute {
extension SharedModels.ViewRoute.VendorBranchRoute {
var middleware: [any Middleware]? { viewProtectedMiddleware }
func handle(request: Request) async throws -> any AsyncResponseEncodable {
@Dependency(\.database) var database