Skip to content

Comments

Dev#29

Merged
vivivim merged 42 commits intomainfrom
dev
Nov 1, 2025
Merged

Dev#29
vivivim merged 42 commits intomainfrom
dev

Conversation

@vivivim
Copy link
Contributor

@vivivim vivivim commented Nov 1, 2025

📝 Summary

🙏 Question & PR point

📬 Reference

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 재고 검색 및 필터링 기능 추가
    • 재주문점(ROP) 관리 시스템 추가
    • 주문 처리 및 자동 창고 할당 기능 추가
    • 재고 수량 상태(충분/부족/위험/초과) 분류 시스템 추가
    • 외출 이력 추적 및 주간 평균 소비량 자동 계산
  • Refactor

    • 이벤트 발행 인프라 재구성 (Kafka 기반 메시지 처리)
    • 동적 쿼리 지원을 위한 QueryDSL 통합
  • Chores

    • QueryDSL 의존성 추가

CHOOSLA and others added 30 commits October 17, 2025 17:19
rop 테이블 추가
지점별 생성 로직
업데이트 로직
전체 조회
part + branch -> inventory
두 컬럼을 인벤토리 하나만 쓰는 것으로 변경
어차피 인벤토리에 둘 있고 rop 계산에 쓰이는 정보들도 인벤토리에 두는 것이 깔금할 것 같음.
인벤토리에 1일 소요량, 소요일 추가
부품에 안전 재고 추가
그걸로 rop 계산
일주일마다
바뀐 엔티티에 맞춰서 초기화 로직 변경
rop 하나 생성 서비스 추가
프론트에 맞춰서 만듦
전체 초기값 세팅
하나 만들기
하나 수정
하나 삭제
자동 계산 켜진 애들만 업데이트 하는 것으로 수정
널러블 뽈스
소프트 딜리트 고려해서 생성 수정
좀 더 명확하게
고려해서 업데이트 할 리스트 뽑기
과 주문 상태 업데이트 이벤트 발송
sales-event -> sales-events
이벤트 변경에 맞춰서 변경
이벤트 구독 디티오 만들어서 수정
컨수머 핸들러 만들고
서비스 로직으로 분리
저장 시 트랜잭셔널
Admin and others added 12 commits October 30, 2025 18:15
Copy link

@taemin3 taemin3 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다

@coderabbitai
Copy link

coderabbitai bot commented Nov 1, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

이 PR은 QueryDSL을 통합하고, 이벤트 저장소를 branch 패키지에서 event 패키지로 이동하며, ROP(Reorder Point) 관리 기능, 재고 검색 기능, AWDistance 엔티티, OutHistory 추적, 그리고 주문 처리 워크플로우를 추가합니다.

Changes

Cohort / File(s) Change Summary
QueryDSL 설정 및 의존성
build.gradle, src/main/java/com/sampoom/backend/common/config/query/QuerydslConfig.java
QueryDSL 5.0.0 의존성 추가 및 JPAQueryFactory 빈 구성 추가
이벤트 패키지 재구성
src/main/java/com/sampoom/backend/api/event/entity/EventOutbox.java, src/main/java/com/sampoom/backend/api/event/entity/EventStatus.java, src/main/java/com/sampoom/backend/api/event/repository/EventOutboxRepository.java, src/main/java/com/sampoom/backend/api/event/service/EventPublisher.java
branch 패키지에서 event 패키지로 이동, EventOutbox 페이로드 타입을 Object로 변경, 클래스 이름 및 스케줄 시간 조정
분기 관련 변경
src/main/java/com/sampoom/backend/api/branch/entity/AWDistance.java, src/main/java/com/sampoom/backend/api/branch/repository/AWDistanceRepository.java, src/main/java/com/sampoom/backend/api/branch/repository/BranchRepository.java, src/main/java/com/sampoom/backend/api/branch/service/BranchService.java
AWDistance 엔티티 및 저장소 추가, 이벤트 임시 비활성화, BranchService 임포트 업데이트
재고 엔티티 및 저장소
src/main/java/com/sampoom/backend/api/inventory/entity/Inventory.java, src/main/java/com/sampoom/backend/api/inventory/entity/OutHistory.java, src/main/java/com/sampoom/backend/api/inventory/repository/InventoryRepository.java, src/main/java/com/sampoom/backend/api/inventory/repository/InventoryQueryRepository.java, src/main/java/com/sampoom/backend/api/inventory/repository/InventoryQueryRepositoryImpl.java, src/main/java/com/sampoom/backend/api/inventory/repository/OutHistoryRepository.java
재고 필드 확장(quantityStatus, averageDaily, leadTime, maxStock), OutHistory 엔티티 추가, 동적 검색 쿼리 구현
재고 DTO 및 컨트롤러
src/main/java/com/sampoom/backend/api/inventory/dto/PartResDto.java, src/main/java/com/sampoom/backend/api/inventory/dto/SearchReqDto.java, src/main/java/com/sampoom/backend/api/inventory/controller/InventoryController.java, src/main/java/com/sampoom/backend/api/inventory/service/InventoryService.java, src/main/java/com/sampoom/backend/api/inventory/service/OutHistoryService.java
검색 기능 추가, PartResDto 상태 타입 변경, checkRop 및 searchInventory 메서드 추가, 주간 통계 계산 서비스
ROP 기능
src/main/java/com/sampoom/backend/api/rop/entity/Rop.java, src/main/java/com/sampoom/backend/api/rop/repository/RopRepository.java, src/main/java/com/sampoom/backend/api/rop/service/RopService.java, src/main/java/com/sampoom/backend/api/rop/controller/RopController.java, src/main/java/com/sampoom/backend/api/rop/dto/*.java
ROP 엔티티, 저장소, 서비스, 컨트롤러 및 DTO 전체 구현
부품 엔티티 및 이벤트 처리
src/main/java/com/sampoom/backend/api/part/entity/Category.java, src/main/java/com/sampoom/backend/api/part/entity/Part.java, src/main/java/com/sampoom/backend/api/part/entity/PartGroup.java, src/main/java/com/sampoom/backend/api/part/entity/QuantityStatus.java, src/main/java/com/sampoom/backend/api/part/dto/*.java, src/main/java/com/sampoom/backend/api/part/event/EventPayloadMapper.java, src/main/java/com/sampoom/backend/api/part/event/PartEventConsumer.java, src/main/java/com/sampoom/backend/api/part/service/PartService.java
Lombok 빌더 추가, 상태 열거형 도입, 페이로드 DTO 및 이벤트 소비자 구현
주문 처리
src/main/java/com/sampoom/backend/api/order/controller/OrderController.java, src/main/java/com/sampoom/backend/api/order/dto/ItemDto.java, src/main/java/com/sampoom/backend/api/order/dto/OrderReqDto.java, src/main/java/com/sampoom/backend/api/order/dto/OrderStatusEvent.java, src/main/java/com/sampoom/backend/api/order/dto/OrderWarehouseEvent.java, src/main/java/com/sampoom/backend/api/order/event/SalesEventConsumer.java, src/main/java/com/sampoom/backend/api/order/service/OrderService.java
주문 처리 워크플로우, 창고 배치 로직, 판매 이벤트 소비자, 주문 및 창고 이벤트 DTO
공통 설정
src/main/java/com/sampoom/backend/common/entitiy/Status.java, src/main/java/com/sampoom/backend/common/response/ErrorStatus.java
Status 열거형 추가, 7개 새로운 에러 상수 추가

Sequence Diagram(s)

sequenceDiagram
    participant Client as 클라이언트
    participant SalesEventConsumer as SalesEventConsumer
    participant OrderService as OrderService
    participant InventoryService as InventoryService
    participant AWDistanceRepo as AWDistanceRepository
    participant EventOutbox as EventOutboxRepository
    participant EventPublisher as EventPublisher
    participant Kafka as Kafka

    Client->>SalesEventConsumer: 판매 이벤트 (Kafka)
    SalesEventConsumer->>SalesEventConsumer: OrderReqDto 역직렬화
    SalesEventConsumer->>OrderService: orderProcess(orderReqDto)
    
    OrderService->>OrderService: allocateWarehouse()
    Note over OrderService: 창고별 점수 계산<br/>(재고 + 거리)
    
    OrderService->>EventOutbox: OrderWarehouseEvent 저장
    OrderService->>EventOutbox: OrderStatusEvent 저장<br/>(CONFIRMED/PENDING)
    
    EventPublisher->>EventOutbox: 폴링
    EventPublisher->>Kafka: 이벤트 발행
    EventPublisher->>EventOutbox: 처리 완료 표시
Loading
sequenceDiagram
    participant Client as 클라이언트
    participant InventoryController as InventoryController
    participant InventoryService as InventoryService
    participant InventoryQueryRepo as InventoryQueryRepositoryImpl
    participant QueryDSL as QueryDSL
    
    Client->>InventoryController: GET /inventory?keyword=...&status=...
    InventoryController->>InventoryService: searchInventory(SearchReqDto, Pageable)
    InventoryService->>InventoryQueryRepo: search(condition, pageable)
    InventoryQueryRepo->>QueryDSL: 동적 쿼리 빌드
    Note over QueryDSL: warehouseId, keyword,<br/>categoryId, groupId,<br/>quantityStatus 필터
    QueryDSL-->>InventoryQueryRepo: Page<Inventory>
    InventoryQueryRepo-->>InventoryService: 결과
    InventoryService->>InventoryService: toResponse() 변환
    InventoryService-->>InventoryController: Page<PartResDto>
    InventoryController-->>Client: ApiResponse<Page<...>>
Loading
sequenceDiagram
    participant OutHistoryService as OutHistoryService
    participant RopRepository as RopRepository
    participant OutHistoryRepository as OutHistoryRepository
    participant InventoryRepository as InventoryRepository
    
    Note over OutHistoryService: 매주 월요일 03:00 실행
    OutHistoryService->>OutHistoryService: oneWeekAgo 계산
    
    loop 각 분기별
        OutHistoryService->>RopRepository: 활성 ROP 조회
        RopRepository-->>OutHistoryService: ROP 목록
        
        loop 각 ROP별
            OutHistoryService->>OutHistoryRepository: findTotalUsedLastWeek()
            OutHistoryRepository-->>OutHistoryService: totalUsed
            OutHistoryService->>OutHistoryService: averageDaily = totalUsed / 7
            OutHistoryService->>OutHistoryService: ropValue 계산
            OutHistoryService->>InventoryRepository: 업데이트 저장
        end
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45분

검토 시 추가 주의 필요 영역:

  • InventoryQueryRepositoryImpl.java: QueryDSL 동적 쿼리 로직이 복잡하며, N+1 쿼리 방지를 위한 fetchJoin 구현 검증 필요
  • OrderService.allocateWarehouse(): 창고 배치 알고리즘의 점수 계산 로직 및 예외 처리
  • InventoryService.checkRop(): ROP 값 계산 및 이벤트 발행 로직 검증
  • RopService: 전체 ROP 라이프사이클 관리 로직 (생성, 조회, 업데이트, 삭제)
  • EventPublisher: 클래스 이름 변경 및 Kafka 통합으로 인한 기존 코드와의 호환성
  • PartEventConsumer & SalesEventConsumer: 메시지 역직렬화 및 예외 처리 흐름
  • EventOutbox 패키지 이동: 기존 코드의 임포트 경로 변경 영향도 및 모든 참조 확인

Possibly related PRs

  • PR feat: 지점 생성 시 이벤트 발생 #18: EventOutbox와 EventStatus를 branch 패키지에서 event 패키지로 이동하는 리팩토링과 이벤트 발행 메커니즘 변경과 직접적으로 관련
  • PR Spm 268 #24: ROP, OutHistory, Inventory 필드 확장, RopRepository/Service/Controller, OutHistoryService 등 동일 도메인 기능 수정
  • PR Spm 324 #28: QueryDSL 설정, AWDistance 엔티티, InventoryQueryRepository/InventoryQueryRepositoryImpl, InventoryService.searchInventory 등 동일 코드 경로 수정

Suggested labels

ready-to-merge

Suggested reviewers

  • yangjiseonn
  • taemin3
  • Lee-Jong-Jin
  • Sangyoon98
  • CHOOSLA

Poem

🐰 쿼리는 동적으로, 이벤트는 흐르고,
ROP 계산은 정확하게, 창고는 최적으로!
QueryDSL의 마법과 Kafka의 춤,
재고 관리의 새로운 장이 펼쳐지네~ ✨📦

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dev

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c8f5a2c and 5d97385.

📒 Files selected for processing (50)
  • build.gradle (1 hunks)
  • src/main/java/com/sampoom/backend/api/branch/entity/AWDistance.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/branch/repository/AWDistanceRepository.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/branch/repository/BranchRepository.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/branch/service/BranchService.java (2 hunks)
  • src/main/java/com/sampoom/backend/api/event/entity/EventOutbox.java (2 hunks)
  • src/main/java/com/sampoom/backend/api/event/entity/EventStatus.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/event/repository/EventOutboxRepository.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/event/service/EventPublisher.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/inventory/controller/InventoryController.java (2 hunks)
  • src/main/java/com/sampoom/backend/api/inventory/dto/PartResDto.java (2 hunks)
  • src/main/java/com/sampoom/backend/api/inventory/dto/SearchReqDto.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/inventory/entity/Inventory.java (2 hunks)
  • src/main/java/com/sampoom/backend/api/inventory/entity/OutHistory.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/inventory/repository/InventoryQueryRepository.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/inventory/repository/InventoryQueryRepositoryImpl.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/inventory/repository/InventoryRepository.java (2 hunks)
  • src/main/java/com/sampoom/backend/api/inventory/repository/OutHistoryRepository.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/inventory/service/InventoryService.java (6 hunks)
  • src/main/java/com/sampoom/backend/api/inventory/service/OutHistoryService.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/order/controller/OrderController.java (0 hunks)
  • src/main/java/com/sampoom/backend/api/order/dto/ItemDto.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/order/dto/OrderReqDto.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/order/dto/OrderStatusEvent.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/order/dto/OrderWarehouseEvent.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/order/event/SalesEventConsumer.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/order/service/OrderService.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/dto/Event.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/dto/PartCategoryPayload.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/dto/PartGroupPayload.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/dto/PartPayload.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/entity/Category.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/entity/Part.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/entity/PartGroup.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/entity/QuantityStatus.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/event/EventPayloadMapper.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/event/PartEventConsumer.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/service/PartService.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/rop/controller/RopController.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/rop/dto/OrderToFactoryDto.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/rop/dto/RopItem.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/rop/dto/RopReqDto.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/rop/dto/RopResDto.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/rop/dto/UpdateRopReqDto.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/rop/entity/Rop.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/rop/repository/RopRepository.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/rop/service/RopService.java (1 hunks)
  • src/main/java/com/sampoom/backend/common/config/query/QuerydslConfig.java (1 hunks)
  • src/main/java/com/sampoom/backend/common/entitiy/Status.java (1 hunks)
  • src/main/java/com/sampoom/backend/common/response/ErrorStatus.java (2 hunks)

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.

@vivivim vivivim merged commit 1aa43a6 into main Nov 1, 2025
9 of 10 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