Skip to content

Conversation

@seojelee9999
Copy link
Contributor

@seojelee9999 seojelee9999 commented Dec 30, 2025

✨ 변경 사항


✅ 테스트


  • 수동 테스트 완료
  • 테스트 코드 완료

Summary by CodeRabbit

릴리스 노트

새로운 기능

  • 주문 생성, 조회 및 관리 기능 추가
  • 주문 상태 관리 기능 (조리중 → 수령대기 → 주문완료) 추가
  • 메뉴 재고 차감 및 품절 관리 기능 추가
  • 관리자 전용 주문 상태 업데이트 API 추가
  • 사용자별 주문 조회 기능 추가

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Dec 30, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

주문 관리 기능을 구현하는 변경사항입니다. 주문 엔티티, 저장소, 서비스, REST 컨트롤러를 추가하고, 주문 생성 시 메뉴 재고를 감소시키며, 주문 항목의 상태 전환 기능을 제공합니다.

Changes

Cohort / File(s) 변경 내용
엔티티 및 Enum
src/main/java/com/campustable/be/domain/order/entity/Order.java, src/main/java/com/campustable/be/domain/order/entity/OrderItem.java, src/main/java/com/campustable/be/domain/order/entity/OrderStatus.java
Order 엔티티 생성, 양방향 관계 설정, OrderItem 엔티티 추가 (상태 관리, 가격 계산), OrderStatus 열거형 정의 (조리 중/수령 대기/주문 완료)
저장소 계층
src/main/java/com/campustable/be/domain/order/repository/OrderRepository.java, src/main/java/com/campustable/be/domain/order/repository/OrderItemRepository.java
OrderRepository 및 OrderItemRepository 추가, 사용자 ID 및 카테고리별 조회 메서드 구현
DTO 계층
src/main/java/com/campustable/be/domain/order/dto/OrderResponse.java, src/main/java/com/campustable/be/domain/order/dto/OrderItemDto.java
주문 및 주문 항목 응답 DTO 추가, 엔티티 매핑 로직 포함
서비스 계층
src/main/java/com/campustable/be/domain/order/service/OrderService.java
주문 생성, 상태 업데이트, 조회 기능 포함, 재고 감소 처리, 장바구니 클리어 로직
컨트롤러 및 문서화
src/main/java/com/campustable/be/domain/order/controller/OrderController.java, src/main/java/com/campustable/be/domain/order/controller/OrderControllerDocs.java
REST 엔드포인트 구현 (POST, PATCH, GET), Swagger 문서화 인터페이스, 권한 검증 (ROLE_ADMIN)
메뉴 및 설정 수정
src/main/java/com/campustable/be/domain/menu/entity/Menu.java, src/main/java/com/campustable/be/global/config/SecurityConfig.java
Menu에 decreaseStockQuantity 메서드 추가 (재고 검증, 품절 표시), @EnableMethodSecurity 어노테이션 추가
예외 처리
src/main/java/com/campustable/be/global/exception/ErrorCode.java
MENU_OUT_OF_STOCK, INVALID_ORDER_STATUS, ORDER_NOT_FOUND, ORDER_ITEM_NOT_FOUND 에러 코드 추가

Sequence Diagram(s)

sequenceDiagram
    actor Client
    participant OrderController
    participant OrderService
    participant CartRepository
    participant MenuRepository
    participant OrderRepository
    participant OrderItemRepository
    participant Database

    Client->>OrderController: POST /api/orders
    OrderController->>OrderService: createOrder()
    OrderService->>OrderService: 현재 사용자 조회
    OrderService->>CartRepository: 사용자의 장바구니 조회
    
    rect rgb(200, 220, 255)
        Note over OrderService,Database: 장바구니 항목 검증 및 처리
        OrderService->>OrderService: 장바구니 비어있음 확인
        
        loop 각 장바구니 항목마다
            OrderService->>MenuRepository: 메뉴 조회
            OrderService->>MenuRepository: decreaseStockQuantity(수량)
            
            alt 재고 부족
                MenuRepository-->>OrderService: CustomException (MENU_OUT_OF_STOCK)
                OrderService-->>Client: 400 Bad Request
            else 재고 충분
                MenuRepository->>Database: 재고 감소, 필요시 품절 표시
            end
            
            OrderService->>OrderService: OrderItem 생성
        end
    end
    
    rect rgb(200, 255, 220)
        Note over OrderService,Database: 주문 저장 및 정리
        OrderService->>OrderRepository: createOrder(사용자, 항목들)
        OrderRepository->>Database: Order 엔티티 저장 (CASCADE로 OrderItem도 저장)
        OrderService->>CartRepository: 장바구니 항목 삭제
        OrderService->>CartRepository: 장바구니 엔티티 삭제
    end
    
    OrderService-->>OrderController: OrderResponse 반환
    OrderController-->>Client: 201 Created + 주문 정보
Loading
sequenceDiagram
    actor AdminClient
    participant OrderController
    participant OrderService
    participant OrderItemRepository
    participant Database

    AdminClient->>OrderController: PATCH /api/orders/{orderId}/categories/{categoryId}/ready
    
    rect rgb(200, 220, 255)
        Note over OrderController,Database: 권한 검증 및 상태 업데이트
        OrderController->>OrderController: `@PreAuthorize` 권한 확인
        
        alt 관리자 권한 없음
            OrderController-->>AdminClient: 403 Forbidden
        else 관리자 권한 있음
            OrderController->>OrderService: updateCategoryToReady(orderId, categoryId)
            OrderService->>OrderItemRepository: findByOrderOrderIdAndCategoryId()
            OrderItemRepository->>Database: 주문 항목 조회
            
            OrderService->>OrderService: 항목 존재 확인
            
            loop 각 주문 항목마다
                OrderService->>OrderService: markAsReady() 호출 (PREPARING → READY)
                
                alt 상태 전환 불가능
                    OrderService-->>AdminClient: 400 Bad Request (INVALID_ORDER_STATUS)
                else 상태 전환 성공
                    Database->>Database: 항목 상태 업데이트
                end
            end
        end
    end
    
    OrderController-->>AdminClient: 200 OK
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Poem

🐰✨ 주문이 들어오니 기쁨도 두 배,
메뉴 재고 체크하고 상태 관리도 척척!
주문부터 수령까지 흐름 자르지 않게,
토끼 같이 빠르게, 체계적으로 처리한다네 🥕📋

✨ Finishing touches
  • 📝 Generate docstrings

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d53f2f9 and 12e078b.

📒 Files selected for processing (13)
  • src/main/java/com/campustable/be/domain/menu/entity/Menu.java
  • src/main/java/com/campustable/be/domain/order/controller/OrderController.java
  • src/main/java/com/campustable/be/domain/order/controller/OrderControllerDocs.java
  • src/main/java/com/campustable/be/domain/order/dto/OrderItemDto.java
  • src/main/java/com/campustable/be/domain/order/dto/OrderResponse.java
  • src/main/java/com/campustable/be/domain/order/entity/Order.java
  • src/main/java/com/campustable/be/domain/order/entity/OrderItem.java
  • src/main/java/com/campustable/be/domain/order/entity/OrderStatus.java
  • src/main/java/com/campustable/be/domain/order/repository/OrderItemRepository.java
  • src/main/java/com/campustable/be/domain/order/repository/OrderRepository.java
  • src/main/java/com/campustable/be/domain/order/service/OrderService.java
  • src/main/java/com/campustable/be/global/config/SecurityConfig.java
  • src/main/java/com/campustable/be/global/exception/ErrorCode.java

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@seojelee9999 seojelee9999 merged commit d643da0 into main Dec 30, 2025
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants