Skip to content

[FEAT] material standard_total_cost 컬럼 추가#39

Merged
taemin3 merged 2 commits into
mainfrom
SPM-450
Nov 7, 2025
Merged

[FEAT] material standard_total_cost 컬럼 추가#39
taemin3 merged 2 commits into
mainfrom
SPM-450

Conversation

@taemin3
Copy link
Copy Markdown
Contributor

@taemin3 taemin3 commented Nov 7, 2025

📝 Summary

  • material standard_total_cost 컬럼 추가

🙏 Question & PR point

📬 Reference

Summary by CodeRabbit

새로운 기능

  • 자재의 표준 총 비용 추적 기능 추가
  • 표준 비용 및 수량 업데이트 시 총 비용 자동 계산 및 동기화
  • 자재 생명주기 이벤트 시스템에 표준 총 비용 정보 포함으로 데이터 일관성 강화

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Nov 7, 2025

코드 리뷰 분석

Walkthrough

Material 엔티티에 standardTotalCost 필드를 추가하고, 해당 값을 자동으로 계산 및 동기화하는 로직을 구현했습니다. 이 필드를 MaterialEvent 페이로드에 포함시켜 모든 Material 생명주기 이벤트(생성, 수정, 삭제)에서 전파합니다.

Changes

코호트 / 파일(들) 변경 요약
Material 엔티티 확장
src/main/java/com/sampoom/backend/api/material/entity/Material.java
standardTotalCost 필드 추가 및 @PostLoad, @PrePersist, @PreUpdate 라이프사이클 메서드를 통한 자동 동기화 구현. updateStandardCost(Long), updateStandardQuantity(Integer) 공개 API 추가 및 calculateStandardTotalCost() 헬퍼 메서드 추가.
이벤트 DTO 확장
src/main/java/com/sampoom/backend/api/material/event/dto/MaterialEvent.java
MaterialEvent.Payload에 standardTotalCost 필드 추가.
이벤트 발행 로직 업데이트
src/main/java/com/sampoom/backend/api/material/event/service/MaterialEventBatchService.java, src/main/java/com/sampoom/backend/api/material/service/MaterialService.java
모든 Material 이벤트(생성, 수정, 삭제) 발행 시 standardTotalCost를 페이로드 빌더에 추가.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • 주요 검토 영역:
    • Material 엔티티의 calculateStandardTotalCost() 로직이 standardCost와 standardQuantity를 올바르게 곱하는지 확인
    • 라이프사이클 메서드(@PostLoad, @PrePersist, @PreUpdate)가 모든 시나리오에서 올바르게 트리거되는지 검증
    • updateBasicInfo() 메서드 내에서 standardTotalCost 갱신이 일관되게 수행되는지 확인

Possibly related PRs

  • PR #25: Material 엔티티 및 이벤트 페이로드 구조를 처음 도입한 PR로, 본 PR에서 추가되는 standardTotalCost 필드와 MaterialEvent/MaterialEvent.Payload 변경사항이 직접 연관됨.

Suggested labels

ready-to-merge

Suggested reviewers

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

Poem

🐰 표준 비용을 더하고, 수량을 곱해,
총합이 자동으로 춤을 춘다네!
라이프사이클 마법으로 동기화되고,
이벤트의 흐름에 실려 나아간다.
작지만 견고한 업데이트, 우리의 자랑! ✨

Pre-merge checks and finishing touches

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Description check ❓ Inconclusive PR 설명이 필수 항목을 갖추고 있으나 세부 정보가 부족합니다. Summary는 기본적으로 작성되었지만, Question & PR point와 Reference 섹션은 비어있어 검토자가 필요한 문맥정보를 얻기 어렵습니다. Question & PR point에서 standardTotalCost의 계산 방식, 데이터베이스 마이그레이션 계획, 기존 데이터 처리 방안 등을 설명하고 필요시 참고 자료를 추가하세요.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 변경사항의 핵심을 명확하게 요약하고 있습니다. 'material standard_total_cost 컬럼 추가'는 이 PR의 주요 변경사항을 정확하게 반영하며, 팀원이 히스토리에서 스캔할 때 주요 변경사항을 이해할 수 있습니다.
Docstring Coverage ✅ Passed Docstring coverage is 90.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: 1

🧹 Nitpick comments (1)
src/main/java/com/sampoom/backend/api/material/entity/Material.java (1)

64-64: 중복 계산이 발생할 수 있습니다.

Line 64에서 updateStandardTotalCost()를 명시적으로 호출하고 있지만, @PreUpdate 훅(Line 51)도 DB 업데이트 전에 동일한 메서드를 자동으로 호출합니다. 이로 인해 업데이트 시 계산이 두 번 실행됩니다.

동작에는 문제가 없지만, 성능 최적화를 위해 명시적 호출을 제거하고 라이프사이클 훅에만 의존하는 것을 고려해보세요.

다음과 같이 수정할 수 있습니다:

     public void updateBasicInfo(String name, String unit, Integer baseQuantity, Integer standardQuantity, Integer leadTime, Long standardCost) {
         this.name = name;
         this.materialUnit = unit;
         this.baseQuantity = baseQuantity;
         this.standardQuantity = standardQuantity != null ? standardQuantity : 1;
         this.leadTime = leadTime;
         this.standardCost = standardCost;
-        updateStandardTotalCost();
     }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 703e8c1 and bfb3e2c.

📒 Files selected for processing (4)
  • src/main/java/com/sampoom/backend/api/material/entity/Material.java (2 hunks)
  • src/main/java/com/sampoom/backend/api/material/event/dto/MaterialEvent.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/material/event/service/MaterialEventBatchService.java (1 hunks)
  • src/main/java/com/sampoom/backend/api/material/service/MaterialService.java (3 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 (6)
src/main/java/com/sampoom/backend/api/material/entity/Material.java (3)

43-44: 필드 선언이 적절합니다.

standardTotalCost 필드가 올바른 컬럼 매핑과 명확한 주석과 함께 선언되었습니다.


49-54: 자동 동기화 로직이 잘 구현되었습니다.

JPA 라이프사이클 훅을 사용하여 standardTotalCost를 자동으로 계산하는 접근 방식이 적절합니다. 엔티티가 로드되거나 저장될 때마다 일관성이 보장됩니다.


73-91: 계산 로직과 업데이트 메서드가 잘 구현되었습니다.

calculateStandardTotalCost() 헬퍼 메서드는 null 값을 적절히 처리하며, updateStandardCost()updateStandardQuantity() 메서드는 값 변경 시 자동으로 총비용을 재계산하여 일관성을 보장합니다.

src/main/java/com/sampoom/backend/api/material/service/MaterialService.java (1)

129-129: 이벤트 페이로드에 standardTotalCost가 일관되게 추가되었습니다.

MaterialCreated, MaterialUpdated, MaterialDeleted 이벤트 페이로드에 standardTotalCost가 모두 추가되어, 기존 standardCost 패턴과 일관성 있게 전파되고 있습니다.

Also applies to: 192-192, 230-230

src/main/java/com/sampoom/backend/api/material/event/service/MaterialEventBatchService.java (1)

47-47: 배치 이벤트 발행에도 standardTotalCost가 포함되었습니다.

publishAllMaterialEvents 메서드가 Material 이벤트 페이로드에 standardTotalCost를 포함하도록 업데이트되어, MaterialService의 변경사항과 일관성을 유지합니다.

src/main/java/com/sampoom/backend/api/material/event/dto/MaterialEvent.java (1)

35-35: DTO에 standardTotalCost 필드가 올바르게 추가되었습니다.

MaterialEvent.PayloadstandardTotalCost 필드가 추가되어 Material 엔티티의 새로운 필드를 이벤트로 전파할 수 있습니다.

Comment thread src/main/java/com/sampoom/backend/api/material/entity/Material.java
Copy link
Copy Markdown

@Lee-Jong-Jin Lee-Jong-Jin 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 61c9ea3 into main Nov 7, 2025
7 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.

2 participants