diff --git a/docker-entrypoint-initdb.d/init.sql b/docker-entrypoint-initdb.d/init.sql new file mode 100644 index 0000000..aef47bf --- /dev/null +++ b/docker-entrypoint-initdb.d/init.sql @@ -0,0 +1,127 @@ +-- Suppression des tables +DROP TABLE IF EXISTS Commentary; +DROP TABLE IF EXISTS Favorite; +DROP TABLE IF EXISTS DailyQuote; +DROP TABLE IF EXISTS Quote; +DROP TABLE IF EXISTS Caracter; +DROP TABLE IF EXISTS Source; +DROP TABLE IF EXISTS Record_quiz; +DROP TABLE IF EXISTS Quiz_Question; +DROP TABLE IF EXISTS Quiz; +DROP TABLE IF EXISTS Question; +DROP TABLE IF EXISTS Admin; +DROP TABLE IF EXISTS Users; +DROP TABLE IF EXISTS Image; + +-- Création des tables + +CREATE TABLE Image( + id_img NUMERIC PRIMARY KEY, + imgPath varchar(100) NOT NULL UNIQUE +); + +CREATE TABLE Users( + id_user SERIAL PRIMARY KEY, + username varchar(50) NOT NULL, + email varchar(50) NOT NULL, + password varchar(100) NOT NULL, + img NUMERIC NOT NULL, + creation date NOT NULL, + CONSTRAINT unique_col UNIQUE (email), + CONSTRAINT fk_img FOREIGN KEY(img) REFERENCES Image(id_img) +); + +CREATE TABLE Admin( + users SERIAL PRIMARY KEY, + CONSTRAINT fk_user FOREIGN KEY(users) REFERENCES Users(id_user) +); + +CREATE TABLE Question( + id_question SERIAL PRIMARY KEY, + texte text NOT NULL UNIQUE, + answerA varchar(30) NOT NULL, + answerB varchar(30) NOT NULL, + answerC varchar(30) NOT NULL, + answerD varchar(30) NOT NULL, + cAnswer varchar(30) NOT NULL, + CONSTRAINT check_cAnswer CHECK (cAnswer = answerA OR cAnswer = answerB OR cAnswer = answerC OR cAnswer = answerD) +); + +CREATE TABLE Quiz( + id_quiz SERIAL PRIMARY KEY, + nb_quest numeric +); + +CREATE TABLE Quiz_Question( + quiz SERIAL NOT NULL, + question SERIAL NOT NULL, + PRIMARY KEY (quiz, question), + CONSTRAINT fk_quiz FOREIGN KEY(quiz) REFERENCES Quiz(id_quiz), + CONSTRAINT fk_question FOREIGN KEY(question) REFERENCES Question(id_question) +); + +CREATE TABLE Record_quiz( + users SERIAL NOT NULL, + quiz SERIAL NOT NULL, + nbPoint numeric DEFAULT '0', + timeQ numeric DEFAULT '0', + PRIMARY KEY (users, quiz), + CONSTRAINT fk_user FOREIGN KEY(users) REFERENCES Users(id_user), + CONSTRAINT fk_quiz FOREIGN KEY(quiz) REFERENCES Quiz(id_quiz), + CONSTRAINT err_nbPoint CHECK(nbPoint >= 0), + CONSTRAINT err_timeQ CHECK(timeQ >= 0) +); + +CREATE TABLE Source( + id_source SERIAL PRIMARY KEY, + title varchar(100) NOT NULL, + dateS numeric(4) NOT NULL +); + +CREATE TABLE Caracter( + id_caracter SERIAL PRIMARY KEY, + caracter varchar(100) NOT NULL, + id_img NUMERIC NOT NULL +); + +CREATE TABLE Quote( + id_quote SERIAL PRIMARY KEY, + content text NOT NULL, + likes numeric DEFAULT '0', + langue char(2) NOT NULL, + isValide boolean NOT NULL DEFAULT 'false', + reason varchar(100) NOT NULL, + id_caracter SERIAL NOT NULL, + id_source SERIAL NOT NULL, + id_user_verif SERIAL NOT NULL, + CONSTRAINT fk_caracter FOREIGN KEY(id_caracter) REFERENCES Caracter(id_caracter), + CONSTRAINT fk_source FOREIGN KEY(id_source) REFERENCES Source(id_source), + CONSTRAINT fk_userverif FOREIGN KEY(id_user_verif) REFERENCES Users(id_user), + CONSTRAINT err_nbLike CHECK (likes >= 0), + CONSTRAINT err_language CHECK (langue = 'fr' OR langue = 'en') +); + +CREATE TABLE DailyQuote( + citation_id INT PRIMARY KEY, + FOREIGN KEY (citation_id) REFERENCES Quote(id_quote) ON DELETE CASCADE +); + + +CREATE TABLE Favorite( + users SERIAL NOT NULL, + quote SERIAL NOT NULL, + PRIMARY KEY (users, quote), + CONSTRAINT fk_quote FOREIGN KEY(quote) REFERENCES Quote(id_quote), + CONSTRAINT fk_user FOREIGN KEY(users) REFERENCES Users(id_user) +); + +CREATE TABLE Commentary( + id_comment SERIAL PRIMARY KEY, + quote SERIAL NOT NULL, + users SERIAL NOT NULL, + dateC date NOT NULL, + comment text NOT NULL, + CONSTRAINT fk_quote FOREIGN KEY(quote) REFERENCES Quote(id_quote), + CONSTRAINT fk_user FOREIGN KEY(users) REFERENCES Users(id_user) +); +