Salut a tous,
Comment peut on retourner une erreur en fonction d’un futur sous Vapor ?
Avant de créer un utilisateur, je veux verifier si il est deja enregistré et si l’username choisit existe deja.
Sinon, retourner l’erreur correspondante.
Je n’arrive pas à trouver un moyen de tout imbriquer…
enum UserError {
case usernameTaken
case emailTaken
}
extension UserError: AbortError {
var description: String {
reason
}
var status: HTTPResponseStatus {
switch self {
case .usernameTaken: return .conflict
case .emailTaken: return .conflict
}
}
var reason: String {
switch self {
case .usernameTaken: return "Username already taken"
case .emailTaken: return "Email already registered"
}
}
}
private func checkIfUserExists(_ username: String, _ email: String, req: Request) -> EventLoopFuture<UserError?> {
// Si l'username existe deja -> Retourner l'erreur .usernameTaken
User.query(on: req.db)
.filter(\.$username == username)
.first()
.map { $0 != nil }
return req.eventLoop.future(error: UserError.usernameTaken)
// Si l'email existe deja -> Retourner l'erreur .emailTaken
User.query(on: req.db)
.filter(\.$email == email)
.first()
.map {
if $0 != nil { return UserError.emailTaken }
}
}
Merci d’avance !
Cedric