From e3cd0d132ba31af1b2b9120299632dc83169dab6 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Wed, 11 Dec 2019 14:26:19 +0100 Subject: [PATCH] :sparkles: Minor improvements on project and files renaming. --- .../services/mutations/project_files.clj | 25 ++++++++------- .../src/uxbox/services/mutations/projects.clj | 28 +++++++++-------- .../uxbox/services/queries/project_files.clj | 31 ++++++++++--------- .../src/uxbox/services/queries/projects.clj | 2 +- backend/src/uxbox/services/util.clj | 2 +- .../tests/test_services_project_files.clj | 4 +-- .../uxbox/tests/test_services_projects.clj | 4 +-- 7 files changed, 52 insertions(+), 44 deletions(-) diff --git a/backend/src/uxbox/services/mutations/project_files.clj b/backend/src/uxbox/services/mutations/project_files.clj index 521aaf97b7..d3e7e294e2 100644 --- a/backend/src/uxbox/services/mutations/project_files.clj +++ b/backend/src/uxbox/services/mutations/project_files.clj @@ -94,25 +94,28 @@ values ($1, $2, $3, $4, 0, 1, $5) returning id"] (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])) -(sm/defmutation ::update-project-file +(sm/defmutation ::rename-project-file [{:keys [id user] :as params}] (db/with-atomic [conn db/pool] (check-edition-permissions! conn user id) - (update-file conn params))) + (rename-file conn params))) -(defn- update-file - [conn {:keys [id name user] :as params}] - (let [sql "update project_files - set name = $2 - where id = $1 - and deleted_at is null"] +(su/defstr sql:rename-file + "update project_files + set name = $2 + where id = $1 + 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]) (p/then' su/constantly-nil)))) diff --git a/backend/src/uxbox/services/mutations/projects.clj b/backend/src/uxbox/services/mutations/projects.clj index ea67552669..0b8392e15e 100644 --- a/backend/src/uxbox/services/mutations/projects.clj +++ b/backend/src/uxbox/services/mutations/projects.clj @@ -66,26 +66,28 @@ ;; --- Mutation: Update Project -(declare update-project) +(declare rename-project) -(s/def ::update-project +(s/def ::rename-project (s/keys :req-un [::user ::name ::id])) -(sm/defmutation ::update-project +(sm/defmutation ::rename-project [{:keys [id user] :as params}] (db/with-atomic [conn db/pool] (check-edition-permissions! conn user id) - (update-project conn params))) + (rename-project conn params))) -(defn update-project - [conn {:keys [id name user] :as params}] - (let [sql "update projects - set name = $3 - where id = $1 - and user_id = $2 - and deleted_at is null - returning *"] - (db/query-one conn [sql id user name]))) +(su/defstr sql:rename-project + "update projects + set name = $2 + where id = $1 + and deleted_at is null + returning *") + +(defn rename-project + [conn {:keys [id name] :as params}] + (let [sql sql:rename-project] + (db/query-one conn [sql id name]))) ;; --- Mutation: Delete Project diff --git a/backend/src/uxbox/services/queries/project_files.clj b/backend/src/uxbox/services/queries/project_files.clj index e09c13b556..7ca960e791 100644 --- a/backend/src/uxbox/services/queries/project_files.clj +++ b/backend/src/uxbox/services/queries/project_files.clj @@ -24,7 +24,7 @@ (s/def ::project-id ::us/uuid) (s/def ::user ::us/uuid) -(su/defsql sql:generic-project-files +(su/defstr sql:generic-project-files "select pf.*, array_agg(pp.id) as pages from project_files as pf @@ -35,6 +35,7 @@ and pu.can_edit = true group by pf.id") + ;; --- Query: Project Files (declare retrieve-recent-files) @@ -50,32 +51,33 @@ (retrieve-recent-files db/pool params) (retrieve-project-files db/pool params))) -(def ^:private sql:project-files - (str "with files as (" sql:generic-project-files ")" - " select * from files where project_id = $2" - " order by created_at asc")) +(su/defstr sql:project-files + "with files as (~{sql:generic-project-files}) + select * from files where project_id = $2 + 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 [conn {:keys [user project-id]}] (-> (db/query conn [sql:project-files user project-id]) (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 [conn {:keys [user]}] (-> (db/query conn [sql:recent-files user 20]) (p/then' (partial mapv decode-row)))) + ;; --- Query: Project File (By ID) -(def ^:private sql:project-file - (str "with files as (" sql:generic-project-files ")" - " select * from files where id = $2")) +(su/defstr sql:project-file + "with files as (~{sql:generic-project-files}) + select * from files where id = $2") (s/def ::project-file (s/keys :req-un [::user ::id])) @@ -85,6 +87,7 @@ (-> (db/query-one db/pool [sql:project-file user id]) (p/then' decode-row))) + ;; --- Helpers (defn decode-row diff --git a/backend/src/uxbox/services/queries/projects.clj b/backend/src/uxbox/services/queries/projects.clj index 0e189524f3..ffeb10ac98 100644 --- a/backend/src/uxbox/services/queries/projects.clj +++ b/backend/src/uxbox/services/queries/projects.clj @@ -25,7 +25,7 @@ ;; --- Query: Projects -(su/defsql sql:projects +(su/defstr sql:projects "select p.* from project_users as pu inner join projects as p on (p.id = pu.project_id) diff --git a/backend/src/uxbox/services/util.clj b/backend/src/uxbox/services/util.clj index 7d301fc210..32ded72963 100644 --- a/backend/src/uxbox/services/util.clj +++ b/backend/src/uxbox/services/util.clj @@ -25,7 +25,7 @@ ;; (log/info "service" type "processed in" elapsed) ;; data))}) -(defmacro defsql +(defmacro defstr [sym str] `(def ~sym (str/istr ~str))) diff --git a/backend/test/uxbox/tests/test_services_project_files.clj b/backend/test/uxbox/tests/test_services_project_files.clj index c3ab27ddb5..a06a1388df 100644 --- a/backend/test/uxbox/tests/test_services_project_files.clj +++ b/backend/test/uxbox/tests/test_services_project_files.clj @@ -42,11 +42,11 @@ (t/is (= (:name data) (get-in out [:result :name]))) #_(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) proj @(th/create-project db/pool (:id user) 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) :name "new file name" :user (:id user)} diff --git a/backend/test/uxbox/tests/test_services_projects.clj b/backend/test/uxbox/tests/test_services_projects.clj index 9d354fa768..365defa99a 100644 --- a/backend/test/uxbox/tests/test_services_projects.clj +++ b/backend/test/uxbox/tests/test_services_projects.clj @@ -33,10 +33,10 @@ (t/is (nil? (:error out))) (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) proj @(th/create-project db/pool (:id user) 1) - data {::sm/type :update-project + data {::sm/type :rename-project :id (:id proj) :name "test project mod" :user (:id user)}