From b787440da6c2983373705d47c0c6b32e98178ce3 Mon Sep 17 00:00:00 2001 From: alstn113 Date: Thu, 19 Dec 2024 20:35:40 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=B2=A0?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=ED=98=95=EC=83=81=20=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?flyway=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/build.gradle | 2 + .../src/main/resources/application-local.yml | 2 + .../src/main/resources/application-prod.yml | 3 + .../main/resources/db/migration/V1__init.sql | 92 +++++++++++++++++++ 4 files changed, 99 insertions(+) create mode 100644 server/src/main/resources/db/migration/V1__init.sql diff --git a/server/build.gradle b/server/build.gradle index d134faf..e806697 100644 --- a/server/build.gradle +++ b/server/build.gradle @@ -37,6 +37,8 @@ dependencies { // db runtimeOnly 'com.h2database:h2' runtimeOnly 'org.postgresql:postgresql' + implementation 'org.flywaydb:flyway-core' + implementation 'org.flywaydb:flyway-database-postgresql' // redis implementation 'org.springframework.boot:spring-boot-starter-data-redis' diff --git a/server/src/main/resources/application-local.yml b/server/src/main/resources/application-local.yml index b37eff9..7ffd267 100644 --- a/server/src/main/resources/application-local.yml +++ b/server/src/main/resources/application-local.yml @@ -5,6 +5,8 @@ spring: enabled: true datasource: url: jdbc:h2:mem:database + flyway: + enabled: false jpa: open-in-view: false show-sql: true diff --git a/server/src/main/resources/application-prod.yml b/server/src/main/resources/application-prod.yml index 8572c9e..d61942d 100644 --- a/server/src/main/resources/application-prod.yml +++ b/server/src/main/resources/application-prod.yml @@ -3,6 +3,9 @@ spring: url: ${DB_URL} username: ${DB_USERNAME} password: ${DB_PASSWORD} + flyway: + enabled: true + baseline-on-migrate: true jpa: open-in-view: false show-sql: true diff --git a/server/src/main/resources/db/migration/V1__init.sql b/server/src/main/resources/db/migration/V1__init.sql new file mode 100644 index 0000000..e18c06b --- /dev/null +++ b/server/src/main/resources/db/migration/V1__init.sql @@ -0,0 +1,92 @@ +-- PostgreSQL + +CREATE TABLE IF NOT EXISTS MEMBER +( + ID BIGINT GENERATED BY DEFAULT AS IDENTITY, + NAME VARCHAR(255) NOT NULL, + EMAIL VARCHAR(255), + AVATAR_URL VARCHAR(255) NOT NULL, + SOCIAL_ID VARCHAR(255) NOT NULL, + PROVIDER VARCHAR(20) NOT NULL, + CREATED_AT TIMESTAMP(6) NOT NULL, + UPDATED_AT TIMESTAMP(6) NOT NULL, + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS EXAM +( + ID BIGINT GENERATED BY DEFAULT AS IDENTITY, + MEMBER_ID BIGINT NOT NULL, + TITLE VARCHAR(255) NOT NULL, + DESCRIPTION VARCHAR(255) NOT NULL, + STATUS VARCHAR(20) NOT NULL, + CREATED_AT TIMESTAMP(6) NOT NULL, + START_AT TIMESTAMP(6), + END_AT TIMESTAMP(6), + UPDATED_AT TIMESTAMP(6) NOT NULL, + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS ANSWER +( + ID BIGINT GENERATED BY DEFAULT AS IDENTITY, + QUESTION_ID BIGINT NOT NULL, + SUBMISSION_ID BIGINT, + TEXT VARCHAR(255), + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS ANSWER_CHOICE +( + ANSWER_ID BIGINT NOT NULL, + QUESTION_OPTION_ID BIGINT NOT NULL +); + +CREATE TABLE IF NOT EXISTS QUESTION +( + ID BIGINT GENERATED BY DEFAULT AS IDENTITY, + EXAM_ID BIGINT, + TEXT VARCHAR(255) NOT NULL, + CORRECT_ANSWER VARCHAR(255), + TYPE VARCHAR(50) NOT NULL, + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS QUESTION_OPTION +( + ID BIGINT GENERATED BY DEFAULT AS IDENTITY, + QUESTION_ID BIGINT, + TEXT VARCHAR(255) NOT NULL, + IS_CORRECT BOOLEAN NOT NULL, + PRIMARY KEY (ID) +); + +CREATE TABLE IF NOT EXISTS SUBMISSION +( + ID BIGINT GENERATED BY DEFAULT AS IDENTITY, + EXAM_ID BIGINT NOT NULL, + MEMBER_ID BIGINT NOT NULL, + CREATED_AT TIMESTAMP(6) NOT NULL, + UPDATED_AT TIMESTAMP(6) NOT NULL, + PRIMARY KEY (ID) +); + +ALTER TABLE IF EXISTS ANSWER + ADD CONSTRAINT FK_SUBMISSION + FOREIGN KEY (SUBMISSION_ID) + REFERENCES SUBMISSION (ID); + +ALTER TABLE IF EXISTS ANSWER_CHOICE + ADD CONSTRAINT FK_ANSWER + FOREIGN KEY (ANSWER_ID) + REFERENCES ANSWER (ID); + +ALTER TABLE IF EXISTS QUESTION + ADD CONSTRAINT FK_EXAM + FOREIGN KEY (EXAM_ID) + REFERENCES EXAM (ID); + +ALTER TABLE IF EXISTS QUESTION_OPTION + ADD CONSTRAINT FK_QUESTION + FOREIGN KEY (QUESTION_ID) + REFERENCES QUESTION (ID);