0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-04-01 01:21:21 -05:00

Add some redundancy to delete_object task

This commit is contained in:
Andrey Antukh 2024-06-25 11:54:52 +02:00
parent 3b5b81b08f
commit aa1cf3e03a

View file

@ -20,8 +20,13 @@
(defmethod delete-object :file (defmethod delete-object :file
[{:keys [::db/conn] :as cfg} {:keys [id deleted-at]}] [{:keys [::db/conn] :as cfg} {:keys [id deleted-at]}]
(l/trc :hint "marking for deletion" :rel "file" :id (str id))
(when-let [file (db/get* conn :file {:id id} {::db/remove-deleted false})] (when-let [file (db/get* conn :file {:id id} {::db/remove-deleted false})]
(l/trc :hint "marking for deletion" :rel "file" :id (str id))
(db/update! conn :file
{:deleted-at deleted-at}
{:id id}
{::db/return-keys false})
(when (and (:is-shared file) (when (and (:is-shared file)
(not *team-deletion*)) (not *team-deletion*))
;; NOTE: we don't prevent file deletion on absorb operation failure ;; NOTE: we don't prevent file deletion on absorb operation failure
@ -49,27 +54,39 @@
(defmethod delete-object :project (defmethod delete-object :project
[{:keys [::db/conn] :as cfg} {:keys [id deleted-at]}] [{:keys [::db/conn] :as cfg} {:keys [id deleted-at]}]
(l/trc :hint "marking for deletion" :rel "project" :id (str id)) (l/trc :hint "marking for deletion" :rel "project" :id (str id))
(doseq [file (db/update! conn :file (db/update! conn :project
{:deleted-at deleted-at} {:deleted-at deleted-at}
{:project-id id} {:id id}
{::db/return-keys [:id :deleted-at] {::db/return-keys false})
::db/many true})]
(delete-object cfg (assoc file :object :file)))) (doseq [file (db/query conn :file
{:project-id id}
{::db/columns [:id :deleted-at]})]
(delete-object cfg (assoc file
:object :file
:deleted-at deleted-at))))
(defmethod delete-object :team (defmethod delete-object :team
[{:keys [::db/conn] :as cfg} {:keys [id deleted-at]}] [{:keys [::db/conn] :as cfg} {:keys [id deleted-at]}]
(l/trc :hint "marking for deletion" :rel "team" :id (str id)) (l/trc :hint "marking for deletion" :rel "team" :id (str id))
(db/update! conn :team
{:deleted-at deleted-at}
{:id id}
{::db/return-keys false})
(db/update! conn :team-font-variant (db/update! conn :team-font-variant
{:deleted-at deleted-at} {:deleted-at deleted-at}
{:team-id id}) {:team-id id}
{::db/return-keys false})
(binding [*team-deletion* true] (binding [*team-deletion* true]
(doseq [project (db/update! conn :project (doseq [project (db/query conn :project
{:deleted-at deleted-at} {:team-id id}
{:team-id id} {::db/columns [:id :deleted-at]})]
{::db/return-keys [:id :deleted-at] (delete-object cfg (assoc project
::db/many true})] :object :project
(delete-object cfg (assoc project :object :project))))) :deleted-at deleted-at)))))
(defmethod delete-object :default (defmethod delete-object :default
[_cfg props] [_cfg props]