♻️ Major refactor of page data structure.

In preparation to future collaborative edition.
This commit is contained in:
Andrey Antukh 2019-12-04 20:13:35 +01:00
parent 8c4bdc3f31
commit af62d949d8
33 changed files with 1025 additions and 1124 deletions

View file

@ -72,14 +72,16 @@
(defn create-page
[conn [pjid paid uid]]
(println "create page" paid "(for project=" pjid ", user=" uid ")")
(let [data {:shapes [{:id (mk-uuid "canvas" 1)
:name "Canvas-1"
:type :canvas
:page (mk-uuid "page" pjid paid uid)
:x1 200
:y1 200
:x2 1224
:y2 968}]}
(let [canvas {:id (mk-uuid "canvas" 1)
:name "Canvas-1"
:type :canvas
:x1 200
:y1 200
:x2 1224
:y2 968}
data {:shapes []
:canvas [(:id canvas)]
:shapes-by-id {(:id canvas) canvas}}
data (blob/encode data)
mdata (blob/encode {})]
(p/do!

View file

@ -42,7 +42,7 @@
(let [data (:body-params req)
user-agent (get-in req [:headers "user-agent"])]
(-> (sm/handle (assoc data ::sm/type :login))
(p/then #(session/create % user-agent))
(p/then #(session/create (:id %) user-agent))
(p/then' (fn [token]
{:status 204
:cookies {"auth-token" {:value token}}

View file

@ -30,8 +30,6 @@
:opt-un [::scope]))
(sm/defmutation ::login
{:doc "User login"
:spec ::login-params}
[{:keys [username password scope] :as params}]
(letfn [(check-password [user password]
(hashers/check password (:password user)))

View file

@ -27,6 +27,7 @@
(s/def ::user ::us/uuid)
(s/def ::project-id ::us/uuid)
(s/def ::metadata any?)
(s/def ::ordering ::us/number)
;; --- Mutation: Create Page
@ -41,14 +42,15 @@
(create-page db/pool params))
(defn create-page
[conn {:keys [id user project-id name data metadata] :as params}]
(let [sql "insert into pages (id, user_id, project_id, name, data, metadata, version)
values ($1, $2, $3, $4, $5, $6, 0)
[conn {:keys [id user project-id name ordering data metadata] :as params}]
(let [sql "insert into pages (id, user_id, project_id, name,
ordering, data, metadata, version)
values ($1, $2, $3, $4, $5, $6, $7, 0)
returning *"
id (or id (uuid/next))
data (blob/encode data)
mdata (blob/encode metadata)]
(-> (db/query-one db/pool [sql id user project-id name data mdata])
(-> (db/query-one db/pool [sql id user project-id name ordering data mdata])
(p/then' decode-row))))
;; --- Mutation: Update Page
@ -99,6 +101,21 @@
(update-history conn params)
(select-keys params [:id :version])))))))))
;; --- Mutation: Rename Page
(s/def ::rename-page
(s/keys :req-un [::id ::name ::user]))
(sm/defmutation ::rename-page
[{:keys [id name user]}]
(let [sql "update pages
set name = $3
where id = $1
and user_id = $2
and deleted_at is null"]
(-> (db/query-one db/pool [sql id user name])
(p/then su/constantly-nil))))
;; --- Mutation: Update Page Metadata
(s/def ::update-page-metadata

View file

@ -30,8 +30,6 @@
(s/keys :req-un [::user ::name]
:opt-un [::id]))
;; TODO: create role on project creation (maybe in DB?)
(sm/defmutation ::create-project
[{:keys [id user name] :as params}]
(let [id (or id (uuid/next))
@ -51,9 +49,7 @@
(s/def ::update-project
(s/keys :req-un [::user ::name ::id]))
(sm/defmutation :update-project
{:doc "Update project."
:spec ::update-project}
(sm/defmutation ::update-project
[{:keys [id name user] :as params}]
(let [sql "update projects
set name = $3
@ -68,9 +64,7 @@
(s/def ::delete-project
(s/keys :req-un [::id ::user]))
(sm/defmutation :delete-project
{:doc "Delete project"
:spec ::delete-project}
(sm/defmutation ::delete-project
[{:keys [id user] :as params}]
(let [sql "update projects
set deleted_at = clock_timestamp()