diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt index 5752f90..0027cee 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt @@ -61,7 +61,7 @@ class Cafe protected constructor( } fun addCafeMenu(cafeMenu: CafeMenu) { - cafeMenuList.add(cafeMenu) + this.cafeMenuList.add(cafeMenu) cafeMenu.updateCafe(this) } diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt index 5c5e559..bf943cf 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt @@ -6,7 +6,7 @@ import javax.persistence.* @Entity @Table(name = "cafe_menu") -class CafeMenu( +class CafeMenu protected constructor( name: String, price: BigDecimal, ) : BaseTimeEntity() { @@ -29,15 +29,22 @@ class CafeMenu( val menuOptionList: MutableList = arrayListOf() companion object { - fun createCafeMenu(name: String, price: BigDecimal): CafeMenu { + fun createCafeMenu(name: String, price: BigDecimal, menuOptionList: List): CafeMenu { return CafeMenu( name = name, price = price - ) + ).apply { + menuOptionList.forEach { this.addMenuOption(it) } + } } } fun updateCafe(cafe: Cafe) { this.cafe = cafe } + + fun addMenuOption(menuOption: MenuOption) { + this.menuOptionList.add(menuOption) + menuOption.updateCafeMenu(this) + } } \ No newline at end of file diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt index 303e4b8..37938fd 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt @@ -5,18 +5,40 @@ import javax.persistence.* @Entity @Table(name = "menu_option") -class MenuOption( +class MenuOption protected constructor( + title: String +) : BaseTimeEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - val id: Long = 0L, + val id: Long = 0L @Column(name = "title", nullable = false) - val title: String, + val title: String = title @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "menu_id", nullable = false) - val cafeMenu: CafeMenu, + var cafeMenu: CafeMenu? = null + protected set @OneToMany(mappedBy = "menuOption", fetch = FetchType.EAGER, cascade = [CascadeType.ALL]) - val optionDetailList: MutableList -) : BaseTimeEntity() \ No newline at end of file + val optionDetailList: MutableList = arrayListOf() + + companion object { + fun createMenuOption(title: String, optionDetailList: List): MenuOption { + return MenuOption( + title = title + ).apply { + optionDetailList.forEach { this.addOptionDetail(it) } + } + } + } + + fun updateCafeMenu(cafeMenu: CafeMenu) { + this.cafeMenu = cafeMenu + } + + fun addOptionDetail(optionDetail: OptionDetail) { + this.optionDetailList.add(optionDetail) + optionDetail.updateMenuOption(this) + } +} \ No newline at end of file diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt index 3224480..59b83f0 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt @@ -6,18 +6,35 @@ import javax.persistence.* @Entity @Table(name = "option_detail") -class OptionDetail( +class OptionDetail protected constructor( + name: String, + extraPrice: BigDecimal +) : BaseTimeEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - val id: Long = 0L, + val id: Long = 0L @Column(name = "name", nullable = false) - val name: String, + val name: String = name @Column(name = "extra_price", nullable = false) - val extraPrice: BigDecimal, + val extraPrice: BigDecimal = extraPrice @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "option_id", nullable = false) - val menuOption: MenuOption -): BaseTimeEntity() \ No newline at end of file + var menuOption: MenuOption? = null + protected set + + companion object { + fun createOptionDetail(name: String, extraPrice: BigDecimal): OptionDetail { + return OptionDetail( + name = name, + extraPrice = extraPrice + ) + } + } + + fun updateMenuOption(menuOption: MenuOption) { + this.menuOption = menuOption + } +} \ No newline at end of file diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeService.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeService.kt index d21f582..309c0c7 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeService.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeService.kt @@ -31,6 +31,8 @@ class CafeService( ): Long { checkCafeExistedByName(name) + + val cafeMenuList = cafeMenuRequestList.map { CafeMenu.createCafeMenu(it.name!!, it.price) }