Оказывается, что Validatable
только добавляет ограничения, но не проверяет их самостоятельно. Таким образом, вместо предоставления Validatable
сообщения об ошибке вам нужно перехватить ошибку, проверить, что это за ошибка, а затем вернуть / выдать желаемое ответное сообщение. Хорошее место для этого - вызов .save()
для модели:
Следующий пример находится внутри обработчика маршрута POST /subscribe-to-newsletter
:
return try item.save(on: req).catchMap { error in
if error.localizedDescription.contains("uq:newsletter_list.email") {
throw Abort(.ok, reason: "You're already subscribed to newsletter")
}
throw Abort(.badRequest, reason: "error: \(error.localizedDescription)")
}