Как я могу отправить ответ о конфликте с идентификатором в clojure

Я определил метод, в котором я просто проверяю, где существует задание с определенным именем и статусом, в случае, если задание существует, я хочу отправить ответ о конфликте, но с идентификатором

(defn insert-job [name status req]
      (if (->> {:job-name name :status status}
               db/insert-job
               :amount
               pos? )
        (conflict)  ; here I want to send a response as conflicts with a particular id as Long
        (insert-job req)))

Как и в приведенном ниже методе, я могу создать ответ created как Long

(defn insert-job [req]
  (let [[errors job] (v/validate-job (:body req))]
    (if errors
      (unprocessable-entity {:errors errors})
      (let [id (db/insert-job job)]
        (created (format "/jobs/%d" id) {:id id})))))

Продолжение исключения приведения класса в clojure. У вас есть ссылка на репозиторий с этим кодом, или вы могли бы хотя бы объяснить, что делают функции v/validate-job, unprocessable-entity, created, db/insert-job? Нам пришлось много гадать в прошлый раз.

Martin Půda 31.01.2023 17:28
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Валидация полей ввода для базовой формы React
Валидация полей ввода для базовой формы React
В одном из моих проектов MERN Stack есть форма с именем, фамилией, контактным номером, адресом, электронной почтой, датой рождения, номером NIC, весом...
Пользовательские правила валидации в Laravel
Пользовательские правила валидации в Laravel
Если вы хотите создать свое собственное правило валидации, Laravel предоставляет возможность сделать это. Создайте правило с помощью следующей...
0
1
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

хорошо. это было бы так же просто, как

  1. обновите свой запрос, чтобы найти идентификатор задания, если он существует
  2. обновите свой код, чтобы на самом деле выбросить его.

в вашем файле запросов Husql:

-- :name find-job-id :? :1
select id from job_history 
where name = :name and status = :status 
limit 1;

в вашем репо:

(defn insert-job [name status rec]
  (if-let [id (some->> {:name name :status status}
                       (find-job-id db-spec)
                       :id)]
    (ring.util.http-response/conflict! 
      {:message "record already exists"
       :id id})

    ;; here do whatever you need for actual insertion
    ))

но ладно. Я бы настоятельно посоветовал вам прочитать что-нибудь о выбранном вами языке и библиотеках.

Другие вопросы по теме