Skip to content

Commit

Permalink
feat: 데이터베이스 형상 관리 flyway 적용
Browse files Browse the repository at this point in the history
  • Loading branch information
alstn113 committed Dec 19, 2024
1 parent 59fb6a0 commit d6b2eec
Show file tree
Hide file tree
Showing 5 changed files with 109 additions and 0 deletions.
2 changes: 2 additions & 0 deletions server/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
10 changes: 10 additions & 0 deletions server/compose.local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,13 @@ services:
restart: always
ports:
- '6379:6379'
postgres:
container_name: fluffy-postgresql
image: postgres:14.1
restart: always
ports:
- '5432:5432'
environment:
POSTGRES_USER: fluffy
POSTGRES_PASSWORD: fluffy
POSTGRES_DB: fluffy
2 changes: 2 additions & 0 deletions server/src/main/resources/application-local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ spring:
enabled: true
datasource:
url: jdbc:h2:mem:database
flyway:
enabled: false
jpa:
open-in-view: false
show-sql: true
Expand Down
3 changes: 3 additions & 0 deletions server/src/main/resources/application-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
92 changes: 92 additions & 0 deletions server/src/main/resources/db/migration/V1__init.sql
Original file line number Diff line number Diff line change
@@ -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);

0 comments on commit d6b2eec

Please sign in to comment.