531 lines
12 KiB
SQL
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');
|