Initial commit
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
//
|
||||
// UserAuthRepository.swift
|
||||
// ExodaiAcademy
|
||||
//
|
||||
// Created by Exodai on 25/01/2026.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
protocol UserAuthRepository {
|
||||
func findByEmail(_ email: String) async throws -> UserModel?
|
||||
func findByUsername(_ username: String) async throws -> UserModel?
|
||||
func create(
|
||||
username: String,
|
||||
email: String,
|
||||
passwordHash: String,
|
||||
role: Role
|
||||
) async throws -> UserModel
|
||||
func updatePassword(userID: UUID, passwordHash: String) async throws
|
||||
func delete(userID: UUID) async throws
|
||||
}
|
||||
|
||||
import Fluent
|
||||
import Vapor
|
||||
|
||||
struct FluentUserAuthRepository: UserAuthRepository {
|
||||
let db: any FluentKit.Database
|
||||
|
||||
func findByEmail(_ email: String) async throws -> UserModel? {
|
||||
try await UserModel.query(on: db)
|
||||
.filter(\.$email == email)
|
||||
.first()
|
||||
}
|
||||
|
||||
func findByUsername(_ username: String) async throws -> UserModel? {
|
||||
try await UserModel.query(on: db)
|
||||
.filter(\.$username == username)
|
||||
.first()
|
||||
}
|
||||
|
||||
func create(username: String, email: String, passwordHash: String, role: Role) async throws -> UserModel {
|
||||
let user = UserModel(
|
||||
username: username,
|
||||
email: email,
|
||||
password: passwordHash,
|
||||
role: role
|
||||
)
|
||||
|
||||
try await user.create(on: db)
|
||||
return user
|
||||
}
|
||||
|
||||
func updatePassword(userID: UUID, passwordHash: String) async throws {
|
||||
guard let user = try await UserModel.find(userID, on: db) else {
|
||||
throw Abort(.notFound)
|
||||
}
|
||||
|
||||
user.password = passwordHash
|
||||
try await user.save(on: db)
|
||||
}
|
||||
|
||||
func delete(userID: UUID) async throws {
|
||||
try await UserModel.find(userID, on: db)?
|
||||
.delete(on: db)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user