65 lines
1.8 KiB
Swift
65 lines
1.8 KiB
Swift
import DatabaseClientLive
|
|
import Dependencies
|
|
import Elementary
|
|
import ElementaryHTMX
|
|
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())
|
|
try app.register(collection: PurchaseOrderSearchViewController())
|
|
try app.register(collection: UtilsViewController())
|
|
|
|
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)
|
|
let context = try req.query.decode(LoginContext.self)
|
|
|
|
return await req.render {
|
|
MainPage(displayNav: true, route: .purchaseOrders) {
|
|
div(
|
|
.hx.get(context.next ?? "/purchase-orders"),
|
|
.hx.pushURL(true),
|
|
.hx.target("body"),
|
|
.hx.trigger(.event(.revealed)),
|
|
.hx.indicator(".hx-indicator")
|
|
) {
|
|
Img.spinner().attributes(.class("hx-indicator"))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private struct LoginContext: Content {
|
|
let next: String?
|
|
}
|