Conversation
요약부품 주문 API에 상태 기반 필터링을 추가하고, MRP 로직에서 사용할 변경 사항
시퀀스 다이어그램sequenceDiagram
participant Controller as PartOrderController
participant Service as PartOrderService
participant Entity as PartOrder
participant DB as Database
Controller->>Service: getProductionPlans(factoryId, statuses, priorities, ...)
Service->>DB: 상태/우선순위로 주문 조회
DB-->>Service: PartOrder 리스트 반환
loop MRP 로직 처리
Service->>Service: minimumStartDate 계산<br/>(requiredDate - 총 리드타임)
Service->>Entity: updateMinimumStartDate(계산된값)
Entity->>DB: 데이터 업데이트
end
loop 상태 전환 로직
alt minimumStartDate이 과거인 경우
Service->>Service: scheduledDate vs requiredDate 비교
alt 지연된 경우
Service->>Entity: 상태 = Delayed
else 정상인 경우
Service->>Entity: 상태 = Confirmed
end
else minimumStartDate이 미래인 경우
Service->>Entity: 상태 자동 확정
end
Entity->>DB: 상태 업데이트
end
Service->>Service: 응답 DTO 생성<br/>(minimumStartDate 포함)
Service-->>Controller: PartOrderResponseDto 리스트 반환
Controller-->>Client: JSON 응답 반환
예상 코드 리뷰 난이도🎯 3 (보통) | ⏱️ ~25분
관련 PR
제안 레이블
제안 리뷰어
시 🐰
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
src/main/java/com/sampoom/factory/api/part/service/PartOrderService.java (1)
221-254:now값 재사용으로 시간 일관성 확보 제안
scheduledDate계산 시점과 이후 상태 판단 시점이 서로 다른LocalDateTime.now()호출에 의존해 미세한 오차가 생길 수 있습니다. 한 번만 캡처한now를 재사용하면 계산 기준이 일관돼 디버깅 및 테스트가 조금 더 수월해집니다.다음과 같이 정리하면 됩니다:
- LocalDateTime scheduledDate = LocalDateTime.now().plusDays(totalLeadTimeDays); + LocalDateTime now = LocalDateTime.now(); + LocalDateTime scheduledDate = now.plusDays(totalLeadTimeDays); partOrder.updateScheduledDate(scheduledDate); LocalDateTime minimumStartDate = partOrder.getRequiredDate().minusDays(totalLeadTimeDays); partOrder.updateMinimumStartDate(minimumStartDate); log.info("MRP 계산 완료 - 주문 ID: {}, 총 리드타임: {}일, 예정일: {}, 최소 시작일: {}", partOrder.getId(), totalLeadTimeDays, scheduledDate, minimumStartDate); - LocalDateTime now = LocalDateTime.now(); if (minimumStartDate.isBefore(now)) { ...
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
src/main/java/com/sampoom/factory/api/part/controller/PartOrderController.java(2 hunks)src/main/java/com/sampoom/factory/api/part/dto/PartOrderResponseDto.java(1 hunks)src/main/java/com/sampoom/factory/api/part/entity/PartOrder.java(2 hunks)src/main/java/com/sampoom/factory/api/part/service/PartOrderService.java(4 hunks)
⏰ 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 (3)
src/main/java/com/sampoom/factory/api/part/dto/PartOrderResponseDto.java (1)
24-24: DTO에 최소 시작일 노출 확인
신규 필드minimumStartDate가 DTO에 자연스럽게 추가되어 서비스에서 계산된 값을 그대로 응답에 실을 수 있게 된 점 확인했습니다. 기존 빌더와의 호환성도 유지되어 문제 없습니다.src/main/java/com/sampoom/factory/api/part/entity/PartOrder.java (1)
56-96: 엔티티에 최소 시작일 필드 추가 확인
minimum_start_date컬럼과 갱신 메서드가 엔티티에 잘 반영되어 MRP 계산 결과를 영속화할 수 있는 구조가整備되었습니다.src/main/java/com/sampoom/factory/api/part/controller/PartOrderController.java (1)
98-107: 상태 필터 파라미터 전달 확인
요청 파라미터statuses를 추가해 선택적 상태 필터링을 지원하고, 서비스 호출부도 새 시그니처에 맞춰 정렬된 것 확인했습니다.
📝 Summary
🙏 Question & PR point
📬 Reference
Summary by CodeRabbit
릴리스 노트