// // 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() } }