Skip to content

Commit

Permalink
refactor Java에서 Entity 연관관계 설정 #12
Browse files Browse the repository at this point in the history
  • Loading branch information
rookedsysc committed Oct 21, 2023
1 parent 121bf21 commit f98f5ef
Show file tree
Hide file tree
Showing 11 changed files with 195 additions and 155 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.delivery.api.domain.storemenu.business;

import lombok.RequiredArgsConstructor;
import org.delivery.api.domain.store.service.StoreService;
import org.delivery.common.annotation.Business;
import org.delivery.api.domain.storemenu.controller.model.StoreMenuRegisterRequest;
import org.delivery.api.domain.storemenu.controller.model.StoreMenuResponse;
Expand All @@ -16,13 +17,15 @@ public class StoreMenuBusiness {

private final StoreMenuService storeMenuService;
private final StoreMenuConverter storeMenuConverter;
private final StoreService storeService;


public StoreMenuResponse register(
StoreMenuRegisterRequest request
){
var storeEntity = storeService.getStoreWithThrow(request.getStoreId());
// req -> entity -> save -> response
var entity = storeMenuConverter.toEntity(request);
var entity = storeMenuConverter.toEntity(request, storeEntity);
var newEntity = storeMenuService.register(entity);
var response = storeMenuConverter.toResponse(newEntity);
return response;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.delivery.common.exception.ApiException;
import org.delivery.api.domain.storemenu.controller.model.StoreMenuRegisterRequest;
import org.delivery.api.domain.storemenu.controller.model.StoreMenuResponse;
import org.delivery.db.store.StoreEntity;
import org.delivery.db.storemenu.StoreMenuEntity;

import java.util.List;
Expand All @@ -14,13 +15,13 @@
@Converter
public class StoreMenuConverter {

public StoreMenuEntity toEntity(StoreMenuRegisterRequest request){
public StoreMenuEntity toEntity(StoreMenuRegisterRequest request, StoreEntity storeEntity){

return Optional.ofNullable(request)
.map(it ->{

return StoreMenuEntity.builder()
.storeId(request.getStoreId())
.store(storeEntity)
.name(request.getName())
.amount(request.getAmount())
.thumbnailUrl(request.getThumbnailUrl())
Expand All @@ -40,7 +41,7 @@ public StoreMenuResponse toResponse(
return StoreMenuResponse.builder()
.id(storeMenuEntity.getId())
.name(storeMenuEntity.getName())
.storeId(storeMenuEntity.getStoreId())
.storeId(storeMenuEntity.getStore().getId())
.amount(storeMenuEntity.getAmount())
.status(storeMenuEntity.getStatus())
.thumbnailUrl(storeMenuEntity.getThumbnailUrl())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import org.delivery.api.domain.userorder.service.UserOrderService;
import org.delivery.api.domain.userordermenu.converter.UserOrderMenuConverter;
import org.delivery.api.domain.userordermenu.service.UserOrderMenuService;
import org.delivery.db.store.StoreEntity;

import java.util.List;
import java.util.stream.Collectors;
Expand All @@ -24,138 +23,160 @@
@Business
public class UserOrderBusiness {

private final UserOrderService userOrderService;
private final UserOrderService userOrderService;

private final UserOrderConverter userOrderConverter;

private final StoreMenuService storeMenuService;
private final StoreMenuConverter storeMenuConverter;

private final UserOrderMenuConverter userOrderMenuConverter;
private final UserOrderMenuService userOrderMenuService;
private final UserOrderConverter userOrderConverter;

private final StoreService storeService;
private final StoreRegisterConverter storeConverter;
private final StoreMenuService storeMenuService;
private final StoreMenuConverter storeMenuConverter;

private final UserOrderProducer userOrderProducer;
private final UserOrderMenuConverter userOrderMenuConverter;
private final UserOrderMenuService userOrderMenuService;

private final StoreService storeService;
private final StoreRegisterConverter storeConverter;

// 1. 사용자 , 메뉴 id
// 2. userOrder 생성
// 3. userOrderMenu 생성
// 4. 응답 생성
public UserOrderResponse userOrder(User user, UserOrderRequest body) {
var storeMenuEntityList = body.getStoreMenuIdList()
.stream()
.map(it -> storeMenuService.getStoreMenuWithThrow(it))
.collect(Collectors.toList());
private final UserOrderProducer userOrderProducer;

var userOrderEntity = userOrderConverter.toEntity(user, body.getStoreId(),storeMenuEntityList);

// 주문
var newUserOrderEntity = userOrderService.order(userOrderEntity);
// 1. 사용자 , 메뉴 id
// 2. userOrder 생성
// 3. userOrderMenu 생성
// 4. 응답 생성
public UserOrderResponse userOrder(User user, UserOrderRequest body) {
var storeEntity = storeService.getStoreWithThrow(body.getStoreId());

// 맵핑
var userOrderMenuEntityList = storeMenuEntityList.stream()
.map(it ->{
// menu +user order
var userOrderMenuEntity = userOrderMenuConverter.toEntity(newUserOrderEntity, it);
return userOrderMenuEntity;
})
.collect(Collectors.toList());
var storeMenuEntityList = body.getStoreMenuIdList()
.stream()
.map(it -> storeMenuService.getStoreMenuWithThrow(it))
.collect(Collectors.toList());

// 주문내역 기록 남기기
userOrderMenuEntityList.forEach(it ->{
userOrderMenuService.order(it);
});
var userOrderEntity = userOrderConverter.toEntity(user, storeEntity, storeMenuEntityList);

// 비동기로 사용자의 주문을 처리한다.
userOrderProducer.sendOrder(newUserOrderEntity);
// 주문
var newUserOrderEntity = userOrderService.order(userOrderEntity);

// response
return userOrderConverter.toResponse(newUserOrderEntity);
}
// 맵핑
var userOrderMenuEntityList = storeMenuEntityList.stream()
.map(it -> {
// menu +user order
var userOrderMenuEntity = userOrderMenuConverter.toEntity(newUserOrderEntity, it);
return userOrderMenuEntity;
})
.collect(Collectors.toList());

public List<UserOrderDetailResponse> current(User user) {
// 주문내역 기록 남기기
userOrderMenuEntityList.forEach(it -> {
userOrderMenuService.order(it);
});

var userOrderEntityList = userOrderService.current(user.getId());
// 비동기로 사용자의 주문을 처리한다.
userOrderProducer.sendOrder(newUserOrderEntity);

// 주문 1건씩 처리
var userOrderDetailResponseList = userOrderEntityList.stream().map(it ->{
// 사용자가 주문 메뉴
var userOrderMenuEntityList = userOrderMenuService.getUserOrderMenu(it.getId());
var storeMenuEntityList = userOrderMenuEntityList.stream()
.map(userOrderMenuEntity ->{
var storeMenuEntity = storeMenuService.getStoreMenuWithThrow(userOrderMenuEntity.getStoreMenuId());
return storeMenuEntity;
})
.collect(Collectors.toList());
// response
return userOrderConverter.toResponse(newUserOrderEntity);
}

// 사용자가 주문한 스토어 TODO 리팩토링 필요
var storeEntity = storeService.getStoreWithThrow(storeMenuEntityList.stream().findFirst().get().getStoreId());
public List<UserOrderDetailResponse> current(User user) {

return UserOrderDetailResponse.builder()
.userOrderResponse(userOrderConverter.toResponse(it))
.storeMenuResponseList(storeMenuConverter.toResponse(storeMenuEntityList))
.storeResponse(storeConverter.toResponse(storeEntity))
.build()
;
}).collect(Collectors.toList());
var userOrderEntityList = userOrderService.current(user.getId());

return userOrderDetailResponseList;
}

public List<UserOrderDetailResponse> history(User user) {

var userOrderEntityList = userOrderService.history(user.getId());

// 주문 1건씩 처리
var userOrderDetailResponseList = userOrderEntityList.stream().map(it ->{
// 사용자가 주문 메뉴
var userOrderMenuEntityList = userOrderMenuService.getUserOrderMenu(it.getId());
var storeMenuEntityList = userOrderMenuEntityList.stream()
.map(userOrderMenuEntity ->{
var storeMenuEntity = storeMenuService.getStoreMenuWithThrow(userOrderMenuEntity.getStoreMenuId());
return storeMenuEntity;
})
.collect(Collectors.toList());

// 사용자가 주문한 스토어 TODO 리팩토링 필요
var storeEntity = storeService.getStoreWithThrow(storeMenuEntityList.stream().findFirst().get().getStoreId());

return UserOrderDetailResponse.builder()
.userOrderResponse(userOrderConverter.toResponse(it))
.storeMenuResponseList(storeMenuConverter.toResponse(storeMenuEntityList))
.storeResponse(storeConverter.toResponse(storeEntity))
.build()
;
}).collect(Collectors.toList());

return userOrderDetailResponseList;
}

public UserOrderDetailResponse read(User user, Long orderId) {

var userOrderEntity = userOrderService.getUserOrderWithOutStatusWithThrow(orderId, user.getId());

// 사용자가 주문한 메뉴
var userOrderMenuEntityList = userOrderMenuService.getUserOrderMenu(userOrderEntity.getId());

var storeMenuEntityList = userOrderMenuEntityList.stream()
.map(userOrderMenuEntity ->{
var storeMenuEntity = storeMenuService.getStoreMenuWithThrow(userOrderMenuEntity.getStoreMenuId());
// 주문 1건씩 처리
var userOrderDetailResponseList = userOrderEntityList.stream()
.map(it -> {
// 사용자가 주문 메뉴
var userOrderMenuEntityList = userOrderMenuService.getUserOrderMenu(it.getId());
var storeMenuEntityList = userOrderMenuEntityList.stream()
.map(userOrderMenuEntity -> {
var storeMenuEntity = storeMenuService.getStoreMenuWithThrow(userOrderMenuEntity.getStoreMenu()
.getId());
return storeMenuEntity;
})
.collect(Collectors.toList());

// 사용자가 주문한 스토어 TODO 리팩토링 필요
// TODO 디미터 법칙 위반
var storeEntity = storeService.getStoreWithThrow(storeMenuEntityList.stream()
.findFirst()
.get()
.getStore()
.getId());

return UserOrderDetailResponse.builder()
.userOrderResponse(userOrderConverter.toResponse(it))
.storeMenuResponseList(storeMenuConverter.toResponse(storeMenuEntityList))
.storeResponse(storeConverter.toResponse(storeEntity))
.build()
;
})
.collect(Collectors.toList());

return userOrderDetailResponseList;
}

public List<UserOrderDetailResponse> history(User user) {

var userOrderEntityList = userOrderService.history(user.getId());

// 주문 1건씩 처리
var userOrderDetailResponseList = userOrderEntityList.stream()
.map(it -> {
// 사용자가 주문 메뉴
var userOrderMenuEntityList = userOrderMenuService.getUserOrderMenu(it.getId());
var storeMenuEntityList = userOrderMenuEntityList.stream()
.map(userOrderMenuEntity -> {
var storeMenuEntity = storeMenuService.getStoreMenuWithThrow(userOrderMenuEntity.getStoreMenu()
.getId());
return storeMenuEntity;
})
.collect(Collectors.toList());

// 사용자가 주문한 스토어 TODO 리팩토링 필요
var storeEntity = storeService.getStoreWithThrow(storeMenuEntityList.stream().findFirst().get().getStoreId());

return UserOrderDetailResponse.builder()
.userOrderResponse(userOrderConverter.toResponse(userOrderEntity))
.storeMenuResponseList(storeMenuConverter.toResponse(storeMenuEntityList))
.storeResponse(storeConverter.toResponse(storeEntity))
.build()
;
}
})
.collect(Collectors.toList());

// 사용자가 주문한 스토어 TODO 리팩토링 필요
// TODO 디미터 법칙 위반
var storeEntity = storeService.getStoreWithThrow(storeMenuEntityList.stream()
.findFirst()
.get()
.getStore().getId());

return UserOrderDetailResponse.builder()
.userOrderResponse(userOrderConverter.toResponse(it))
.storeMenuResponseList(storeMenuConverter.toResponse(storeMenuEntityList))
.storeResponse(storeConverter.toResponse(storeEntity))
.build()
;
})
.collect(Collectors.toList());

return userOrderDetailResponseList;
}

public UserOrderDetailResponse read(User user, Long orderId) {

var userOrderEntity = userOrderService.getUserOrderWithOutStatusWithThrow(orderId, user.getId());

// 사용자가 주문한 메뉴
var userOrderMenuEntityList = userOrderMenuService.getUserOrderMenu(userOrderEntity.getId());

var storeMenuEntityList = userOrderMenuEntityList.stream()
.map(userOrderMenuEntity -> {
var storeMenuEntity = storeMenuService.getStoreMenuWithThrow(userOrderMenuEntity.getStoreMenu()
.getId());
return storeMenuEntity;
})
.collect(Collectors.toList());

// 사용자가 주문한 스토어 TODO 리팩토링 필요
// TODO 디미터 법칙 위반
var storeEntity = storeService.getStoreWithThrow(storeMenuEntityList.stream()
.findFirst()
.get()
.getStore().getId());

return UserOrderDetailResponse.builder()
.userOrderResponse(userOrderConverter.toResponse(userOrderEntity))
.storeMenuResponseList(storeMenuConverter.toResponse(storeMenuEntityList))
.storeResponse(storeConverter.toResponse(storeEntity))
.build()
;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import org.delivery.common.annotation.Converter;
import org.delivery.api.domain.user.model.User;
import org.delivery.api.domain.userorder.controller.model.UserOrderResponse;
import org.delivery.db.store.StoreEntity;
import org.delivery.db.storemenu.StoreMenuEntity;
import org.delivery.db.userorderid.UserOrderEntity;

Expand All @@ -14,7 +15,7 @@ public class UserOrderConverter {

public UserOrderEntity toEntity(
User user,
Long storeId,
StoreEntity storeEntity,
List<StoreMenuEntity> storeMenuEntityList
){
var totalAmount = storeMenuEntityList.stream()
Expand All @@ -23,7 +24,7 @@ public UserOrderEntity toEntity(

return UserOrderEntity.builder()
.userId(user.getId())
.storeId(storeId)
.storeEntity(storeEntity)
.amount(totalAmount)
.build()
;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ public UserOrderMenuEntity toEntity(
StoreMenuEntity storeMenuEntity
){
return UserOrderMenuEntity.builder()
.userOrderId(userOrderEntity.getId())
.storeMenuId(storeMenuEntity.getId())
.userOrder(userOrderEntity)
.storeMenu(storeMenuEntity)
.build()
;
}
Expand Down

0 comments on commit f98f5ef

Please sign in to comment.