feat: Begins a generic htmx form context and template, integrates user form, begins views for vendor and purchase orders.

This commit is contained in:
2025-01-08 14:02:50 -05:00
parent 3557227430
commit 2b6e92a5c6
18 changed files with 493 additions and 93 deletions

View File

@@ -15,11 +15,12 @@ struct ViewController: RouteCollection {
// routes.get(use: index(req:))
routes.get("login", use: getLogin(req:))
routes.post(use: postLogin(req:))
routes.post("login", use: postLogin(req:))
// MARK: Protected routes.
protected.get(use: home(req:))
protected.get("**", use: catchAll(req:))
protected.post("logout", use: logout(req:))
// protected.get("users", use: users(req:))
try routes.register(collection: employees)
@@ -30,7 +31,7 @@ struct ViewController: RouteCollection {
func getLogin(req: Request) async throws -> View {
req.logger.debug("Login Query: \(req.url.query ?? "n/a")")
let params = try? req.query.decode(LoginParameter.self)
return try await req.view.render("login", UserFormCTX.signIn(route: params?.next ?? "/"))
return try await req.view.render("login", UserFormCTX.signIn(next: params?.next))
}
@Sendable
@@ -60,17 +61,32 @@ struct ViewController: RouteCollection {
@Sendable
func home(req: Request) async throws -> View {
let ctx = try req.query.decode(HomeCTX.self)
guard let route = ctx.route else {
return try await req.view.render("home", ctx)
var route: HomeRoute?
if let loginParams = try? req.query.decode(LoginParameter.self),
let next = loginParams.next.split(separator: "/").last
{
route = HomeRoute(rawValue: String(next))
} else if let routeString = req.parameters.getCatchall().first {
route = HomeRoute(rawValue: routeString)
}
switch route {
case .users:
return try await users.index(req: req)
case .employees:
return try await employees.index(req: req)
return try await req.view.render("home", HomeCTX(route: route))
}
@Sendable
func catchAll(req: Request) async throws -> View {
var route: HomeRoute?
if let loginParams = try? req.query.decode(LoginParameter.self),
let next = loginParams.next.split(separator: "/").last
{
route = HomeRoute(rawValue: String(next))
} else if let routeString = req.parameters.getCatchall().last {
route = HomeRoute(rawValue: routeString)
}
return try await req.view.render("home", HomeCTX(route: route))
}
}