Files
2026-01-26 00:37:35 +01:00

47 lines
1.2 KiB
Swift

//
// UserRepository.swift
// ExodaiAcademy
//
// Created by Exodai on 25/01/2026.
//
import Foundation
protocol UserRepository {
func find(id: UUID) async throws -> UserModel.Public?
func findByEmail(_ email: String) async throws -> UserModel.Public?
func findByUsername(_ username: String) async throws -> UserModel.Public?
func all() async throws -> [UserModel.Public]
}
import Fluent
struct FluentUserRepository: UserRepository {
let db: any FluentKit.Database
func find(id: UUID) async throws -> UserModel.Public? {
try await UserModel.find(id, on: db)?
.convertToPublic()
}
func findByEmail(_ email: String) async throws -> UserModel.Public? {
try await UserModel.query(on: db)
.filter(\.$email == email)
.first()?
.convertToPublic()
}
func findByUsername(_ username: String) async throws -> UserModel.Public? {
try await UserModel.query(on: db)
.filter(\.$username == username)
.first()?
.convertToPublic()
}
func all() async throws -> [UserModel.Public] {
try await UserModel.query(on: db)
.all()
.convertToPublic()
}
}