Настраиваемое сообщение об ошибке проверки для модели Validatable - PullRequest
1 голос
/ 29 апреля 2020

Возможно ли иметь пользовательские сообщения об ошибках проверки для встроенного протокола Validatable?
У меня есть эта проверка:

static func validations() throws -> Validations<NewsletterListItem> {
    var validations = Validations(NewsletterListItem.self)
    validations.add(\.email, at: ["email"], .email)
    return validations
}

, и это выдает это сообщение:

{
  "error": true,
  "reason": "duplicate key value violates unique constraint \"uq:newsletter_list.email\""
}

... что я хотел бы улучшить.

1 Ответ

1 голос
/ 29 апреля 2020

Оказывается, что 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)")
}
...