Minor improvements on project and files renaming.

This commit is contained in:
Andrey Antukh 2019-12-11 14:26:19 +01:00
parent 44e120d382
commit e3cd0d132b
7 changed files with 52 additions and 44 deletions

View file

@ -94,25 +94,28 @@
values ($1, $2, $3, $4, 0, 1, $5) returning id"] values ($1, $2, $3, $4, 0, 1, $5) returning id"]
(db/query-one conn [sql id user file-id name data]))) (db/query-one conn [sql id user file-id name data])))
;; --- Mutation: Update Project ;; --- Mutation: Rename File
(declare update-file) (declare rename-file)
(s/def ::update-project-file (s/def ::rename-project-file
(s/keys :req-un [::user ::name ::id])) (s/keys :req-un [::user ::name ::id]))
(sm/defmutation ::update-project-file (sm/defmutation ::rename-project-file
[{:keys [id user] :as params}] [{:keys [id user] :as params}]
(db/with-atomic [conn db/pool] (db/with-atomic [conn db/pool]
(check-edition-permissions! conn user id) (check-edition-permissions! conn user id)
(update-file conn params))) (rename-file conn params)))
(defn- update-file (su/defstr sql:rename-file
[conn {:keys [id name user] :as params}] "update project_files
(let [sql "update project_files set name = $2
set name = $2 where id = $1
where id = $1 and deleted_at is null")
and deleted_at is null"]
(defn- rename-file
[conn {:keys [id name] :as params}]
(let [sql sql:rename-file]
(-> (db/query-one conn [sql id name]) (-> (db/query-one conn [sql id name])
(p/then' su/constantly-nil)))) (p/then' su/constantly-nil))))

View file

@ -66,26 +66,28 @@
;; --- Mutation: Update Project ;; --- Mutation: Update Project
(declare update-project) (declare rename-project)
(s/def ::update-project (s/def ::rename-project
(s/keys :req-un [::user ::name ::id])) (s/keys :req-un [::user ::name ::id]))
(sm/defmutation ::update-project (sm/defmutation ::rename-project
[{:keys [id user] :as params}] [{:keys [id user] :as params}]
(db/with-atomic [conn db/pool] (db/with-atomic [conn db/pool]
(check-edition-permissions! conn user id) (check-edition-permissions! conn user id)
(update-project conn params))) (rename-project conn params)))
(defn update-project (su/defstr sql:rename-project
[conn {:keys [id name user] :as params}] "update projects
(let [sql "update projects set name = $2
set name = $3 where id = $1
where id = $1 and deleted_at is null
and user_id = $2 returning *")
and deleted_at is null
returning *"] (defn rename-project
(db/query-one conn [sql id user name]))) [conn {:keys [id name] :as params}]
(let [sql sql:rename-project]
(db/query-one conn [sql id name])))
;; --- Mutation: Delete Project ;; --- Mutation: Delete Project

View file

@ -24,7 +24,7 @@
(s/def ::project-id ::us/uuid) (s/def ::project-id ::us/uuid)
(s/def ::user ::us/uuid) (s/def ::user ::us/uuid)
(su/defsql sql:generic-project-files (su/defstr sql:generic-project-files
"select pf.*, "select pf.*,
array_agg(pp.id) as pages array_agg(pp.id) as pages
from project_files as pf from project_files as pf
@ -35,6 +35,7 @@
and pu.can_edit = true and pu.can_edit = true
group by pf.id") group by pf.id")
;; --- Query: Project Files ;; --- Query: Project Files
(declare retrieve-recent-files) (declare retrieve-recent-files)
@ -50,32 +51,33 @@
(retrieve-recent-files db/pool params) (retrieve-recent-files db/pool params)
(retrieve-project-files db/pool params))) (retrieve-project-files db/pool params)))
(def ^:private sql:project-files (su/defstr sql:project-files
(str "with files as (" sql:generic-project-files ")" "with files as (~{sql:generic-project-files})
" select * from files where project_id = $2" select * from files where project_id = $2
" order by created_at asc")) order by created_at asc")
(su/defstr sql:recent-files
"with files as (~{sql:generic-project-files})
select * from files
order by modified_at desc
limit $2")
(defn retrieve-project-files (defn retrieve-project-files
[conn {:keys [user project-id]}] [conn {:keys [user project-id]}]
(-> (db/query conn [sql:project-files user project-id]) (-> (db/query conn [sql:project-files user project-id])
(p/then' (partial mapv decode-row)))) (p/then' (partial mapv decode-row))))
(su/defsql sql:recent-files
"with files as (~{sql:generic-project-files})
select * from files
order by modified_at desc
limit $2")
(defn retrieve-recent-files (defn retrieve-recent-files
[conn {:keys [user]}] [conn {:keys [user]}]
(-> (db/query conn [sql:recent-files user 20]) (-> (db/query conn [sql:recent-files user 20])
(p/then' (partial mapv decode-row)))) (p/then' (partial mapv decode-row))))
;; --- Query: Project File (By ID) ;; --- Query: Project File (By ID)
(def ^:private sql:project-file (su/defstr sql:project-file
(str "with files as (" sql:generic-project-files ")" "with files as (~{sql:generic-project-files})
" select * from files where id = $2")) select * from files where id = $2")
(s/def ::project-file (s/def ::project-file
(s/keys :req-un [::user ::id])) (s/keys :req-un [::user ::id]))
@ -85,6 +87,7 @@
(-> (db/query-one db/pool [sql:project-file user id]) (-> (db/query-one db/pool [sql:project-file user id])
(p/then' decode-row))) (p/then' decode-row)))
;; --- Helpers ;; --- Helpers
(defn decode-row (defn decode-row

View file

@ -25,7 +25,7 @@
;; --- Query: Projects ;; --- Query: Projects
(su/defsql sql:projects (su/defstr sql:projects
"select p.* "select p.*
from project_users as pu from project_users as pu
inner join projects as p on (p.id = pu.project_id) inner join projects as p on (p.id = pu.project_id)

View file

@ -25,7 +25,7 @@
;; (log/info "service" type "processed in" elapsed) ;; (log/info "service" type "processed in" elapsed)
;; data))}) ;; data))})
(defmacro defsql (defmacro defstr
[sym str] [sym str]
`(def ~sym (str/istr ~str))) `(def ~sym (str/istr ~str)))

View file

@ -42,11 +42,11 @@
(t/is (= (:name data) (get-in out [:result :name]))) (t/is (= (:name data) (get-in out [:result :name])))
#_(t/is (= (:project-id data) (get-in out [:result :project-id]))))) #_(t/is (= (:project-id data) (get-in out [:result :project-id])))))
(t/deftest mutation-update-project-file (t/deftest mutation-rename-project-file
(let [user @(th/create-user db/pool 1) (let [user @(th/create-user db/pool 1)
proj @(th/create-project db/pool (:id user) 1) proj @(th/create-project db/pool (:id user) 1)
pf @(th/create-project-file db/pool (:id user) (:id proj) 1) pf @(th/create-project-file db/pool (:id user) (:id proj) 1)
data {::sm/type :update-project-file data {::sm/type :rename-project-file
:id (:id pf) :id (:id pf)
:name "new file name" :name "new file name"
:user (:id user)} :user (:id user)}

View file

@ -33,10 +33,10 @@
(t/is (nil? (:error out))) (t/is (nil? (:error out)))
(t/is (= (:name data) (get-in out [:result :name]))))) (t/is (= (:name data) (get-in out [:result :name])))))
(t/deftest mutation-update-project (t/deftest mutation-rename-project
(let [user @(th/create-user db/pool 1) (let [user @(th/create-user db/pool 1)
proj @(th/create-project db/pool (:id user) 1) proj @(th/create-project db/pool (:id user) 1)
data {::sm/type :update-project data {::sm/type :rename-project
:id (:id proj) :id (:id proj)
:name "test project mod" :name "test project mod"
:user (:id user)} :user (:id user)}