import DatabaseClientLive import Dependencies import Elementary import Fluent import SharedModels import Vapor import VaporElementary func routes(_ app: Application) throws { try app.register(collection: ApiController()) try app.register(collection: UserViewController()) try app.register(collection: VendorViewController()) try app.register(collection: EmployeeViewController()) try app.register(collection: PurchaseOrderViewController()) app.get { _ in HTMLResponse { MainPage(displayNav: false, route: .purchaseOrders) { div(.class("container")) { h1 { "iT WORKS" } } } } } app.get("login") { req in let context = try req.query.decode(LoginContext.self) return await req.render { MainPage(displayNav: false, route: .login) { UserForm(context: .login(next: context.next)) } } } app.post("login") { req in @Dependency(\.database.users) var users let loginForm = try req.content.decode(User.Login.self) let token = try await users.login(loginForm) let user = try await users.get(token.userID)! req.session.authenticate(user) return try await PurchaseOrderViewController().index(req: req) } let protected = app.grouped(UserPasswordAuthenticator(), UserSessionAuthenticator()) protected.get("me") { req in let user = try req.auth.require(User.self) return HTMLResponse { MainPage(displayNav: false, route: .purchaseOrders) { h1 { "You are logged in as: \(user.username)" } } } } } private struct LoginContext: Content { let next: String? }