🐛 Set correct modification date on projects on file move operation

This commit is contained in:
Andrey Antukh 2023-07-28 13:18:19 +02:00
parent 21430cbd7d
commit 1f98b168ba
2 changed files with 20 additions and 6 deletions

View file

@ -28,7 +28,8 @@
[app.util.services :as sv] [app.util.services :as sv]
[app.util.time :as dt] [app.util.time :as dt]
[clojure.spec.alpha :as s] [clojure.spec.alpha :as s]
[clojure.walk :as walk])) [clojure.walk :as walk]
[promesa.exec :as px]))
;; --- COMMAND: Duplicate File ;; --- COMMAND: Duplicate File
@ -322,6 +323,18 @@
;; delete possible broken relations on moved files ;; delete possible broken relations on moved files
(db/exec-one! conn [sql:delete-broken-relations pids]) (db/exec-one! conn [sql:delete-broken-relations pids])
;; Update the modification date of the all affected projects
;; ensuring that the destination project is the most recent one.
(doseq [project-id (into (list project-id) source)]
;; NOTE: as this is executed on virtual thread, sleeping does
;; not causes major issues, and allows an easy way to set a
;; trully different modification date to each file.
(px/sleep 10)
(db/update! conn :project
{:modified-at (dt/now)}
{:id project-id}))
nil)) nil))
(s/def ::ids (s/every ::us/uuid :kind set?)) (s/def ::ids (s/every ::us/uuid :kind set?))

View file

@ -10,7 +10,6 @@
[app.common.data.macros :as dm] [app.common.data.macros :as dm]
[app.common.pages :as cp] [app.common.pages :as cp]
[app.common.schema :as sm] [app.common.schema :as sm]
[app.common.time :as dt]
[app.common.uri :as u] [app.common.uri :as u]
[app.common.uuid :as uuid] [app.common.uuid :as uuid]
[app.config :as cf] [app.config :as cf]
@ -23,6 +22,7 @@
[app.util.dom :as dom] [app.util.dom :as dom]
[app.util.i18n :as i18n :refer [tr]] [app.util.i18n :as i18n :refer [tr]]
[app.util.router :as rt] [app.util.router :as rt]
[app.util.time :as dt]
[app.util.timers :as tm] [app.util.timers :as tm]
[app.util.webapi :as wapi] [app.util.webapi :as wapi]
[beicon.core :as rx] [beicon.core :as rx]
@ -863,6 +863,7 @@
[{:keys [ids project-id] :as params}] [{:keys [ids project-id] :as params}]
(dm/assert! (sm/set-of-uuid? ids)) (dm/assert! (sm/set-of-uuid? ids))
(dm/assert! (uuid? project-id)) (dm/assert! (uuid? project-id))
(ptk/reify ::move-files (ptk/reify ::move-files
IDeref IDeref
(-deref [_] (-deref [_]
@ -872,13 +873,13 @@
ptk/UpdateEvent ptk/UpdateEvent
(update [_ state] (update [_ state]
(let [origin-project (get-in state [:dashboard-files (first ids) :project-id]) (let [origin-project (get-in state [:dashboard-files (first ids) :project-id])
update-project (fn [project] update-project (fn [project delta]
(-> project (-> project
(update :count #(+ % (count ids))) (update :count #(+ % (count ids)))
(assoc :modified-at (dt/now))))] (assoc :modified-at (dt/plus (dt/now) {:milliseconds delta}))))]
(-> state (-> state
(d/update-in-when [:dashboard-projects origin-project] update-project) (d/update-in-when [:dashboard-projects origin-project] update-project 0)
(d/update-in-when [:dashboard-projects project-id] update-project)))) (d/update-in-when [:dashboard-projects project-id] update-project 10))))
ptk/WatchEvent ptk/WatchEvent
(watch [_ _ _] (watch [_ _ _]