47 lines
1.2 KiB
Swift
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()
|
|
}
|
|
}
|