Optional<SneakerStock> findBySneakerAndSize(Sneaker sneaker, int size);
private void saveSneakerItem(ServiceDrawSaveDto drawSaveRequest, Long sneakerId, Sneaker sneaker, Draw draw) {
drawSaveRequest.sneakerItems().forEach(
(sneakerItem) -> {
int size = sneakerItem.size();
SneakerStock sneakerStock = sneakerStockRepository.findBySneakerAndSize(sneaker, size)
.orElseThrow(() -> new EntityNotFoundException(
format("SneakerStock 엔티티를 sneaker 와 size 로 찾을 수 없습니다. sneakerId : {0}, size : {1}", sneakerId, size)));
// SneakerStock 에서 재고를 가지고와 SneakerItem 을 만든다.
Stock stock = sneakerStock.getStock();
stock.decreaseQuantityBy(sneakerItem.quantity());
sneakerStockRepository.flush();
sneakerItemRepository.save(
SneakerItem.builder()
.sneakerStock(sneakerStock)
.quantity(sneakerItem.quantity())
.draw(draw)
.size(size)
.build()
);
}
);
}
추후 코드 개선을 시도하였지만 실패하였다. erd 초기 설계가 중요한것 같다.