added UserController, UserDTO, CreateUser migration, User model

This commit is contained in:
wt committed 2026-06-10 15:34:39 +07:00
1 parent 6357258f45
commit 56d1988b17
13 files changed
+297 -159

No files matched your search

@@ -0,0 +1,62 @@
import Fluent
import Vapor
struct UserController: RouteCollection {
func boot(routes: any RoutesBuilder) throws {
let users = routes.grouped("users")
users.get(use: self.index)
users.post(use: self.create)
users.group(":userID") { user in
user.get(use: show)
user.put(use: update)
user.delete(use: self.delete)
}
}
@Sendable
func index(req: Request) async throws -> [UserDTO] {
try await User.query(on: req.db).all().map { $0.toDTO() }
}
@Sendable
func create(req: Request) async throws -> UserDTO {
let user = try req.content.decode(UserDTO.self).toModel()
try await user.save(on: req.db)
return user.toDTO()
}
@Sendable
func show(req: Request) async throws -> UserDTO {
guard let user = try await User.find(req.parameters.get("userID"), on: req.db) else {
throw Abort(.notFound)
}
return user.toDTO()
}
@Sendable
func update(req: Request) async throws -> UserDTO {
guard let user = try await User.find(req.parameters.get("userID"), on: req.db) else {
throw Abort(.notFound)
}
let updatedUser = try req.content.decode(User.self)
user.username = updatedUser.username
user.email = updatedUser.email
user.password = updatedUser.password
user.group = updatedUser.group
user.isSuperuser = updatedUser.isSuperuser
try await user.save(on: req.db)
return user.toDTO()
}
@Sendable
func delete(req: Request) async throws -> HTTPStatus {
guard let user = try await User.find(req.parameters.get("userID"), on: req.db) else {
throw Abort(.notFound)
}
try await user.delete(on: req.db)
return .noContent
}
}