mirror of
https://github.com/penpot/penpot.git
synced 2025-03-11 23:31:21 -05:00
✨ Minor improvements on projects_roles table.
This commit is contained in:
parent
b66bc02098
commit
b4336f7ceb
5 changed files with 25 additions and 37 deletions
|
@ -7,7 +7,6 @@
|
||||||
org.apache.logging.log4j/log4j-api {:mvn/version "2.12.1"}
|
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-core {:mvn/version "2.12.1"}
|
||||||
org.apache.logging.log4j/log4j-jul {:mvn/version "2.12.1"}
|
org.apache.logging.log4j/log4j-jul {:mvn/version "2.12.1"}
|
||||||
|
|
||||||
funcool/datoteka {:mvn/version "1.1.0"}
|
funcool/datoteka {:mvn/version "1.1.0"}
|
||||||
expound/expound {:mvn/version "0.7.2"}
|
expound/expound {:mvn/version "0.7.2"}
|
||||||
instaparse/instaparse {:mvn/version "1.4.10"}
|
instaparse/instaparse {:mvn/version "1.4.10"}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
-- Table
|
-- Tables
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS projects (
|
CREATE TABLE IF NOT EXISTS projects (
|
||||||
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
|
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||||
|
@ -11,7 +11,7 @@ CREATE TABLE IF NOT EXISTS projects (
|
||||||
name text NOT NULL
|
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,
|
user_id uuid NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||||
project_id uuid NOT NULL REFERENCES projects(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)
|
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
|
-- Indexes
|
||||||
|
|
||||||
CREATE INDEX projects_user_idx ON projects(user_id);
|
CREATE INDEX projects_user_idx ON projects(user_id);
|
||||||
CREATE INDEX projects_roles_user_id_idx ON projects_roles(project_id);
|
CREATE INDEX projects_users_user_id_idx ON projects_users(project_id);
|
||||||
CREATE INDEX projects_roles_project_id_idx ON projects_roles(user_id);
|
CREATE INDEX projects_users_project_id_idx ON projects_users(user_id);
|
||||||
|
|
||||||
CREATE UNIQUE INDEX projects_shares_token_idx ON project_shares(token);
|
|
||||||
|
|
||||||
-- Triggers
|
-- 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
|
CREATE TRIGGER projects_modified_at_tgr
|
||||||
BEFORE UPDATE ON projects
|
BEFORE UPDATE ON projects
|
||||||
FOR EACH ROW EXECUTE PROCEDURE update_modified_at();
|
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();
|
|
||||||
|
|
|
@ -48,21 +48,13 @@
|
||||||
values ($1, $2, $3)
|
values ($1, $2, $3)
|
||||||
returning *;")
|
returning *;")
|
||||||
|
|
||||||
(def create-project-role-sql
|
|
||||||
"insert into projects_roles (project_id, user_id, role)
|
|
||||||
values ($1, $2, 'owner');")
|
|
||||||
|
|
||||||
(defn create-project
|
(defn create-project
|
||||||
[conn [pjid uid]]
|
[conn [pjid uid]]
|
||||||
(println "create project" pjid "(for user=" uid ")")
|
(println "create project" pjid "(for user=" uid ")")
|
||||||
(p/do!
|
|
||||||
(db/query-one conn [create-project-sql
|
(db/query-one conn [create-project-sql
|
||||||
(mk-uuid "project" pjid uid)
|
(mk-uuid "project" pjid uid)
|
||||||
(mk-uuid "user" uid)
|
(mk-uuid "user" uid)
|
||||||
(str "sample project " pjid)])
|
(str "sample project " pjid)]))
|
||||||
(db/query-one conn [create-project-role-sql
|
|
||||||
(mk-uuid "project" pjid uid)
|
|
||||||
(mk-uuid "user" uid)])))
|
|
||||||
|
|
||||||
;; --- Pages creation
|
;; --- Pages creation
|
||||||
|
|
||||||
|
|
|
@ -36,12 +36,10 @@
|
||||||
where p.user_id = $1
|
where p.user_id = $1
|
||||||
order by p.created_at asc")
|
order by p.created_at asc")
|
||||||
|
|
||||||
(s/def ::projects-query
|
(s/def ::projects
|
||||||
(s/keys :req-un [::user]))
|
(s/keys :req-un [::user]))
|
||||||
|
|
||||||
(sq/defquery :projects
|
(sq/defquery ::projects
|
||||||
{:doc "Query all projects"
|
|
||||||
:spec ::projects-query}
|
|
||||||
[{:keys [user] :as params}]
|
[{:keys [user] :as params}]
|
||||||
(-> (db/query db/pool [projects-sql user])
|
(-> (db/query db/pool [projects-sql user])
|
||||||
(p/then (fn [rows]
|
(p/then (fn [rows]
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
(cond-> row
|
(cond-> row
|
||||||
val (assoc :val (blob/decode val)))))
|
val (assoc :val (blob/decode val)))))
|
||||||
|
|
||||||
(s/def ::user-storage-item
|
(s/def ::user-storage-entry
|
||||||
(s/keys :req-un [::key ::user]))
|
(s/keys :req-un [::key ::user]))
|
||||||
|
|
||||||
(sq/defquery ::user-storage-entry
|
(sq/defquery ::user-storage-entry
|
||||||
|
|
Loading…
Add table
Reference in a new issue