Files
vapor-po/Sources/App/DB/UserDB.swift

37 lines
960 B
Swift

import Fluent
import Vapor
struct UserDB {
func create(_ model: User.Create, on db: any Database) async throws -> User.DTO {
guard model.password == model.confirmPassword else {
throw Abort(.badRequest, reason: "Passwords did not match.")
}
let user = try User(
username: model.username,
email: model.email,
passwordHash: Bcrypt.hash(model.password)
)
try await user.save(on: db)
return user.toDTO()
}
func login(user: User, on db: any Database) async throws -> UserToken {
let token = try user.generateToken()
try await token.save(on: db)
return token
}
func fetchAll(on db: any Database) async throws -> [User.DTO] {
try await User.query(on: db).all().map { $0.toDTO() }
}
func delete(id: User.IDValue, on db: any Database) async throws {
guard let user = try await User.find(id, on: db) else {
throw Abort(.notFound)
}
try await user.delete(on: db)
}
}