457 lines
12 KiB
PL/PgSQL
457 lines
12 KiB
PL/PgSQL
-- Downloaded from: https://github.com/julesd7/collatask/blob/659e477af286721943425883fd618038bfa94ea9/structure.sql
|
|
--
|
|
-- PostgreSQL database dump
|
|
--
|
|
|
|
-- Dumped from database version 16.4
|
|
-- Dumped by pg_dump version 16.8 (Homebrew)
|
|
|
|
SET statement_timeout = 0;
|
|
SET lock_timeout = 0;
|
|
SET idle_in_transaction_session_timeout = 0;
|
|
SET client_encoding = 'UTF8';
|
|
SET standard_conforming_strings = on;
|
|
SELECT pg_catalog.set_config('search_path', '', false);
|
|
SET check_function_bodies = false;
|
|
SET xmloption = content;
|
|
SET client_min_messages = warning;
|
|
SET row_security = off;
|
|
|
|
--
|
|
-- Name: assign_user_to_project(integer, integer, character varying); Type: FUNCTION; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE FUNCTION public.assign_user_to_project(p_user_id integer, p_project_id integer, p_role character varying DEFAULT 'member'::character varying) RETURNS void
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
INSERT INTO project_assignments (user_id, project_id, role)
|
|
VALUES (p_user_id, p_project_id, p_role)
|
|
ON CONFLICT (user_id, project_id) DO NOTHING; -- Ignore si l'utilisateur est déjà assigné
|
|
END;
|
|
$$;
|
|
|
|
|
|
--
|
|
-- Name: create_default_boards(); Type: FUNCTION; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE FUNCTION public.create_default_boards() RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
INSERT INTO boards (project_id, title) VALUES (NEW.id, 'To Do');
|
|
INSERT INTO boards (project_id, title) VALUES (NEW.id, 'In Progress');
|
|
INSERT INTO boards (project_id, title) VALUES (NEW.id, 'Completed');
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
|
|
--
|
|
-- Name: set_deleted_user(); Type: FUNCTION; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE FUNCTION public.set_deleted_user() RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
UPDATE messages
|
|
SET sender = 'DeletedUser'
|
|
WHERE sender = OLD.username;
|
|
|
|
RETURN OLD;
|
|
END;
|
|
$$;
|
|
|
|
|
|
--
|
|
-- Name: update_board_timestamp(); Type: FUNCTION; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE FUNCTION public.update_board_timestamp() RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
NEW.updated_at = CURRENT_TIMESTAMP; -- Met à jour le champ updated_at à l'heure actuelle
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
|
|
--
|
|
-- Name: update_card_last_change(); Type: FUNCTION; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE FUNCTION public.update_card_last_change() RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
NEW.last_change = CURRENT_TIMESTAMP; -- Met à jour le champ last_change à l'heure actuelle
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
|
|
--
|
|
-- Name: update_project_timestamp(); Type: FUNCTION; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE FUNCTION public.update_project_timestamp() RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
UPDATE projects
|
|
SET updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = NEW.project_id;
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
|
|
--
|
|
-- Name: update_task_timestamp(); Type: FUNCTION; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE FUNCTION public.update_task_timestamp() RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
NEW.updated_at = CURRENT_TIMESTAMP; -- Met à jour le champ updated_at à l'heure actuelle
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
|
|
--
|
|
-- Name: update_timestamp(); Type: FUNCTION; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE FUNCTION public.update_timestamp() RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
NEW.updated_at = CURRENT_TIMESTAMP; -- Met à jour le champ updated_at à l'heure actuelle
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
|
|
--
|
|
-- Name: update_updated_at(); Type: FUNCTION; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE FUNCTION public.update_updated_at() RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
NEW.updated_at = CURRENT_TIMESTAMP;
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
|
|
SET default_tablespace = '';
|
|
|
|
SET default_table_access_method = heap;
|
|
|
|
--
|
|
-- Name: boards; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.boards (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
title character varying(255),
|
|
project_id uuid
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: cards; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.cards (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
title character varying(100) NOT NULL,
|
|
description text,
|
|
start_date date,
|
|
end_date date,
|
|
last_change timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
board_id uuid,
|
|
project_id uuid,
|
|
assignees_ids uuid[],
|
|
priority character varying(2),
|
|
CONSTRAINT cards_priority_check CHECK (((priority)::text = ANY ((ARRAY['P0'::character varying, 'P1'::character varying, 'P2'::character varying, 'P3'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: cards_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.cards_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: messages; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.messages (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
message text NOT NULL,
|
|
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
room uuid NOT NULL,
|
|
sender text NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: project_assignments; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.project_assignments (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
role character varying(20) DEFAULT 'viewer'::character varying,
|
|
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
user_id uuid NOT NULL,
|
|
project_id uuid NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: projects; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.projects (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
title character varying(100) NOT NULL,
|
|
description text,
|
|
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
owner_id uuid
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: tasks; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.tasks (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
title character varying(100) NOT NULL,
|
|
description text,
|
|
status character varying(20) DEFAULT 'pending'::character varying,
|
|
board_id integer NOT NULL,
|
|
assigned_to integer,
|
|
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: users; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.users (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
username character varying(50) NOT NULL,
|
|
email character varying(100) NOT NULL,
|
|
password character varying(255),
|
|
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
verified boolean DEFAULT false,
|
|
verification_token character varying(255),
|
|
reset_token character varying(255),
|
|
last_connection timestamp without time zone DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: boards boards_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.boards
|
|
ADD CONSTRAINT boards_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: cards cards_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.cards
|
|
ADD CONSTRAINT cards_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: project_assignments project_assignments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_assignments
|
|
ADD CONSTRAINT project_assignments_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: projects projects_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.projects
|
|
ADD CONSTRAINT projects_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: tasks tasks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.tasks
|
|
ADD CONSTRAINT tasks_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: users users_email_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.users
|
|
ADD CONSTRAINT users_email_key UNIQUE (email);
|
|
|
|
|
|
--
|
|
-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.users
|
|
ADD CONSTRAINT users_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: users users_username_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.users
|
|
ADD CONSTRAINT users_username_key UNIQUE (username);
|
|
|
|
|
|
--
|
|
-- Name: project_assignments set_updated_at; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER set_updated_at BEFORE UPDATE ON public.project_assignments FOR EACH ROW EXECUTE FUNCTION public.update_updated_at();
|
|
|
|
|
|
--
|
|
-- Name: projects trigger_create_default_boards; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trigger_create_default_boards AFTER INSERT ON public.projects FOR EACH ROW EXECUTE FUNCTION public.create_default_boards();
|
|
|
|
|
|
--
|
|
-- Name: boards trigger_update_board_timestamp; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trigger_update_board_timestamp BEFORE UPDATE ON public.boards FOR EACH ROW EXECUTE FUNCTION public.update_board_timestamp();
|
|
|
|
|
|
--
|
|
-- Name: cards trigger_update_card_last_change; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trigger_update_card_last_change BEFORE UPDATE ON public.cards FOR EACH ROW EXECUTE FUNCTION public.update_card_last_change();
|
|
|
|
|
|
--
|
|
-- Name: boards trigger_update_project_on_board_change; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trigger_update_project_on_board_change AFTER INSERT OR DELETE OR UPDATE ON public.boards FOR EACH ROW EXECUTE FUNCTION public.update_project_timestamp();
|
|
|
|
|
|
--
|
|
-- Name: cards trigger_update_project_on_card_change; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trigger_update_project_on_card_change AFTER INSERT OR DELETE OR UPDATE ON public.cards FOR EACH ROW EXECUTE FUNCTION public.update_project_timestamp();
|
|
|
|
|
|
--
|
|
-- Name: tasks trigger_update_task_timestamp; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER trigger_update_task_timestamp BEFORE UPDATE ON public.tasks FOR EACH ROW EXECUTE FUNCTION public.update_task_timestamp();
|
|
|
|
|
|
--
|
|
-- Name: users user_deletion_trigger; Type: TRIGGER; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TRIGGER user_deletion_trigger BEFORE DELETE ON public.users FOR EACH ROW EXECUTE FUNCTION public.set_deleted_user();
|
|
|
|
|
|
--
|
|
-- Name: cards fk_board_id; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.cards
|
|
ADD CONSTRAINT fk_board_id FOREIGN KEY (board_id) REFERENCES public.boards(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: projects fk_owner_id; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.projects
|
|
ADD CONSTRAINT fk_owner_id FOREIGN KEY (owner_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: project_assignments fk_project; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_assignments
|
|
ADD CONSTRAINT fk_project FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: project_assignments fk_project_id; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_assignments
|
|
ADD CONSTRAINT fk_project_id FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: boards fk_project_id; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.boards
|
|
ADD CONSTRAINT fk_project_id FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: cards fk_project_id; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.cards
|
|
ADD CONSTRAINT fk_project_id FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: project_assignments fk_user; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.project_assignments
|
|
ADD CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- PostgreSQL database dump complete
|
|
--
|
|
|