[#7] feat: flyway 기본 세팅 구성

- flyway 버전 다운(mysql 5.7 호환 이슈)
- cafe 도메인 관련 table DDL 구성 (초기 세팅 DDL에서 수정)
- BaseTimeEntity 내용 수정(createdBy, updatedBy 내용 추가)
This commit is contained in:
beaniejoy
2022-07-01 18:24:01 +09:00
parent b76824ce6f
commit 70816bbfc1
21 changed files with 80 additions and 124 deletions

View File

@@ -3,7 +3,7 @@ buildscript {
springBootVersion = '2.7.0'
dependencyManagementVersion = '1.0.11.RELEASE'
kotlinVersion = '1.6.21'
flywayVersion = '8.5.11'
flywayVersion = '7.15.0'
}
repositories {
mavenCentral()
@@ -45,6 +45,7 @@ dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation('io.github.microutils:kotlin-logging:2.1.21')

View File

@@ -0,0 +1,13 @@
package io.beaniejoy.dongnecafe.common.entity
import org.springframework.data.domain.AuditorAware
import org.springframework.stereotype.Component
import java.util.*
@Component
class BaseEntityAuditorAware: AuditorAware<String> {
override fun getCurrentAuditor(): Optional<String> {
// TODO 추후 사용자 로그인 기능 추가되면 실제 등록한 사용자를 DB에 저장하는 방향으로 수정
return Optional.of("system")
}
}

View File

@@ -1,6 +1,8 @@
package io.beaniejoy.dongnecafe.common.domain
package io.beaniejoy.dongnecafe.common.entity
import org.springframework.data.annotation.CreatedBy
import org.springframework.data.annotation.CreatedDate
import org.springframework.data.annotation.LastModifiedBy
import org.springframework.data.annotation.LastModifiedDate
import org.springframework.data.jpa.domain.support.AuditingEntityListener
import java.time.LocalDateTime
@@ -9,10 +11,16 @@ import javax.persistence.MappedSuperclass
@MappedSuperclass
@EntityListeners(AuditingEntityListener::class)
open class BaseTimeEntity(
class BaseTimeEntity(
@CreatedDate
val createdAt: LocalDateTime = LocalDateTime.now(),
@CreatedBy
val createdBy: String = "",
@LastModifiedDate
val updatedAt: LocalDateTime? = null
val updatedAt: LocalDateTime? = null,
@LastModifiedBy
val updatedBy: String? = null
)

View File

@@ -13,7 +13,7 @@ data class OptionDetailResponseDto(
return OptionDetailResponseDto(
id = optionDetail.id,
name = optionDetail.name,
extra = optionDetail.extra
extra = optionDetail.extraPrice
)
}
}

View File

@@ -1,6 +1,6 @@
package io.beaniejoy.dongnecafe.domain.cafe.entity
import io.beaniejoy.dongnecafe.common.domain.BaseTimeEntity
import io.beaniejoy.dongnecafe.common.entity.BaseTimeEntity
import javax.persistence.*
@Entity

View File

@@ -1,6 +1,6 @@
package io.beaniejoy.dongnecafe.domain.cafe.entity
import io.beaniejoy.dongnecafe.common.domain.BaseTimeEntity
import io.beaniejoy.dongnecafe.common.entity.BaseTimeEntity
import javax.persistence.*
@Entity

View File

@@ -1,6 +1,6 @@
package io.beaniejoy.dongnecafe.domain.cafe.entity
import io.beaniejoy.dongnecafe.common.domain.BaseTimeEntity
import io.beaniejoy.dongnecafe.common.entity.BaseTimeEntity
import java.math.BigDecimal
import javax.persistence.*

View File

@@ -1,6 +1,6 @@
package io.beaniejoy.dongnecafe.domain.cafe.entity
import io.beaniejoy.dongnecafe.common.domain.BaseTimeEntity
import io.beaniejoy.dongnecafe.common.entity.BaseTimeEntity
import javax.persistence.*
@Entity

View File

@@ -1,6 +1,6 @@
package io.beaniejoy.dongnecafe.domain.cafe.entity
import io.beaniejoy.dongnecafe.common.domain.BaseTimeEntity
import io.beaniejoy.dongnecafe.common.entity.BaseTimeEntity
import java.math.BigDecimal
import javax.persistence.*
@@ -14,11 +14,10 @@ class OptionDetail(
@Column(name = "name", nullable = false)
val name: String,
@Column(name = "extra", nullable = false)
val extra: BigDecimal,
@Column(name = "extra_price", nullable = false)
val extraPrice: BigDecimal,
@ManyToOne
@JoinColumn(name = "option_id", nullable = false)
val menuOption: MenuOption
): BaseTimeEntity() {
}
): BaseTimeEntity()

View File

@@ -1,9 +1,12 @@
spring:
datasource:
url: jdbc:h2:mem:testdb;MODE=MySQL
url: jdbc:mysql://localhost:3306/dongne?autoreconnect=true&characterEncoding=utf8&serverTimezone=Asia/Seoul
username: root
password: beaniejoy # TODO 추후 보안에 대해 생각해보기
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
ddl-auto: none # flyway migration 사용
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect

View File

@@ -1,13 +1,13 @@
CREATE TABLE `cafe` (
`cafe_id` binary(16) NOT NULL COMMENT '카페식별번호',
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '카페 ID',
`name` varchar(20) NOT NULL COMMENT '카페명',
`address` varchar(100) NOT NULL COMMENT '카페 주소',
`phone_number` varchar(11) NOT NULL COMMENT '카페 전화번호',
`total_rate` float NOT NULL COMMENT '카페 종합 평가 점수',
`description` varchar(255) COMMENT '카페 상세설명',
`created_at` datetime NOT NULL COMMENT '카페 등록날짜',
`created_by` varchar(10) NOT NULL COMMENT '카페 등록자',
`updated_at` datetime COMMENT '카페 변경날짜',
`updated_by` varchar(10) NOT NULL COMMENT '카페 변경자',
PRIMARY KEY (`cafe_id`)
`created_by` varchar(20) NOT NULL COMMENT '카페 등록자',
`updated_at` datetime NULL COMMENT '카페 변경날짜',
`updated_by` varchar(20) NULL COMMENT '카페 변경자',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

View File

@@ -1,11 +1,13 @@
CREATE TABLE `cafe_menu` (
`menu_id` binary(16) NOT NULL COMMENT '카페 메뉴 식별번호',
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '카페 메뉴 ID',
`name` varchar(50) NOT NULL COMMENT '카페 메뉴명',
`price` int NOT NULL COMMENT '메뉴 가격',
`created_date` datetime NOT NULL COMMENT '메뉴 등록날짜',
`updated_date` datetime COMMENT '메뉴 수정날짜',
`cafe_id` binary(16) NOT NULL COMMENT '연관된 카페식별번호',
PRIMARY KEY (`menu_id`),
`price` decimal(10, 2) NOT NULL COMMENT '메뉴 가격',
`created_at` datetime NOT NULL COMMENT '메뉴 등록날짜',
`created_by` varchar(20) NOT NULL COMMENT '메뉴 등록자',
`updated_at` datetime COMMENT '메뉴 변경날짜',
`updated_by` varchar(20) NULL COMMENT '메뉴 변경자',
`cafe_id` bigint unsigned NOT NULL COMMENT '연관된 카페 ID',
PRIMARY KEY (`id`),
KEY `cafe_id` (`cafe_id`),
FOREIGN KEY (`cafe_id`) REFERENCES `cafe` (`cafe_id`)
FOREIGN KEY (`cafe_id`) REFERENCES `cafe` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

View File

@@ -1,10 +1,12 @@
CREATE TABLE `cafe_image` (
`cafe_img_id` binary(16) NOT NULL COMMENT '카페 이미지 식별번호',
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '카페 이미지 ID',
`img_url` varchar(255) NOT NULL COMMENT '이미지 경로',
`created_date` datetime NOT NULL COMMENT '이미지 등록날짜',
`updated_date` datetime COMMENT '이미지 수정날짜',
`cafe_id` binary(16) NOT NULL COMMENT '연관된 카페식별번호',
PRIMARY KEY (`cafe_img_id`),
`created_at` datetime NOT NULL COMMENT '이미지 등록날짜',
`created_by` varchar(20) NOT NULL COMMENT '이미지 등록자',
`updated_at` datetime COMMENT '이미지 변경날짜',
`updated_by` varchar(20) NULL COMMENT '이미지 변경자',
`cafe_id` bigint unsigned NOT NULL COMMENT '연관된 카페 ID',
PRIMARY KEY (`id`),
KEY `cafe_id` (`cafe_id`),
FOREIGN KEY (`cafe_id`) REFERENCES `cafe` (`cafe_id`)
FOREIGN KEY (`cafe_id`) REFERENCES `cafe` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

View File

@@ -1,10 +1,12 @@
CREATE TABLE `menu_option`(
`option_id` binary(16) NOT NULL COMMENT '옵션 식별번호',
`title`varchar(50) NOT NULL COMMENT '메뉴 옵션 이름',
`created_date` datetime NOT NULL COMMENT '옵션 등록날짜',
`updated_date` datetime COMMENT '옵션 수정날짜',
`menu_id` binary(16) NOT NULL COMMENT '연관된 카페 메뉴 식별번호',
PRIMARY KEY (`option_id`),
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '옵션 ID',
`title` varchar(50) NOT NULL COMMENT '메뉴 옵션 이름',
`created_at` datetime NOT NULL COMMENT '옵션 등록날짜',
`created_by` varchar(20) NOT NULL COMMENT '옵션 등록자',
`updated_at` datetime COMMENT '옵션 변경날짜',
`updated_by` varchar(20) NULL COMMENT '옵션 변경자',
`menu_id` bigint unsigned NOT NULL COMMENT '연관된 카페 메뉴 ID',
PRIMARY KEY (`id`),
KEY `menu_id` (`menu_id`),
FOREIGN KEY (`menu_id`) REFERENCES `cafe_menu` (`menu_id`)
FOREIGN KEY (`menu_id`) REFERENCES `cafe_menu` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

View File

@@ -1,11 +1,13 @@
CREATE TABLE `option_detail` (
`option_detail_id` bigint NOT NULL COMMENT '옵션 상세 번호',
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '옵션 상세 ID',
`name` varchar(50) NOT NULL COMMENT '옵션 상세명',
`extra` int NOT NULL COMMENT '옵션 추가 요금',
`created_date` datetime NOT NULL COMMENT '옵션 상세 등록날짜',
`updated_date` datetime COMMENT '옵션 상세 수정날짜',
`option_id` binary(16) NOT NULL COMMENT '연관된 옵션 식별번호',
PRIMARY KEY (`option_detail_id`),
`extra_price` decimal(10, 2) NOT NULL COMMENT '옵션 추가 요금',
`created_at` datetime NOT NULL COMMENT '옵션 상세 등록날짜',
`created_by` varchar(20) NOT NULL COMMENT '옵션 상세 등록자',
`updated_at` datetime COMMENT '옵션 상세 변경날짜',
`updated_by` varchar(20) NULL COMMENT '옵션 상세 변경자',
`option_id` bigint unsigned NOT NULL COMMENT '연관된 옵션 ID',
PRIMARY KEY (`id`),
KEY `option_id` (`option_id`),
FOREIGN KEY (`option_id`) REFERENCES `menu_option` (`option_id`)
FOREIGN KEY (`option_id`) REFERENCES `menu_option` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

View File

@@ -1,11 +0,0 @@
CREATE TABLE `user` (
`user_id` binary(16) NOT NULL COMMENT '사용자 식별번호',
`email`varchar(50) NOT NULL COMMENT '사용자 이메일',
`password` varchar(100) NOT NULL COMMENT '계정 비밀번호',
`address` varchar(100) NOT NULL COMMENT '사용자 주소',
`phone_number` varchar(11) NOT NULL COMMENT '사용자 전화번호',
`role` varchar(20) NOT NULL COMMENT '사용자 권한',
`created_date` datetime NOT NULL COMMENT '사용자 등록날짜',
`updated_date` datetime COMMENT '사용자 수정날짜',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

View File

@@ -1,15 +0,0 @@
CREATE TABLE `review` (
`review_id` binary(16) NOT NULL COMMENT '리뷰 식별번호',
`content`varchar(255) NOT NULL COMMENT '리뷰 내용',
`img_url` varchar(255) NOT NULL COMMENT '리뷰 첨부사진 주소',
`rate` tinyint NOT NULL COMMENT '평가점수(0 ~ 5점)',
`created_date` datetime NOT NULL COMMENT '리뷰 등록날짜',
`updated_date` datetime COMMENT '리뷰 수정날짜',
`user_id` binary(16) NOT NULL COMMENT '리뷰 작성한 사용자 식별번호',
`cafe_id` binary(16) NOT NULL COMMENT '리뷰 대상 카페 식별번호',
PRIMARY KEY (`review_id`),
KEY `user_id` (`user_id`),
FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`),
KEY `cafe_id` (`cafe_id`),
FOREIGN KEY (`cafe_id`) REFERENCES `cafe` (`cafe_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

View File

@@ -1,13 +0,0 @@
CREATE TABLE `cart` (
`cart_id` binary(16) NOT NULL COMMENT '장바구니 식별번호',
`cafe_name` varchar(20) NOT NULL COMMENT '장바구니에 담긴 카페 이름',
`check_ordered` tinyint NOT NULL COMMENT '장바구니의 주문 여부',
`total_price` int NOT NULL COMMENT '장바구니에 담긴 총 금액',
`created_date` datetime NOT NULL COMMENT '장바구니 등록날짜',
`updated_date` datetime COMMENT '장바구니 수정날짜',
`cafe_id` binary(16) NOT NULL COMMENT '장바구니에 담긴 카페 식별번호',
`user_id` binary(16) NOT NULL COMMENT '장바구니 주인 사용자 식별번호',
PRIMARY KEY (`cart_id`),
KEY `user_id` (`user_id`),
FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

View File

@@ -1,12 +0,0 @@
CREATE TABLE `basket` (
`basket_id` binary(16) NOT NULL COMMENT '장바구니 품목 식별번호',
`menu_name` varchar(50) NOT NULL COMMENT '장바구니 품목 이름',
`menu_count` int NOT NULL COMMENT '장바구니 품목 개수',
`menu_price` int NOT NULL COMMENT '장바구니 품목 가격',
`created_date` datetime NOT NULL COMMENT '장바구니 품목 등록날짜',
`updated_date` datetime COMMENT '장바구니 품목 수정날짜',
`cart_id` binary(16) NOT NULL COMMENT '해당 품목이 담긴 장바구니 식별번호',
PRIMARY KEY (`basket_id`),
KEY `cart_id` (`cart_id`),
FOREIGN KEY (`cart_id`) REFERENCES `cart` (`cart_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

View File

@@ -1,11 +0,0 @@
CREATE TABLE `basket_option` (
`basket_option_id` binary(16) NOT NULL COMMENT '품목 추가옵션 식별번호',
`option_name`varchar(50) NOT NULL COMMENT '품목 추가옵션 내용',
`option_extra` int NOT NULL COMMENT '품목 추가옵션 추가요금',
`created_date` datetime NOT NULL COMMENT '품목 추가옵션 등록날짜',
`updated_date` datetime COMMENT '품목 추가옵션 수정날짜',
`basket_id` binary(16) NOT NULL COMMENT '추가옵션 대상 장바구니 품목 식별번호',
PRIMARY KEY (`basket_option_id`),
KEY `basket_id` (`basket_id`),
FOREIGN KEY (`basket_id`) REFERENCES `basket` (`basket_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

View File

@@ -1,14 +0,0 @@
CREATE TABLE `menu_order` (
`order_id` binary(16) NOT NULL COMMENT '주문 식별번호',
`order_status` varchar(20) NOT NULL COMMENT '주문 상태',
`request_message` varchar(255) NOT NULL COMMENT '주문 요청사항',
`created_date` datetime NOT NULL COMMENT '주문 등록날짜',
`updated_date` datetime COMMENT '주문 수정날짜',
`cart_id` binary(16) NOT NULL COMMENT '주문된 카트 식별번호',
`user_id` binary(16) NOT NULL COMMENT '주문한 사용자 식별번호',
PRIMARY KEY (`order_id`),
KEY `cart_id` (`cart_id`),
FOREIGN KEY (`cart_id`) REFERENCES `cart` (`cart_id`),
KEY `user_id` (`user_id`),
FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;