개요
정산이 완료된 구매 내역(isSettled=true)도 updatePurchase()를 통해 수정이 가능하여, Settlement에 저장된 totalAmount / amountPerMember와 실제 구매 내역이 영구히 불일치하게 됩니다.
관련 파일
src/main/java/com/partition/domain/supply/service/SupplyPurchaseService.java
재현 시나리오
- 구매 내역을 등록한다.
- 해당 구매 내역을 포함하여 정산을 완료한다 (
isSettled=true).
PATCH /api/supplies/purchases/{purchaseId}로 금액을 변경한다.
Settlement의 totalAmount·amountPerMember는 변경 전 금액을 그대로 유지하여 불일치 발생.
제안 해결 방안
방안 A – 정산된 구매 수정 금지 (권장)
SupplyPurchase purchase = supplyPurchaseRepository.findById(purchaseId)
.orElseThrow(() -> new CustomException(SupplyErrorCode.SUPPLY_3009));
if (Boolean.TRUE.equals(purchase.getIsSettled())) {
throw new CustomException(SupplyErrorCode.SUPPLY_5003); // 적절한 에러코드 사용
}
방안 B – 정산 재계산
정산된 구매 수정 허용 시, 연관 Settlement의 totalAmount·amountPerMember를 함께 재계산하여 저장.
참고
개요
정산이 완료된 구매 내역(
isSettled=true)도updatePurchase()를 통해 수정이 가능하여,Settlement에 저장된totalAmount/amountPerMember와 실제 구매 내역이 영구히 불일치하게 됩니다.관련 파일
src/main/java/com/partition/domain/supply/service/SupplyPurchaseService.java재현 시나리오
isSettled=true).PATCH /api/supplies/purchases/{purchaseId}로 금액을 변경한다.Settlement의totalAmount·amountPerMember는 변경 전 금액을 그대로 유지하여 불일치 발생.제안 해결 방안
방안 A – 정산된 구매 수정 금지 (권장)
방안 B – 정산 재계산
정산된 구매 수정 허용 시, 연관
Settlement의totalAmount·amountPerMember를 함께 재계산하여 저장.참고