원하는 user의 주문 정보를 받아오는 함수 구현!
<UserOrderInfoApiResponse>
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserOrderInfoApiResponse {
private UserApiResponse userApiResponser;
//userApiResponser 에는 private List<OrderGroupApiResponse> orderGroupApiResponseList; 존재
OrderGroupApiResponse에는 private List<ItemApiResponse> itemApiResponseList; 존재
}
<UserApiController>
@RequestMapping("/api/user")
public class UserApiController implements CrudInterface<UserApiRequest,UserApiResponse> {
@Autowired
private UserApiLogicService userApiLogicService;
@GetMapping("{id}/orderInfo")
public Header<UserOrderInfoApiResponse> orderInfo(@PathVariable Long id){
return userApiLogicService.orderInfo(id);
// id를 통해 userApiService의 orderInfo에 접근.
}
}
<UserApiLogicService>
public Header<UserOrderInfoApiResponse> orderInfo(Long id) {
//user
User user = userRepository.getOne(id);
// id로 User 객체를 찾아냄.
UserApiResponse userApiResponse = response2(user);
// 해당 유저 객체를 UserApiResponse로 바꿔줌.
//orderGroup
List<OrderGroup> orderGroupList = user.getOrderGroupList();
//현재 유저가 가지고 있는 orderGroup의 list를 빼옴.
List<OrderGroupApiResponse> orderGroupApiResponseList = orderGroupList.stream()
.map(orderGroup -> {
OrderGroupApiResponse orderGroupApiResponse = orderGroupLogicService.response(orderGroup).getData();
//orderGroupList에 있는 orderGroup하나 하나를 orderGroupApiResponse로 바꿔주고
해당 orderGroup의 itemList를 뽑아 내는데 item또한 ItemApiResponse로 뽑아야 함.
따라서 orderGroup의 Detail에서 item을 뽑아서 그 item을 itemApiResponse로 바꾼 List를 뽑아냄.
현재 하나의 orderGroupApiResponse에 itemApiResponse의 List를 저장시키고 이 orderGroupApiResponse를 return시킴
그리고 이것들을 collect해서 List로 변환 한것이 결국 List<OrderGroupApiResponse> orderGroupApiResponseList에 들어감.
//item
List<ItemApiResponse> itemApiResponseList = orderGroup.getOrderDetailList().stream()
.map(detail -> detail.getItem())
.map(item -> itemApiLogicService.response(item).getData() )
.collect(Collectors.toList());
orderGroupApiResponse.setItemApiResponseList(itemApiResponseList);
return orderGroupApiResponse;
})
.collect(Collectors.toList());
//itemApiResponseList가 채워진 orderGroupApiResponseList가 userApiResponse에 세팅됨.
//user에 group명 지정
userApiResponse.setOrderGroupApiResponseList(orderGroupApiResponseList);
UserOrderInfoApiResponse userOrderInfoApiResponse = UserOrderInfoApiResponse.builder()
.userApiResponser(userApiResponse)
.build();
//userOrderInfoApiResponse에 해당 userApiResponse에 세팅시킴.
그리고 이것을 Header형태로 반환시킴.
return Header.OK(userOrderInfoApiResponse);
}
'Spring' 카테고리의 다른 글
프레임 워크 개념 (0) | 2019.12.17 |
---|---|
스프링 부트 프로젝트 (Architecture & TDD & REST API) (0) | 2019.11.24 |
페이징 처리 (0) | 2019.11.18 |
Controller 추상화 (0) | 2019.11.17 |
Code Refactoring : JPA Enum 형태 관리 (0) | 2019.11.17 |