studium/db/schema.sql
Antoine Pelletier 5e160ae11c wip
2026-09-29 09:47:27 +02:00

531 lines
12 KiB
SQL

\restrict dbmate
-- Dumped from database version 18.3
-- Dumped by pg_dump version 18.6
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET transaction_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;
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- Name: course_files; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.course_files (
id integer CONSTRAINT lecture_notes_id_not_null NOT NULL,
course_id integer CONSTRAINT lecture_notes_course_id_not_null NOT NULL,
name text CONSTRAINT lecture_notes_title_not_null NOT NULL,
has_pdf boolean DEFAULT false CONSTRAINT lecture_notes_has_pdf_not_null NOT NULL,
created_at timestamp with time zone DEFAULT now() CONSTRAINT lecture_notes_created_at_not_null NOT NULL,
updated_at timestamp with time zone DEFAULT now() CONSTRAINT lecture_notes_updated_at_not_null NOT NULL,
kind text NOT NULL,
path text NOT NULL,
CONSTRAINT course_files_kind_check CHECK ((kind = ANY (ARRAY['note'::text, 'upload'::text])))
);
--
-- Name: course_files_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.course_files_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: course_files_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.course_files_id_seq OWNED BY public.course_files.id;
--
-- Name: courses; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.courses (
id integer NOT NULL,
name text NOT NULL,
code text,
teachers text[] DEFAULT '{}'::text[] NOT NULL,
main_page_url text,
kind text NOT NULL,
folder text NOT NULL,
CONSTRAINT courses_kind_check CHECK ((kind = ANY (ARRAY['course'::text, 'association'::text])))
);
--
-- Name: courses_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.courses_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: courses_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.courses_id_seq OWNED BY public.courses.id;
--
-- Name: file_tags; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.file_tags (
file_id integer NOT NULL,
tag_id integer NOT NULL
);
--
-- Name: grades; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.grades (
id integer NOT NULL,
course_id integer NOT NULL,
name text NOT NULL,
score double precision NOT NULL,
max_score double precision NOT NULL,
weight double precision NOT NULL,
CONSTRAINT grades_check CHECK ((score <= max_score)),
CONSTRAINT grades_max_score_check CHECK ((max_score > (0)::double precision)),
CONSTRAINT grades_score_check CHECK ((score >= (0)::double precision)),
CONSTRAINT grades_weight_check CHECK ((weight > (0)::double precision))
);
--
-- Name: grades_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.grades_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: grades_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.grades_id_seq OWNED BY public.grades.id;
--
-- Name: schema_migrations; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.schema_migrations (
version character varying NOT NULL
);
--
-- Name: tags; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.tags (
id integer CONSTRAINT slot_tags_id_not_null NOT NULL,
name jsonb CONSTRAINT slot_tags_name_not_null NOT NULL,
color text CONSTRAINT slot_tags_color_not_null NOT NULL,
scopes text[] DEFAULT '{}'::text[] NOT NULL,
slug text,
CONSTRAINT tags_scopes_check CHECK ((scopes <@ ARRAY['slot'::text, 'task'::text, 'file'::text]))
);
--
-- Name: tags_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.tags_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: tags_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.tags_id_seq OWNED BY public.tags.id;
--
-- Name: task_tags; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.task_tags (
task_id integer NOT NULL,
tag_id integer NOT NULL
);
--
-- Name: tasks; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.tasks (
id integer NOT NULL,
course_id integer NOT NULL,
parent_id integer,
name text NOT NULL,
description text,
links text[] DEFAULT '{}'::text[] NOT NULL,
deadline timestamp with time zone,
done boolean DEFAULT false NOT NULL,
time_spent integer DEFAULT 0 NOT NULL,
CONSTRAINT tasks_time_spent_check CHECK ((time_spent >= 0))
);
--
-- Name: tasks_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.tasks_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: tasks_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.tasks_id_seq OWNED BY public.tasks.id;
--
-- Name: time_slots; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.time_slots (
id integer NOT NULL,
course_id integer NOT NULL,
tag_id integer NOT NULL,
weekday smallint NOT NULL,
start_time time without time zone NOT NULL,
end_time time without time zone NOT NULL,
CONSTRAINT time_slots_check CHECK ((start_time < end_time)),
CONSTRAINT time_slots_weekday_check CHECK (((weekday >= 1) AND (weekday <= 7)))
);
--
-- Name: time_slots_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.time_slots_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: time_slots_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.time_slots_id_seq OWNED BY public.time_slots.id;
--
-- Name: course_files id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.course_files ALTER COLUMN id SET DEFAULT nextval('public.course_files_id_seq'::regclass);
--
-- Name: courses id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.courses ALTER COLUMN id SET DEFAULT nextval('public.courses_id_seq'::regclass);
--
-- Name: grades id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.grades ALTER COLUMN id SET DEFAULT nextval('public.grades_id_seq'::regclass);
--
-- Name: tags id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tags ALTER COLUMN id SET DEFAULT nextval('public.tags_id_seq'::regclass);
--
-- Name: tasks id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tasks ALTER COLUMN id SET DEFAULT nextval('public.tasks_id_seq'::regclass);
--
-- Name: time_slots id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.time_slots ALTER COLUMN id SET DEFAULT nextval('public.time_slots_id_seq'::regclass);
--
-- Name: course_files course_files_course_id_path_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.course_files
ADD CONSTRAINT course_files_course_id_path_key UNIQUE (course_id, path);
--
-- Name: course_files course_files_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.course_files
ADD CONSTRAINT course_files_pkey PRIMARY KEY (id);
--
-- Name: courses courses_folder_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.courses
ADD CONSTRAINT courses_folder_key UNIQUE (folder);
--
-- Name: courses courses_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.courses
ADD CONSTRAINT courses_pkey PRIMARY KEY (id);
--
-- Name: file_tags file_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.file_tags
ADD CONSTRAINT file_tags_pkey PRIMARY KEY (file_id, tag_id);
--
-- Name: grades grades_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.grades
ADD CONSTRAINT grades_pkey PRIMARY KEY (id);
--
-- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.schema_migrations
ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version);
--
-- Name: tags tags_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tags
ADD CONSTRAINT tags_pkey PRIMARY KEY (id);
--
-- Name: tags tags_slug_key; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tags
ADD CONSTRAINT tags_slug_key UNIQUE (slug);
--
-- Name: task_tags task_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.task_tags
ADD CONSTRAINT task_tags_pkey PRIMARY KEY (task_id, tag_id);
--
-- Name: tasks tasks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tasks
ADD CONSTRAINT tasks_pkey PRIMARY KEY (id);
--
-- Name: time_slots time_slots_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.time_slots
ADD CONSTRAINT time_slots_pkey PRIMARY KEY (id);
--
-- Name: course_files_course_id_idx; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX course_files_course_id_idx ON public.course_files USING btree (course_id);
--
-- Name: grades_course_id_idx; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX grades_course_id_idx ON public.grades USING btree (course_id);
--
-- Name: tasks_course_id_idx; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX tasks_course_id_idx ON public.tasks USING btree (course_id);
--
-- Name: time_slots_course_id_idx; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX time_slots_course_id_idx ON public.time_slots USING btree (course_id);
--
-- Name: course_files course_files_course_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.course_files
ADD CONSTRAINT course_files_course_id_fkey FOREIGN KEY (course_id) REFERENCES public.courses(id) ON DELETE CASCADE;
--
-- Name: file_tags file_tags_file_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.file_tags
ADD CONSTRAINT file_tags_file_id_fkey FOREIGN KEY (file_id) REFERENCES public.course_files(id) ON DELETE CASCADE;
--
-- Name: file_tags file_tags_tag_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.file_tags
ADD CONSTRAINT file_tags_tag_id_fkey FOREIGN KEY (tag_id) REFERENCES public.tags(id) ON DELETE CASCADE;
--
-- Name: grades grades_course_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.grades
ADD CONSTRAINT grades_course_id_fkey FOREIGN KEY (course_id) REFERENCES public.courses(id) ON DELETE CASCADE;
--
-- Name: task_tags task_tags_tag_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.task_tags
ADD CONSTRAINT task_tags_tag_id_fkey FOREIGN KEY (tag_id) REFERENCES public.tags(id) ON DELETE CASCADE;
--
-- Name: task_tags task_tags_task_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.task_tags
ADD CONSTRAINT task_tags_task_id_fkey FOREIGN KEY (task_id) REFERENCES public.tasks(id) ON DELETE CASCADE;
--
-- Name: tasks tasks_course_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tasks
ADD CONSTRAINT tasks_course_id_fkey FOREIGN KEY (course_id) REFERENCES public.courses(id) ON DELETE CASCADE;
--
-- Name: tasks tasks_parent_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.tasks
ADD CONSTRAINT tasks_parent_id_fkey FOREIGN KEY (parent_id) REFERENCES public.tasks(id) ON DELETE CASCADE;
--
-- Name: time_slots time_slots_course_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.time_slots
ADD CONSTRAINT time_slots_course_id_fkey FOREIGN KEY (course_id) REFERENCES public.courses(id) ON DELETE CASCADE;
--
-- Name: time_slots time_slots_tag_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.time_slots
ADD CONSTRAINT time_slots_tag_id_fkey FOREIGN KEY (tag_id) REFERENCES public.tags(id);
--
-- PostgreSQL database dump complete
--
\unrestrict dbmate
--
-- Dbmate schema migrations
--
INSERT INTO public.schema_migrations (version) VALUES
('20260928120000'),
('20260928150000'),
('20260929090000'),
('20260929180000');