From b4336f7ceb0f18d9609aec7881cc888b05880407 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Sun, 1 Dec 2019 17:47:42 +0100 Subject: [PATCH] :sparkles: Minor improvements on projects_roles table. --- backend/deps.edn | 1 - .../resources/migrations/0003.projects.sql | 37 +++++++++---------- backend/src/uxbox/fixtures.clj | 16 ++------ .../src/uxbox/services/queries/projects.clj | 6 +-- .../uxbox/services/queries/user_storage.clj | 2 +- 5 files changed, 25 insertions(+), 37 deletions(-) diff --git a/backend/deps.edn b/backend/deps.edn index 34931c8a1..83ce549d3 100644 --- a/backend/deps.edn +++ b/backend/deps.edn @@ -7,7 +7,6 @@ org.apache.logging.log4j/log4j-api {:mvn/version "2.12.1"} org.apache.logging.log4j/log4j-core {:mvn/version "2.12.1"} org.apache.logging.log4j/log4j-jul {:mvn/version "2.12.1"} - funcool/datoteka {:mvn/version "1.1.0"} expound/expound {:mvn/version "0.7.2"} instaparse/instaparse {:mvn/version "1.4.10"} diff --git a/backend/resources/migrations/0003.projects.sql b/backend/resources/migrations/0003.projects.sql index cc2b6b471..561d3c130 100644 --- a/backend/resources/migrations/0003.projects.sql +++ b/backend/resources/migrations/0003.projects.sql @@ -1,4 +1,4 @@ --- Table +-- Tables CREATE TABLE IF NOT EXISTS projects ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), @@ -11,7 +11,7 @@ CREATE TABLE IF NOT EXISTS projects ( name text NOT NULL ); -CREATE TABLE IF NOT EXISTS projects_roles ( +CREATE TABLE IF NOT EXISTS projects_users ( user_id uuid NOT NULL REFERENCES users(id) ON DELETE CASCADE, project_id uuid NOT NULL REFERENCES projects(id) ON DELETE CASCADE, @@ -23,29 +23,28 @@ CREATE TABLE IF NOT EXISTS projects_roles ( PRIMARY KEY (user_id, project_id) ); -CREATE TABLE IF NOT EXISTS project_shares ( - project_id uuid PRIMARY KEY REFERENCES projects(id) ON DELETE CASCADE, - - created_at timestamptz NOT NULL DEFAULT clock_timestamp(), - modified_at timestamptz NOT NULL DEFAULT clock_timestamp(), - - token text NOT NULL -); - -- Indexes CREATE INDEX projects_user_idx ON projects(user_id); -CREATE INDEX projects_roles_user_id_idx ON projects_roles(project_id); -CREATE INDEX projects_roles_project_id_idx ON projects_roles(user_id); - -CREATE UNIQUE INDEX projects_shares_token_idx ON project_shares(token); +CREATE INDEX projects_users_user_id_idx ON projects_users(project_id); +CREATE INDEX projects_users_project_id_idx ON projects_users(user_id); -- Triggers +CREATE OR REPLACE FUNCTION handle_project_insert() + RETURNS TRIGGER AS $$ + BEGIN + INSERT INTO projects_users (user_id, project_id, role) + VALUES (NEW.user_id, NEW.id, 'owner'); + + RETURN NEW; + END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER projects_on_insert_tgr + AFTER INSERT ON projects + FOR EACH ROW EXECUTE PROCEDURE handle_project_insert(); + CREATE TRIGGER projects_modified_at_tgr BEFORE UPDATE ON projects FOR EACH ROW EXECUTE PROCEDURE update_modified_at(); - -CREATE TRIGGER project_shares_modified_at_tgr -BEFORE UPDATE ON project_shares - FOR EACH ROW EXECUTE PROCEDURE update_modified_at(); diff --git a/backend/src/uxbox/fixtures.clj b/backend/src/uxbox/fixtures.clj index fca3f3230..7cf776b3d 100644 --- a/backend/src/uxbox/fixtures.clj +++ b/backend/src/uxbox/fixtures.clj @@ -48,21 +48,13 @@ values ($1, $2, $3) returning *;") -(def create-project-role-sql - "insert into projects_roles (project_id, user_id, role) - values ($1, $2, 'owner');") - (defn create-project [conn [pjid uid]] (println "create project" pjid "(for user=" uid ")") - (p/do! - (db/query-one conn [create-project-sql - (mk-uuid "project" pjid uid) - (mk-uuid "user" uid) - (str "sample project " pjid)]) - (db/query-one conn [create-project-role-sql - (mk-uuid "project" pjid uid) - (mk-uuid "user" uid)]))) + (db/query-one conn [create-project-sql + (mk-uuid "project" pjid uid) + (mk-uuid "user" uid) + (str "sample project " pjid)])) ;; --- Pages creation diff --git a/backend/src/uxbox/services/queries/projects.clj b/backend/src/uxbox/services/queries/projects.clj index ea6536d32..c3cfa47f6 100644 --- a/backend/src/uxbox/services/queries/projects.clj +++ b/backend/src/uxbox/services/queries/projects.clj @@ -36,12 +36,10 @@ where p.user_id = $1 order by p.created_at asc") -(s/def ::projects-query +(s/def ::projects (s/keys :req-un [::user])) -(sq/defquery :projects - {:doc "Query all projects" - :spec ::projects-query} +(sq/defquery ::projects [{:keys [user] :as params}] (-> (db/query db/pool [projects-sql user]) (p/then (fn [rows] diff --git a/backend/src/uxbox/services/queries/user_storage.clj b/backend/src/uxbox/services/queries/user_storage.clj index 68eedb9f9..49a316959 100644 --- a/backend/src/uxbox/services/queries/user_storage.clj +++ b/backend/src/uxbox/services/queries/user_storage.clj @@ -20,7 +20,7 @@ (cond-> row val (assoc :val (blob/decode val))))) -(s/def ::user-storage-item +(s/def ::user-storage-entry (s/keys :req-un [::key ::user])) (sq/defquery ::user-storage-entry