mirror of
https://github.com/penpot/penpot.git
synced 2025-05-10 20:56:38 +02:00
✨ Add page-changes query.
This commit is contained in:
parent
f19a8e67e1
commit
517b50238e
3 changed files with 40 additions and 115 deletions
|
@ -81,52 +81,38 @@
|
||||||
(p/then' decode-row)))
|
(p/then' decode-row)))
|
||||||
|
|
||||||
|
|
||||||
|
;; --- Query: Page Changes
|
||||||
|
|
||||||
;; --- Query: Project Page History (by Page ID)
|
(def ^:private
|
||||||
|
sql:page-changes
|
||||||
|
"select pc.id,
|
||||||
|
pc.created_at,
|
||||||
|
pc.changes,
|
||||||
|
pc.revn
|
||||||
|
from page_change as pc
|
||||||
|
where pc.page_id=$1
|
||||||
|
order by pc.revn asc
|
||||||
|
limit $2
|
||||||
|
offset $3")
|
||||||
|
|
||||||
;; (def ^:private sql:generic-page-history
|
|
||||||
;; "select pph.*
|
|
||||||
;; from project_page_history as pph
|
|
||||||
;; where pph.page_id = $2
|
|
||||||
;; and pph.version < $3
|
|
||||||
;; order by pph.version < desc")
|
|
||||||
|
|
||||||
;; (def ^:private sql:page-history
|
(s/def ::skip ::us/integer)
|
||||||
;; (str "with history as (" sql:generic-page-history ")"
|
(s/def ::limit ::us/integer)
|
||||||
;; " select * from history limit $4"))
|
|
||||||
|
|
||||||
;; (def ^:private sql:pinned-page-history
|
(s/def ::page-changes
|
||||||
;; (str "with history as (" sql:generic-page-history ")"
|
(s/keys :req-un [::profile-id ::id ::skip ::limit]))
|
||||||
;; " select * from history where pinned = true limit $4"))
|
|
||||||
|
|
||||||
;; (s/def ::page-id ::us/uuid)
|
(defn retrieve-page-changes
|
||||||
;; (s/def ::max ::us/integer)
|
[conn id skip limit]
|
||||||
;; (s/def ::pinned ::us/boolean)
|
(-> (db/query conn [sql:page-changes id limit skip])
|
||||||
;; (s/def ::since ::us/integer)
|
(p/then' #(mapv decode-row %))))
|
||||||
|
|
||||||
;; (s/def ::project-page-snapshots
|
(sq/defquery ::page-changes
|
||||||
;; (s/keys :req-un [::page-id ::user]
|
[{:keys [profile-id id skip limit]}]
|
||||||
;; :opt-un [::max ::pinned ::since]))
|
(when *assert*
|
||||||
|
(-> (db/query db/pool [sql:page-changes id limit skip])
|
||||||
|
(p/then' #(mapv decode-row %)))))
|
||||||
|
|
||||||
;; (defn retrieve-page-snapshots
|
|
||||||
;; [conn {:keys [page-id user since max pinned] :or {since Long/MAX_VALUE max 10}}]
|
|
||||||
;; (let [sql (-> (sql/from ["project_page_snapshots" "ph"])
|
|
||||||
;; (sql/select "ph.*")
|
|
||||||
;; (sql/where ["ph.user_id = ?" user]
|
|
||||||
;; ["ph.page_id = ?" page-id]
|
|
||||||
;; ["ph.version < ?" since]
|
|
||||||
;; (when pinned
|
|
||||||
;; ["ph.pinned = ?" true]))
|
|
||||||
;; (sql/order "ph.version desc")
|
|
||||||
;; (sql/limit max))]
|
|
||||||
;; (-> (db/query conn (sql/fmt sql))
|
|
||||||
;; (p/then (partial mapv decode-row)))))
|
|
||||||
|
|
||||||
;; (sq/defquery ::project-page-snapshots
|
|
||||||
;; [{:keys [page-id user] :as params}]
|
|
||||||
;; (db/with-atomic [conn db/pool]
|
|
||||||
;; (p/do! (retrieve-page conn {:id page-id :user user})
|
|
||||||
;; (retrieve-page-snapshots conn params))))
|
|
||||||
|
|
||||||
;; --- Helpers
|
;; --- Helpers
|
||||||
|
|
||||||
|
|
|
@ -15,14 +15,17 @@
|
||||||
[clojure.pprint :refer [pprint]]
|
[clojure.pprint :refer [pprint]]
|
||||||
[clojure.test :as test]
|
[clojure.test :as test]
|
||||||
[clojure.java.io :as io]
|
[clojure.java.io :as io]
|
||||||
|
[uxbox.common.pages :as cp]
|
||||||
[clojure.repl :refer :all]
|
[clojure.repl :refer :all]
|
||||||
[criterium.core :refer [quick-bench bench with-progress-reporting]]
|
[criterium.core :refer [quick-bench bench with-progress-reporting]]
|
||||||
[clj-kondo.core :as kondo]
|
[clj-kondo.core :as kondo]
|
||||||
[promesa.core :as p]
|
[promesa.core :as p]
|
||||||
[promesa.exec :as px]
|
[promesa.exec :as px]
|
||||||
[uxbox.migrations]
|
[uxbox.migrations]
|
||||||
|
[uxbox.db :as db]
|
||||||
[uxbox.util.storage :as st]
|
[uxbox.util.storage :as st]
|
||||||
[uxbox.util.time :as tm]
|
[uxbox.util.time :as tm]
|
||||||
|
[uxbox.util.blob :as blob]
|
||||||
[mount.core :as mount]))
|
[mount.core :as mount]))
|
||||||
|
|
||||||
;; --- Benchmarking Tools
|
;; --- Benchmarking Tools
|
||||||
|
@ -86,80 +89,16 @@
|
||||||
'(promesa.core/let)]}}}})
|
'(promesa.core/let)]}}}})
|
||||||
(kondo/print!))))
|
(kondo/print!))))
|
||||||
|
|
||||||
(comment
|
|
||||||
{:version 1
|
|
||||||
:options {}
|
|
||||||
:shapes [:id1 :id2]
|
|
||||||
:canvas [:id3]
|
|
||||||
:shapes-by-id {:id1 {:canvas :id3} :id2 {} :id3 {}}})
|
|
||||||
|
|
||||||
|
;; (defn red
|
||||||
|
;; [items]
|
||||||
|
;; (as-> items $$
|
||||||
|
;; (reduce (fn [acc item]
|
||||||
|
;; (cp/process-changes acc (:changes item)))
|
||||||
|
;; cp/default-page-data
|
||||||
|
;; $$)))
|
||||||
|
|
||||||
(comment
|
;; (defn update-page-data
|
||||||
{:version 2
|
;; [id data]
|
||||||
:options {}
|
;; (let [data (blob/encode data)]
|
||||||
|
;; (db/query-one db/pool ["update page set data=$1 where id=$2" data id])))
|
||||||
:objects
|
|
||||||
{:root
|
|
||||||
{:type :frame
|
|
||||||
:shapes [:sid0 :frame-0]}
|
|
||||||
|
|
||||||
:frame0
|
|
||||||
{:type :frame
|
|
||||||
:parent :root
|
|
||||||
:shapes [:sid1 :sid2]}
|
|
||||||
|
|
||||||
:sid0
|
|
||||||
{:type :rect
|
|
||||||
:parent :root}
|
|
||||||
|
|
||||||
:sid1
|
|
||||||
{:type :rect
|
|
||||||
:parent :frame0}
|
|
||||||
|
|
||||||
:sid2
|
|
||||||
{:type :group
|
|
||||||
:shapes [:sid3 :sid4]
|
|
||||||
:parent :frame0}
|
|
||||||
|
|
||||||
:sid3
|
|
||||||
{:type :elipse
|
|
||||||
:parent :sid2}
|
|
||||||
|
|
||||||
:sid4
|
|
||||||
{:type :elipse
|
|
||||||
:parent :sid2}}})
|
|
||||||
|
|
||||||
(comment
|
|
||||||
{:version 3
|
|
||||||
:options {}
|
|
||||||
|
|
||||||
:rmap
|
|
||||||
{:id1 :root-frame
|
|
||||||
:id2 :root-frame
|
|
||||||
:id3 :frame-id-1
|
|
||||||
:id4 :frame-id-2
|
|
||||||
:id5 :frame-id-2
|
|
||||||
:id6 :frame-id-2}
|
|
||||||
|
|
||||||
:frames
|
|
||||||
{:root-frame
|
|
||||||
{:type :frame
|
|
||||||
:shapes [:id1 :id2]
|
|
||||||
:objects
|
|
||||||
{:id1 {:type :rect}
|
|
||||||
:id2 {:type :elipse}}}
|
|
||||||
|
|
||||||
:frame-id-1
|
|
||||||
{:type :frame
|
|
||||||
:shapes [:id3]
|
|
||||||
:objects
|
|
||||||
{:id3 {:type :path}}}
|
|
||||||
|
|
||||||
:frame-id-2
|
|
||||||
{:type :frame
|
|
||||||
:shapes [:id4]
|
|
||||||
:objects
|
|
||||||
{:id4 {:type :group
|
|
||||||
:shapes [:id5 :id6]}
|
|
||||||
:id5 {:type :path :parent :id4}
|
|
||||||
:id6 {:type :elipse :parent :id4}}}}})
|
|
||||||
|
|
|
@ -134,5 +134,5 @@
|
||||||
(for [[i item] (d/enumerate childs)]
|
(for [[i item] (d/enumerate childs)]
|
||||||
[:& shape-wrapper {:frame shape
|
[:& shape-wrapper {:frame shape
|
||||||
:shape item
|
:shape item
|
||||||
:key (str i (:id item))}])])))
|
:key (:id item)}])])))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue