feat: Working on layout / css.
This commit is contained in:
@@ -13,27 +13,68 @@ struct UserViewController: RouteCollection {
|
||||
// let users = routes.protected.grouped("users")
|
||||
let users = routes.grouped("users")
|
||||
users.get(use: index)
|
||||
users.post(use: create)
|
||||
users.get("create", use: form)
|
||||
users.group(":id") {
|
||||
$0.post(use: update)
|
||||
$0.get(use: get)
|
||||
$0.delete(use: delete)
|
||||
}
|
||||
}
|
||||
|
||||
@Sendable
|
||||
func index(req: Request) async throws -> HTMLResponse {
|
||||
HTMLResponse {
|
||||
MainPage(route: .users) {
|
||||
div(.class("container")) {
|
||||
UserDetail(user: nil)
|
||||
UserTable()
|
||||
}
|
||||
}
|
||||
try await req.render {
|
||||
try await mainPage(UserDetail(user: nil))
|
||||
}
|
||||
}
|
||||
|
||||
@Sendable
|
||||
func get(req: Request) async throws -> HTMLResponse {
|
||||
let user = try await users.get(req.ensureIDPathComponent())
|
||||
return HTMLResponse { UserDetail(user: user) }
|
||||
let detail = UserDetail(user: user)
|
||||
|
||||
guard req.isHtmxRequest else {
|
||||
return try await req.render { try await mainPage(detail) }
|
||||
}
|
||||
return await req.render { UserDetail(user: user) }
|
||||
}
|
||||
|
||||
@Sendable
|
||||
func create(req: Request) async throws -> HTMLResponse {
|
||||
_ = try await users.create(req.content.decode(User.Create.self))
|
||||
let users = try await users.fetchAll()
|
||||
// return req.redirect(to: "/users")
|
||||
return await req.render { UserTable(users: users) }
|
||||
}
|
||||
|
||||
@Sendable
|
||||
func delete(req: Request) async throws -> HTTPStatus {
|
||||
try await users.delete(req.ensureIDPathComponent())
|
||||
return .ok
|
||||
}
|
||||
|
||||
@Sendable
|
||||
func form(req: Request) async throws -> HTMLResponse {
|
||||
await req.render { UserForm(context: .create) }
|
||||
}
|
||||
|
||||
@Sendable
|
||||
func update(req: Request) async throws -> HTMLResponse {
|
||||
let updates = try req.content.decode(User.Update.self)
|
||||
req.logger.info("\(updates)")
|
||||
let user = try await users.update(req.ensureIDPathComponent(), updates)
|
||||
return await req.render { UserTable.Row(user: user) }
|
||||
}
|
||||
|
||||
private func mainPage<C: HTML>(_ html: C) async throws -> some SendableHTMLDocument where C: Sendable {
|
||||
let users = try await users.fetchAll()
|
||||
return MainPage(displayNav: true, route: .users) {
|
||||
div(.class("container")) {
|
||||
html
|
||||
UserTable(users: users)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user