[#5] Refactor: 코틀린 베이스 프로젝트로 리팩토링

- MenuOption, OptionDetail 도메인 내용 코틀린 변환
- java 17 버전 migration
This commit is contained in:
beaniejoy
2022-06-22 20:32:49 +09:00
parent d12f92a8e5
commit 0bf99745d5
14 changed files with 104 additions and 143 deletions

View File

@@ -28,7 +28,7 @@ apply plugin: 'io.spring.dependency-management'
group = 'io.beaniejoy.dongecafe'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
sourceCompatibility = '17'
repositories {
mavenCentral()

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -3,25 +3,26 @@ package io.beaniejoy.dongnecafe.domain.cafe.domain
import io.beaniejoy.dongnecafe.common.domain.BaseTimeEntity
import javax.persistence.*
@Entity(name = "cafe")
@Entity
@Table(name = "cafe")
class Cafe(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = 0L,
@Column(name = "name")
@Column(name = "name", nullable = false)
var name: String,
@Column(name = "address")
@Column(name = "address", nullable = false)
var address: String,
@Column(name = "phone_number")
@Column(name = "phone_number", nullable = false)
var phoneNumber: String,
@Column(name = "total_rate")
@Column(name = "total_rate", nullable = false)
val totalRate: Double,
@Column(name = "description")
@Column(name = "description", nullable = false)
var description: String,
@OneToMany(mappedBy = "cafe", fetch = FetchType.LAZY)

View File

@@ -4,15 +4,16 @@ import io.beaniejoy.dongnecafe.common.domain.BaseTimeEntity
import javax.persistence.*
@Entity
@Table(name = "cafe_image")
class CafeImage(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long,
@Column(name = "img_url")
@Column(name = "img_url", nullable = false)
val imgUrl: String,
@ManyToOne
@JoinColumn(name = "cafe_id")
val cafe: Cafe,
@JoinColumn(name = "cafe_id", nullable = false)
val cafe: Cafe
) : BaseTimeEntity()

View File

@@ -4,20 +4,21 @@ import io.beaniejoy.dongnecafe.common.domain.BaseTimeEntity
import java.math.BigDecimal
import javax.persistence.*
@Entity(name = "cafe_menu")
@Entity
@Table(name = "cafe_menu")
class CafeMenu(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = 0L,
@Column(name = "name")
@Column(name = "name", nullable = false)
val name: String,
@Column(name = "price")
@Column(name = "price", nullable = false)
val price: BigDecimal = BigDecimal.ZERO,
@ManyToOne
@JoinColumn(name = "cafe_id")
@JoinColumn(name = "cafe_id", nullable = false)
val cafe: Cafe,
@OneToMany(mappedBy = "cafeMenu", fetch = FetchType.LAZY)

View File

@@ -1,48 +0,0 @@
package io.beaniejoy.dongnecafe.domain.cafe.domain;
import io.beaniejoy.dongnecafe.domain.cafe.dto.menu.MenuOptionResponseDto;
import io.beaniejoy.dongnecafe.common.domain.BaseTimeEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class MenuOption extends BaseTimeEntity {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "option_id", columnDefinition = "BINARY(16)")
private UUID optionId;
private String title;
@ManyToOne
@JoinColumn(name = "menu_id")
private CafeMenu cafeMenu;
@OneToMany(mappedBy = "menuOption", fetch = FetchType.EAGER)
private List<OptionDetail> optionDetailList;
public MenuOptionResponseDto toResponseDto() {
return MenuOptionResponseDto.builder()
.optionId(optionId)
.title(title)
.optionDetailList(optionDetailList
.stream()
.map(OptionDetail::toResponseDto)
.collect(Collectors.toList()))
.build();
}
}

View File

@@ -0,0 +1,22 @@
package io.beaniejoy.dongnecafe.domain.cafe.domain
import io.beaniejoy.dongnecafe.common.domain.BaseTimeEntity
import javax.persistence.*
@Entity
@Table(name = "menu_option")
class MenuOption(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = 0L,
@Column(name = "title", nullable = false)
val title: String,
@ManyToOne
@JoinColumn(name = "menu_id", nullable = false)
val cafeMenu: CafeMenu,
@OneToMany(mappedBy = "menuOption", fetch = FetchType.EAGER)
val optionDetailList: MutableList<OptionDetail>
) : BaseTimeEntity()

View File

@@ -1,38 +0,0 @@
package io.beaniejoy.dongnecafe.domain.cafe.domain;
import io.beaniejoy.dongnecafe.domain.cafe.dto.menu.OptionDetailResponseDto;
import io.beaniejoy.dongnecafe.common.domain.BaseTimeEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class OptionDetail extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long optionDetailId;
private String name;
private Integer extra;
@ManyToOne
@JoinColumn(name = "option_id")
private MenuOption menuOption;
public OptionDetailResponseDto toResponseDto() {
return OptionDetailResponseDto.builder()
.optionDetailId(optionDetailId)
.name(name)
.extra(extra)
.build();
}
}

View File

@@ -0,0 +1,24 @@
package io.beaniejoy.dongnecafe.domain.cafe.domain
import io.beaniejoy.dongnecafe.common.domain.BaseTimeEntity
import java.math.BigDecimal
import javax.persistence.*
@Entity
@Table(name = "option_detail")
class OptionDetail(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = 0L,
@Column(name = "name", nullable = false)
val name: String,
@Column(name = "extra", nullable = false)
val extra: BigDecimal,
@ManyToOne
@JoinColumn(name = "option_id", nullable = false)
val menuOption: MenuOption
): BaseTimeEntity() {
}

View File

@@ -13,7 +13,7 @@ data class CafeMenuDetailResponseDto(
return CafeMenuDetailResponseDto(
name = cafeMenu.name,
price = cafeMenu.price,
optionList = cafeMenu.menuOptionList.map { it.toResponseDto() }
optionList = cafeMenu.menuOptionList.map { MenuOptionResponseDto.of(it) }
)
}
}

View File

@@ -1,22 +0,0 @@
package io.beaniejoy.dongnecafe.domain.cafe.dto.menu;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.UUID;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MenuOptionResponseDto {
private UUID optionId;
private String title;
private List<OptionDetailResponseDto> optionDetailList;
}

View File

@@ -0,0 +1,19 @@
package io.beaniejoy.dongnecafe.domain.cafe.dto.menu
import io.beaniejoy.dongnecafe.domain.cafe.domain.MenuOption
data class MenuOptionResponseDto(
val id: Long = 0L,
val title: String? = null,
val optionDetailList: List<OptionDetailResponseDto> = emptyList()
) {
companion object {
fun of(menuOption: MenuOption): MenuOptionResponseDto {
return MenuOptionResponseDto(
id = menuOption.id,
title = menuOption.title,
optionDetailList = menuOption.optionDetailList.map { OptionDetailResponseDto.of(it) }
)
}
}
}

View File

@@ -1,19 +0,0 @@
package io.beaniejoy.dongnecafe.domain.cafe.dto.menu;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OptionDetailResponseDto {
private Long optionDetailId;
private String name;
private Integer extra;
}

View File

@@ -0,0 +1,20 @@
package io.beaniejoy.dongnecafe.domain.cafe.dto.menu
import io.beaniejoy.dongnecafe.domain.cafe.domain.OptionDetail
import java.math.BigDecimal
data class OptionDetailResponseDto(
val id: Long = 0L,
val name: String? = null,
val extra: BigDecimal = BigDecimal.ZERO
) {
companion object {
fun of(optionDetail: OptionDetail): OptionDetailResponseDto {
return OptionDetailResponseDto(
id = optionDetail.id,
name = optionDetail.name,
extra = optionDetail.extra
)
}
}
}