mirror of
https://github.com/penpot/penpot.git
synced 2026-05-24 01:13:43 +00:00
124 lines
3.9 KiB
Clojure
124 lines
3.9 KiB
Clojure
;; This Source Code Form is subject to the terms of the Mozilla Public
|
|
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
;;
|
|
;; Copyright (c) KALEIDOS INC
|
|
|
|
(ns app.rpc.mutations.comments
|
|
(:require
|
|
[app.common.exceptions :as ex]
|
|
[app.common.spec :as us]
|
|
[app.db :as db]
|
|
[app.rpc.commands.comments :as cmd.comments]
|
|
[app.rpc.commands.files :as cmd.files]
|
|
[app.rpc.doc :as-alias doc]
|
|
[app.rpc.retry :as retry]
|
|
[app.util.services :as sv]
|
|
[clojure.spec.alpha :as s]))
|
|
|
|
;; --- Mutation: Create Comment Thread
|
|
|
|
(s/def ::create-comment-thread ::cmd.comments/create-comment-thread)
|
|
|
|
(sv/defmethod ::create-comment-thread
|
|
{::retry/max-retries 3
|
|
::retry/matches retry/conflict-db-insert?
|
|
::doc/added "1.0"
|
|
::doc/deprecated "1.15"}
|
|
[{:keys [pool] :as cfg} {:keys [profile-id file-id share-id] :as params}]
|
|
(db/with-atomic [conn pool]
|
|
(cmd.files/check-comment-permissions! conn profile-id file-id share-id)
|
|
(cmd.comments/create-comment-thread conn params)))
|
|
|
|
;; --- Mutation: Update Comment Thread Status
|
|
|
|
(s/def ::id ::us/uuid)
|
|
(s/def ::share-id (s/nilable ::us/uuid))
|
|
|
|
(s/def ::update-comment-thread-status ::cmd.comments/update-comment-thread-status)
|
|
|
|
(sv/defmethod ::update-comment-thread-status
|
|
{::doc/added "1.0"
|
|
::doc/deprecated "1.15"}
|
|
[{:keys [pool] :as cfg} {:keys [profile-id id share-id] :as params}]
|
|
(db/with-atomic [conn pool]
|
|
(let [cthr (db/get-by-id conn :comment-thread id {:for-update true})]
|
|
(when-not cthr (ex/raise :type :not-found))
|
|
(cmd.files/check-comment-permissions! conn profile-id (:file-id cthr) share-id)
|
|
(cmd.comments/upsert-comment-thread-status! conn profile-id (:id cthr)))))
|
|
|
|
|
|
;; --- Mutation: Update Comment Thread
|
|
|
|
(s/def ::update-comment-thread ::cmd.comments/update-comment-thread)
|
|
|
|
(sv/defmethod ::update-comment-thread
|
|
{::doc/added "1.0"
|
|
::doc/deprecated "1.15"}
|
|
[{:keys [pool] :as cfg} {:keys [profile-id id is-resolved share-id] :as params}]
|
|
(db/with-atomic [conn pool]
|
|
(let [thread (db/get-by-id conn :comment-thread id {:for-update true})]
|
|
(when-not thread
|
|
(ex/raise :type :not-found))
|
|
|
|
(cmd.files/check-comment-permissions! conn profile-id (:file-id thread) share-id)
|
|
(db/update! conn :comment-thread
|
|
{:is-resolved is-resolved}
|
|
{:id id})
|
|
nil)))
|
|
|
|
|
|
;; --- Mutation: Add Comment
|
|
|
|
(s/def ::add-comment ::cmd.comments/create-comment)
|
|
|
|
(sv/defmethod ::add-comment
|
|
{::doc/added "1.0"
|
|
::doc/deprecated "1.15"}
|
|
[{:keys [pool] :as cfg} params]
|
|
(db/with-atomic [conn pool]
|
|
(cmd.comments/create-comment conn params)))
|
|
|
|
|
|
;; --- Mutation: Update Comment
|
|
|
|
(s/def ::update-comment ::cmd.comments/update-comment)
|
|
|
|
(sv/defmethod ::update-comment
|
|
{::doc/added "1.0"
|
|
::doc/deprecated "1.15"}
|
|
[{:keys [pool] :as cfg} params]
|
|
(db/with-atomic [conn pool]
|
|
(cmd.comments/update-comment conn params)))
|
|
|
|
|
|
;; --- Mutation: Delete Comment Thread
|
|
|
|
(s/def ::delete-comment-thread ::cmd.comments/delete-comment-thread)
|
|
|
|
(sv/defmethod ::delete-comment-thread
|
|
{::doc/added "1.0"
|
|
::doc/deprecated "1.15"}
|
|
[{:keys [pool] :as cfg} {:keys [profile-id id] :as params}]
|
|
(db/with-atomic [conn pool]
|
|
(let [thread (db/get-by-id conn :comment-thread id {:for-update true})]
|
|
(when-not (= (:owner-id thread) profile-id)
|
|
(ex/raise :type :validation :code :not-allowed))
|
|
(db/delete! conn :comment-thread {:id id})
|
|
nil)))
|
|
|
|
|
|
;; --- Mutation: Delete comment
|
|
|
|
(s/def ::delete-comment ::cmd.comments/delete-comment)
|
|
|
|
(sv/defmethod ::delete-comment
|
|
{::doc/added "1.0"
|
|
::doc/deprecated "1.15"}
|
|
[{:keys [pool] :as cfg} {:keys [profile-id id] :as params}]
|
|
(db/with-atomic [conn pool]
|
|
(let [comment (db/get-by-id conn :comment id {:for-update true})]
|
|
(when-not (= (:owner-id comment) profile-id)
|
|
(ex/raise :type :validation :code :not-allowed))
|
|
(db/delete! conn :comment {:id id}))))
|