From d9bafc8e80fce98c5236b755917d7ec17fbe5d21 Mon Sep 17 00:00:00 2001 From: beaniejoy Date: Wed, 27 Jul 2022 02:48:55 +0900 Subject: [PATCH] =?UTF-8?q?[#8]=20feat:=20=EC=B9=B4=ED=8E=98=20=EC=8B=A0?= =?UTF-8?q?=EA=B7=9C=20=EC=83=9D=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Cafe 관련 연관관계 엔티티 생성 로직 추가(CafeMenu, MenuOption, OptionDetail) --- .../dongnecafe/domain/cafe/entity/Cafe.kt | 2 +- .../dongnecafe/domain/cafe/entity/CafeMenu.kt | 13 +++++-- .../domain/cafe/entity/MenuOption.kt | 34 +++++++++++++++---- .../domain/cafe/entity/OptionDetail.kt | 29 ++++++++++++---- .../domain/cafe/service/CafeService.kt | 2 ++ 5 files changed, 64 insertions(+), 16 deletions(-) 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) }