데브코스 : 1차 프로젝트 (4일차)

슬키·2025년 12월 18일

🗓️ 4일차 할 일 목록

  • User 생성 시 setter 대신 Builder 패턴 적용
  • 기존 주문이 존재할 경우
    (같은 유저, 같은 상품) → quantity 누적 처리

드디어 다른 팀원이 유저 도메인 구현을 완료해서
main 브랜치에 머지가 되었고,
그 덕분에 유저 관련 코드를 Builder 패턴으로 리팩토링할 수 있게 되었다.

다만 오전에 main에서 pull 받은 내용을 merge 하는 과정에서
어제 만들어둔 로컬 파일이 전부 날아가고,
커밋해둔 내용도 충돌 해결하다가 일부가 사라지는 사고가 있었다… 😭

어제 작성했던 내용을 복구하느라 생각보다 시간이 꽤 소요됐다.
그나마 다행이었던 점은
벨로그에 중간중간 기록해둔 내용 덕분에 복구 속도가 빨랐다는 것이다.


5️⃣ User 생성 시 setter 대신 Builder 패턴 적용

  • main 브랜치 merge 후 OrderService 코드 수정
  • 기존 setter 방식 대신 Builder 패턴으로 유저 생성 처리
// 유저 생성
User user = userRepository.findByEmail(email)
        .orElseGet(() ->
                userRepository.save(
                        User.builder()
                                .email(email)
                                .address(address)
                                .zipcode(zipcode)
                                .build()
                )
        );          

6️⃣ 기존 주문이 존재할 경우 quantity 누적 처리

  • addQuantity 메서드 추가
  • 주문 생성 전 다음 조건으로 기존 주문 여부를 확인
    • 같은 유저
    • 같은 상품
    • 같은 shipmentId
    • 상태가 READY
  • 조건에 맞는 주문이 있으면 quantity 누적
  • 조건에 맞는 주문이 없으면 새로운 주문 생성

OrderService.java

// 같은 상품 + 같은 shipmentId + READY 주문 있는지 확인
Optional<Order> existingOrder =
        orderRepository.findByUserAndProductAndShipmentIdAndStatus(
                user,
                product,
                shipmentId,
                OrderStatus.READY
        );

// 있으면 quantity 누적
if (existingOrder.isPresent()) {
    Order order = existingOrder.get();
    order.addQuantity(quantity);
    return OrderResponse.from(order);
}

// 없을 경우 주문 생성
Order order = Order.builder()
        .shipmentId(shipmentId)
        .user(user)
        .product(product)
        .quantity(quantity)
        .totalPrice(product.getCost() * quantity)
        .status(OrderStatus.READY)
        .build();

➕ 추가 작업

유저별 주문 조회 정렬 순서 변경

  • 기존: 주문이 역순으로 조회됨
  • 변경: 주문이 시간 순서대로 조회되도록 수정
image
profile
풀스택 개발자 성장일기

0개의 댓글