Skip to content

[FIX] bom, part 가격 컬럼 수정#40

Merged
taemin3 merged 1 commit into
mainfrom
SPM-450
Nov 7, 2025
Merged

[FIX] bom, part 가격 컬럼 수정#40
taemin3 merged 1 commit into
mainfrom
SPM-450

Conversation

@taemin3
Copy link
Copy Markdown
Contributor

@taemin3 taemin3 commented Nov 7, 2025

📝 Summary

  • [FIX] bom, part 가격 컬럼 수정

🙏 Question & PR point

📬 Reference

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 자재 수량에서 소수점 지원 추가 (정밀도 향상)
    • 부품 표준 원가 합계 자동 계산 기능 추가
    • 부품 및 BOM 원가 재계산 기능 구현
  • Improvements

    • 이벤트 페이로드에 총 표준 원가 정보 포함

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Nov 7, 2025

개요

이 PR은 BOM 및 Part 도메인의 비용 계산 로직을 리팩토링하고 재계산 기능을 추가합니다. 주요 변경 사항은 수량 필드 타입을 Long에서 Double로 변경하고, Part에 standardTotalCost 필드를 추가하며, 비용 재계산 서비스 메서드를 도입하는 것입니다. BomController와 PartController의 재계산 엔드포인트는 주석 처리되어 있습니다.

변경 사항

내용 / 파일(들) 변경 요약
BOM 컨트롤러 엔드포인트
src/main/java/com/sampoom/backend/api/bom/controller/BomController.java
POST /boms/recalculate-all-costs 및 POST /boms/{bomId}/recalculate-cost 엔드포인트 주석 처리
BOM 수량 타입 변경
src/main/java/com/sampoom/backend/api/bom/entity/BomMaterial.java, src/main/java/com/sampoom/backend/api/bom/dto/BomRequestDTO.java, src/main/java/com/sampoom/backend/api/bom/dto/BomDetailResponseDTO.java, src/main/java/com/sampoom/backend/api/bom/dto/BomResponseDTO.java, src/main/java/com/sampoom/backend/api/bom/event/dto/BomEvent.java
quantity 필드를 Long에서 Double로 변경; 해당 계산 로직 업데이트
BOM 비용 계산 로직
src/main/java/com/sampoom/backend/api/bom/entity/Bom.java
calculateTotalCost 메서드에 수량 null 검증 추가
BOM 서비스 재계산 메서드
src/main/java/com/sampoom/backend/api/bom/service/BomService.java
recalculateAllBomTotalCosts()recalculateBomTotalCost(Long bomId) 메서드 추가
Part 컨트롤러 엔드포인트
src/main/java/com/sampoom/backend/api/part/controller/PartController.java
POST /parts/recalculate-all-costs 및 POST /parts/{partId}/recalculate-cost 엔드포인트 추가 (주석 처리됨)
Part 엔티티 비용 필드 및 로직
src/main/java/com/sampoom/backend/api/part/entity/Part.java
standardTotalCost 필드 추가; calculateStandardCostAndTotal(), setStandardTotalCost(), updateStandardQuantity() 메서드 및 roundToThousand() 헬퍼 추가
Part 이벤트 및 서비스
src/main/java/com/sampoom/backend/api/part/event/dto/PartEvent.java, src/main/java/com/sampoom/backend/api/part/event/service/PartEventBatchService.java, src/main/java/com/sampoom/backend/api/part/service/PartService.java
standardTotalCost 필드를 PartEvent 페이로드에 추가; recalculateAllPartStandardCosts()recalculatePartStandardCost(Long partId) 메서드 추가

예상 코드 리뷰 노력

🎯 3 (중간) | ⏱️ ~25분

주의 깊게 검토해야 할 사항:

  • Part.java의 비용 계산 로직: calculateStandardCostAndTotal(), setStandardTotalCost(), updateStandardQuantity() 메서드의 반올림 로직(roundToThousand())과 상호작용이 복잡하여 엣지 케이스 검증 필요
  • Double → Long 변환: BOM 수량을 Double로 변경하면서 longValue() 변환으로 인한 정밀도 손실 가능성 검토
  • 주석 처리된 엔드포인트: BomController와 PartController의 재계산 엔드포인트가 주석 처리된 이유와 향후 계획 확인 필요
  • 서비스 메서드의 트랜잭션 처리: recalculateAllBomTotalCosts()recalculateAllPartStandardCosts()의 대량 업데이트 성능과 예외 처리 검증

관련 PR

  • PR #35: BomController에서 컨트롤러 기본 요청 매핑 변경 — 동일 컨트롤러 수정
  • PR #14: 동일한 BOM 및 Part 클래스/파일(BomController, BomService, BomMaterial, BOM DTO 등)에 대해 필드 타입 변경 및 재계산 메서드 추가 — 직접 관련
  • PR #29: BomEvent.Payload 클래스 수정(MaterialInfo.quantity, partId, partName, totalCost 추가) — 동일 파일 수정

제안 라벨

ready-to-merge

제안 검토자

  • Sangyoon98
  • CHOOSLA
  • Lee-Jong-Jin
  • vivivim

축제의 시 🐰

🐇 수량이 Double이 되었네,
비용 계산은 더욱 정교하게!
천 원씩 반올림하여
Part의 비용은 완성되고,
주석 속 엔드포인트는
언젠가 깨어날 날을 기다리나!
🌟✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description check ⚠️ Warning 필수 섹션인 Related Issue, Summary, Question & PR point, Reference 중 Required Issue가 작성되지 않았고, Summary와 Question & PR point가 실질적 내용 없이 제목만 반복되어 있습니다. 관련 이슈 번호(close #), 상세한 변경사항 설명(Long에서 Double로의 타입 변경, 계산 로직 변경 등), 검토자가 알아야 할 주요 사항을 작성해주세요.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 PR의 주요 변경사항을 명확하게 설명하고 있습니다. BOM과 Part의 가격 컬럼 수정이라는 핵심 내용을 간결하게 표현했습니다.
Docstring Coverage ✅ Passed Docstring coverage is 80.00% which is sufficient. The required threshold is 80.00%.
✨ 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-450

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
Copy Markdown

@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: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/main/java/com/sampoom/backend/api/bom/dto/BomDetailResponseDTO.java (1)

45-58: 상세 응답에서도 소수 수량이 사라짐
Optional.ofNullable(material.getQuantity()).orElse(0.0).longValue() 때문에 소수부가 버려져 총액이 줄어듭니다. Double 값을 그대로 곱한 뒤 Math.round 등으로 Long으로 변환하세요.

예시 수정안:

-                    Long total = cost * Optional.ofNullable(material.getQuantity()).orElse(0.0).longValue();
+                    double quantity = Optional.ofNullable(material.getQuantity()).orElse(0.0);
+                    Long total = Math.round(cost * quantity);
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 61c9ea3 and f3dd7e3.

📒 Files selected for processing (13)
  • src/main/java/com/sampoom/backend/api/bom/controller/BomController.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/bom/dto/BomDetailResponseDTO.java (2 hunks)
  • src/main/java/com/sampoom/backend/api/bom/dto/BomRequestDTO.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/bom/dto/BomResponseDTO.java (2 hunks)
  • src/main/java/com/sampoom/backend/api/bom/entity/Bom.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/bom/entity/BomMaterial.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/bom/event/dto/BomEvent.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/bom/service/BomService.java (3 hunks)
  • src/main/java/com/sampoom/backend/api/part/controller/PartController.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/entity/Part.java (2 hunks)
  • src/main/java/com/sampoom/backend/api/part/event/dto/PartEvent.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/event/service/PartEventBatchService.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/part/service/PartService.java (5 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 (11)
src/main/java/com/sampoom/backend/api/bom/event/dto/BomEvent.java (1)

48-48: 타입 변경이 적절합니다

quantityDouble로 변경하여 BOM 전반의 수량 타입 통일이 잘 이루어졌습니다. 이벤트 페이로드가 엔티티 및 DTO와 일관성을 유지합니다.

src/main/java/com/sampoom/backend/api/part/event/service/PartEventBatchService.java (1)

64-64: 이벤트 페이로드 확장이 적절합니다

standardTotalCost 필드를 이벤트에 추가하여 Part의 표준 총비용 정보를 이벤트 소비자에게 전달할 수 있습니다.

src/main/java/com/sampoom/backend/api/bom/controller/BomController.java (1)

80-93: 주석 처리된 엔드포인트의 의도 확인 필요

BOM 총비용 재계산 엔드포인트가 주석 처리되어 있습니다. BomService에는 recalculateAllBomTotalCosts()recalculateBomTotalCost(Long bomId) 메서드가 구현되어 있지만 컨트롤러에서 노출되지 않습니다.

다음 사항을 확인해주세요:

  • 이 기능이 의도적으로 비활성화된 것인가요?
  • 임시 조치라면 TODO 주석을 추가하거나 이슈를 생성하는 것이 좋습니다
  • 더 이상 필요하지 않다면 서비스 레이어의 메서드와 함께 제거하는 것을 고려해주세요
src/main/java/com/sampoom/backend/api/bom/dto/BomRequestDTO.java (1)

26-26: DTO 타입 변경이 적절합니다

quantityDouble로 변경하여 BomMaterial 엔티티와 일관성을 유지합니다. 소수점 수량 입력이 가능해집니다.

src/main/java/com/sampoom/backend/api/part/event/dto/PartEvent.java (1)

38-38: 이벤트 스키마 확장이 적절합니다

standardTotalCost 필드 추가로 Part의 표준 총비용을 이벤트를 통해 전파할 수 있습니다.

src/main/java/com/sampoom/backend/api/bom/entity/BomMaterial.java (2)

36-38: 메서드 시그니처 변경이 일관성 있습니다

updateQuantity 메서드가 Double 파라미터를 받도록 변경되어 필드 타입과 일관성을 유지합니다.


30-30: 데이터베이스 마이그레이션 스크립트를 확인하세요

코드 레벨에서 quantity 타입 변경(Long → Double)이 BomMaterial, DTO, Service에 걸쳐 완전하고 일관되게 수행되었습니다.

그러나 다음 항목이 저장소에서 확인되지 않습니다:

  • bom_material 테이블의 quantity 컬럼을 DOUBLE 또는 DECIMAL로 변경하는 마이그레이션 스크립트
  • 기존 데이터의 마이그레이션 전략
  • 스프링 부트 application.yml 또는 application.properties 설정 파일

이러한 파일들이 존재하는지, 또는 별도로 관리되는지 확인하시고, 필요시 추가해주세요. Flyway 또는 Liquibase 같은 마이그레이션 도구 설정도 함께 검토하세요.

src/main/java/com/sampoom/backend/api/part/service/PartService.java (4)

173-173: 이벤트 페이로드 확장이 적절합니다

Part 생성 이벤트에 standardTotalCost를 포함하여 완전한 비용 정보를 전달합니다.


235-235: 이벤트 페이로드가 일관성 있게 확장되었습니다

Part 수정 이벤트에도 standardTotalCost가 포함되어 있습니다.


288-288: 이벤트 페이로드가 일관성 있게 확장되었습니다

Part 삭제 이벤트에도 standardTotalCost가 포함되어 있습니다.


436-436: 이벤트 페이로드가 일관성 있게 확장되었습니다

헬퍼 메서드 publishPartUpdatedEvent에도 standardTotalCost가 포함되어 있습니다.

Comment thread src/main/java/com/sampoom/backend/api/bom/dto/BomResponseDTO.java
Comment thread src/main/java/com/sampoom/backend/api/bom/dto/BomResponseDTO.java
Comment thread src/main/java/com/sampoom/backend/api/bom/entity/Bom.java
Comment thread src/main/java/com/sampoom/backend/api/bom/service/BomService.java
Comment thread src/main/java/com/sampoom/backend/api/part/service/PartService.java
Copy link
Copy Markdown
Contributor

@yangjiseonn yangjiseonn left a comment

Choose a reason for hiding this comment

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

코파일럿 최고네

Copy link
Copy Markdown
Member

@Sangyoon98 Sangyoon98 left a comment

Choose a reason for hiding this comment

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

코파일럿 최고네

@taemin3 taemin3 merged commit 0203456 into main Nov 7, 2025
9 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