mirror of
https://github.com/penpot/penpot.git
synced 2025-01-10 08:50:57 -05:00
63 lines
1.6 KiB
MySQL
63 lines
1.6 KiB
MySQL
|
-- Table
|
||
|
|
||
|
CREATE TABLE IF NOT EXISTS projects (
|
||
|
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||
|
"user" uuid NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||
|
|
||
|
created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
|
||
|
modified_at timestamptz NOT NULL DEFAULT clock_timestamp(),
|
||
|
deleted_at timestamptz DEFAULT NULL,
|
||
|
|
||
|
version bigint NOT NULL DEFAULT 0,
|
||
|
name text NOT NULL
|
||
|
);
|
||
|
|
||
|
CREATE TABLE IF NOT EXISTS project_shares (
|
||
|
project 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
|
||
|
);
|
||
|
|
||
|
-- Indexes
|
||
|
|
||
|
CREATE INDEX projects_user_idx
|
||
|
ON projects("user");
|
||
|
|
||
|
CREATE UNIQUE INDEX projects_shares_token_idx
|
||
|
ON project_shares(token);
|
||
|
|
||
|
-- Triggers
|
||
|
|
||
|
CREATE OR REPLACE FUNCTION handle_project_create()
|
||
|
RETURNS TRIGGER AS $$
|
||
|
DECLARE
|
||
|
token text;
|
||
|
BEGIN
|
||
|
SELECT encode(digest(gen_random_bytes(128), 'sha256'), 'hex')
|
||
|
INTO token;
|
||
|
|
||
|
INSERT INTO project_shares (project, token)
|
||
|
VALUES (NEW.id, token);
|
||
|
|
||
|
RETURN NEW;
|
||
|
END;
|
||
|
$$ LANGUAGE plpgsql;
|
||
|
|
||
|
CREATE TRIGGER project_on_create_tgr
|
||
|
AFTER INSERT ON projects
|
||
|
FOR EACH ROW EXECUTE PROCEDURE handle_project_create();
|
||
|
|
||
|
CREATE TRIGGER project_occ_tgr
|
||
|
BEFORE UPDATE ON projects
|
||
|
FOR EACH ROW EXECUTE PROCEDURE handle_occ();
|
||
|
|
||
|
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();
|