본문 바로가기
❤️‍🔥TIL (Today I Learned)

[TIL] 2023-01-20(60day) / 프로젝트(5day)

by elicho91 2023. 1. 23.

👉  OrderServiceImpl

    @Override
    @Transactional
    public CreateOrderResponseDto createOrder(CreateOrderRequestDto requestDto, String userId) {
        int totalAmount = 0;
        String sellerId = "";
        Order order = new Order();
        orderRepository.save(order);

        List<OrderItem> orderItemList = new ArrayList<>();
        for (int i = 0; i < requestDto.getProductId().size(); i++) {
            Product product = productRepository.findByProductId(requestDto.getProductId().get(i)).orElseThrow(
                    () -> new IllegalArgumentException("존재하지 않는 상품입니다.")
            );
            sellerId = product.getUserId();
            int amount = product.getPrice() * requestDto.getQuantity().get(i);
            totalAmount += amount;
            OrderItem orderItem = new OrderItem(sellerId, product.getProductId(), requestDto.getQuantity().get(i), amount, order);
            orderItemList.add(orderItem);
            orderItemRepository.save(orderItem);
        }
        ShippingInfo shippingInfo = shippingInfoRepository.findByShippingInfoId(requestDto.getShippingInfoId()).orElseThrow(
                () -> new IllegalArgumentException("배송정보가 존재하지 않습니다.")
        );
        Point point = pointRepository.findByUserId(userId).orElseThrow(
                () -> new IllegalArgumentException("포인트가 존재하지 않습니다.")
        );
        point.subtractPoint(requestDto.getPoint());
        order.putDatasInOrder(userId, sellerId, totalAmount - requestDto.getPoint(), requestDto.getShippingInfoId());
        orderRepository.save(order);
        return new CreateOrderResponseDto(order, orderItemList, shippingInfo);
    }

 

👉  Point

    public void subtractPoint(int point) {
        if (this.point < point) throw new IllegalArgumentException("포인트 잔액이 부족합니다.");
        this.point -= point;
    }

🙋‍♂️ 소감 : 

주문 시 포인트 사용을 구현하다가 UsePointRequest로 보낸 포인트가 여러 상품이 주문되었을 때,  주문 값에서 넘겨받은 포인트 받은 값만큼만 적용되는 것이 아니고, 각 주문 리스트마다 적용되어 주문 리스트 * 포인트 값만큼 이 적용되었다.
한참을 고민해 보고 다른 팀원분께 부탁을 했는데, 완성된 코드를 보니 내가 각 상품별 주문 리스트를 뽑아내는 반복문에 적용을 해놔서 상품별로 포인트가 중복으로 적용되는 것이었다 ㅠㅠ
주문 서비스 로직은 다른 팀원분이 작성해 놓으신 거고 거기에 포인트 사용 로직을 추가하면 되는 것이었는데, 전체적인 로직을 보지 못하고 무작정 포인트에 관한 부분만 추가를 하려고 했더니 이런 불상사가 일어나고 말았다 ㅠㅠ
프로젝트는 내가 구현한 코드만 보는 것이 아니라 다른 팀원분들이 만든 코드도 꼼꼼히 살펴봐야 한다는 것을 새삼스럽게 느꼈다.

😈 아는 내용이라고 그냥 넘어가지 않기! 😈

 

댓글