Skip to content

feat: rop 조회#36

Merged
CHOOSLA merged 2 commits intomainfrom
SPM-390
Nov 5, 2025
Merged

feat: rop 조회#36
CHOOSLA merged 2 commits intomainfrom
SPM-390

Conversation

@vivivim
Copy link
Contributor

@vivivim vivivim commented Nov 5, 2025

📝 Summary

창고아이디 별로
카테고리, 그룹, 자동 주문 상태 필터링
품목 코드, 이름으로 검색
query dsl 사용

🙏 Question & PR point

📬 Reference

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능
    • ROP 데이터 조회 API 개선
      • 카테고리, 그룹, 키워드, 자동주문 상태별 필터링 기능 추가
      • 페이지네이션 지원으로 대량 데이터 조회 성능 향상
      • 조회 결과에 부품 코드, 이름, 단위 등 상세정보 추가 표시

창고아이디 별로
카테고리, 그룹, 자동 주문 상태 필터링
품목 코드, 이름으로 검색
query dsl 사용
@coderabbitai
Copy link

coderabbitai bot commented Nov 5, 2025

Walkthrough

ROP 조회 기능에 동적 필터링 및 페이지네이션 지원을 추가했습니다. 컨트롤러 엔드포인트를 수정하고, 새로운 필터 DTO 및 QueryDSL 기반 저장소 구현을 도입하였으며, Rop 엔티티의 시간 추적 기능을 활성화했습니다.

Changes

코호트 / 파일 변경 사항 요약
미사용 import 제거
src/main/java/com/sampoom/backend/api/inventory/service/InventoryService.java
미사용 Sort import 제거
ROP 컨트롤러 엔드포인트 리팩토링
src/main/java/com/sampoom/backend/api/rop/controller/RopController.java
getAllRops(Long) 메서드를 getRops(Long, Long, Long, String, Status, int, int) 로 교체. 경로 매개변수 기반 접근에서 쿼리 매개변수 기반으로 변경하여 카테고리, 그룹, 키워드, 자동 주문 상태로 필터링 및 페이지네이션 지원. 반환 타입을 ApiResponse<Page<RopResDto>>로 변경
ROP 필터 DTO 추가
src/main/java/com/sampoom/backend/api/rop/dto/RopFilterDto.java
새로운 클래스: 창고 ID, 카테고리 ID, 그룹 ID, 키워드, 자동 주문 상태 필드 포함. @Getter, @Builder, @AllArgsConstructor, @NoArgsConstructor 어노테이션 적용
ROP 응답 DTO 확장
src/main/java/com/sampoom/backend/api/rop/dto/RopResDto.java
@QueryProjection 어노테이션이 있는 명시적 생성자 추가. 필드 11개 추가(partId, partCode, partName, categoryId, groupId, unit, quantity, rop, maxStock, leadTime, autoOrderStatus, updatedAt). Lombok 빌더 및 전체 생성자 제거. 쿼리 프로젝션 기반 조회 지원
ROP 엔티티 기본 클래스 추가
src/main/java/com/sampoom/backend/api/rop/entity/Rop.java
Rop 클래스가 BaseTimeEntity 상속. 시간 추적 필드(생성, 수정 시간) 자동 관리
ROP QueryDSL 저장소 인터페이스
src/main/java/com/sampoom/backend/api/rop/repository/RopQueryRepository.java
새로운 인터페이스: search(RopFilterDto, Pageable) 메서드 정의. 페이지네이션된 검색 결과 반환
ROP QueryDSL 저장소 구현
src/main/java/com/sampoom/backend/api/rop/repository/RopQueryRepositoryImpl.java
QueryDSL 기반 동적 필터 구현. BooleanBuilder로 warehouse, keyword, category, group, autoOrderStatus 필터 적용. rop, inventory, part 테이블 조인하여 RopResDto 프로젝션. 오프셋/리미트 및 부품명 정렬 적용
ROP JPA 저장소 확장
src/main/java/com/sampoom/backend/api/rop/repository/RopRepository.java
RopRepositoryRopQueryRepository 추가 상속. 쿼리 메서드 기능 확장
ROP 서비스 메서드 변경
src/main/java/com/sampoom/backend/api/rop/service/RopService.java
getAllRops(Long) 메서드 제거 및 getRops(RopFilterDto, int, int) 메서드 추가. Pageable 생성하여 저장소의 search 메서드 호출. 반환 타입을 Page<RopResDto>로 변경

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant RopController
    participant RopService
    participant RopRepository
    participant Database

    Client->>RopController: GET /rops?warehouseId=1&categoryId=2&page=0&size=20
    RopController->>RopController: 쿼리 파라미터 파싱 및 RopFilterDto 생성
    RopController->>RopService: getRops(ropFilterDto, page, size)
    RopService->>RopService: Pageable 객체 생성
    RopService->>RopRepository: search(ropFilterDto, pageable)
    RopRepository->>Database: QueryDSL 쿼리 실행 (필터, 조인, 프로젝션)
    Database-->>RopRepository: 페이지네이션된 결과 반환
    RopRepository-->>RopService: Page<RopResDto>
    RopService-->>RopController: Page<RopResDto>
    RopController-->>Client: ApiResponse<Page<RopResDto>>
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20-25 minutes

  • 주의 영역:
    • RopQueryRepositoryImpl.java: QueryDSL 쿼리 로직의 필터 조건 정확성 및 조인 구조 검토 필요
    • RopResDto.java: @QueryProjection 생성자 필드 매핑이 데이터베이스 쿼리와 일치하는지 확인
    • RopController.java: 쿼리 파라미터 바인딩과 RopFilterDto 생성 로직 검토
    • RopService.java: Pageable 생성 및 저장소 메서드 호출 검증

Possibly related PRs

  • Dev #29: ROP 기능 리팩토링으로 RopController, RopResDto, RopService, RopRepository 변경 사항이 직접 연관
  • Spm 324 #28: ROP 및 QueryDSL 쿼리 계층 수정 (RopController, RopService, RopRepository/RopQueryRepository 및 QuerydslConfig)
  • Spm 371 #33: ROP 도메인 수정으로 RopService/RopRepository/DTO에 중복 확인 로직 및 저장소 메서드 추가

Suggested labels

ready-to-merge

Suggested reviewers

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

Poem

🐰 필터와 페이지로 품질을 높이고,
QueryDSL로 쿼리는 날아올라,
BaseTimeEntity로 시간을 기록하며,
ROP 검색은 이제 완벽하네! ✨📦

Pre-merge checks and finishing touches

✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 ROP 조회 기능 개발이라는 주요 변경 사항을 명확하게 반영하고 있으며, 제목과 변경 내용이 일치합니다.
✨ 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 SPM-390

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.

Copy link
Member

@CHOOSLA CHOOSLA left a comment

Choose a reason for hiding this comment

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

QueryDSL 확인했습니다

@CHOOSLA CHOOSLA merged commit 5a808c4 into main Nov 5, 2025
5 of 6 checks passed
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between daaf057 and 64db4a8.

📒 Files selected for processing (9)
  • src/main/java/com/sampoom/backend/api/inventory/service/InventoryService.java (0 hunks)
  • src/main/java/com/sampoom/backend/api/rop/controller/RopController.java (2 hunks)
  • src/main/java/com/sampoom/backend/api/rop/dto/RopFilterDto.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/rop/dto/RopResDto.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/rop/entity/Rop.java (2 hunks)
  • src/main/java/com/sampoom/backend/api/rop/repository/RopQueryRepository.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/rop/repository/RopQueryRepositoryImpl.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 (2 hunks)
💤 Files with no reviewable changes (1)
  • src/main/java/com/sampoom/backend/api/inventory/service/InventoryService.java
🧰 Additional context used
🧬 Code graph analysis (2)
src/main/java/com/sampoom/backend/api/rop/dto/RopFilterDto.java (1)
src/main/java/com/sampoom/backend/api/rop/dto/RopResDto.java (1)
  • Getter (9-42)
src/main/java/com/sampoom/backend/api/rop/dto/RopResDto.java (3)
src/main/java/com/sampoom/backend/api/rop/dto/RopFilterDto.java (1)
  • Getter (9-19)
src/main/java/com/sampoom/backend/api/rop/dto/UpdateRopReqDto.java (1)
  • Getter (6-14)
src/main/java/com/sampoom/backend/api/rop/dto/RopItem.java (1)
  • Getter (8-15)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Analyze (java-kotlin)
🔇 Additional comments (5)
src/main/java/com/sampoom/backend/api/rop/dto/RopResDto.java (3)

3-10: 클래스 구조가 잘 정의되어 있습니다.

QueryDSL 프로젝션을 위한 적절한 임포트와 Lombok 어노테이션이 올바르게 사용되었습니다.


12-23: 필드 구성이 적절합니다.

ROP 조회 응답에 필요한 모든 필드가 적절한 타입으로 정의되어 있습니다.


25-41: QueryDSL 프로젝션 생성자가 올바르게 구현되었습니다.

12개의 파라미터를 가진 생성자는 많아 보이지만, QueryDSL 프로젝션 용도로는 적절합니다. @QueryProjection 어노테이션을 통해 타입 안전한 프로젝션이 가능합니다.

src/main/java/com/sampoom/backend/api/rop/controller/RopController.java (2)

3-3: 필요한 임포트가 추가되었습니다.

새로운 필터링 및 페이지네이션 기능을 위한 적절한 임포트입니다.

Also applies to: 9-9, 13-13


43-50: 필터 DTO 구성 및 서비스 호출이 잘 구현되었습니다.

Builder 패턴을 사용하여 RopFilterDto를 구성하고 서비스 레이어로 적절히 위임하고 있습니다. 코드가 명확하고 읽기 쉽습니다.

This was referenced Nov 5, 2025
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.

2 participants