Stock Entity - restoreQuantity 메서드 수정
💡수정 전
public void restoreQuantity(int restoreQuantity) {
validateRestoreQuantity(restoreQuantity);
if (restoreQuantity > 0) {
this.quantity += restoreQuantity;
}
}
- validateRestoreQuantity가 이미 restoreQuantity < 1이면 예외를 던지므로,
if (restoreQuantity > 0)는 절대 false가 될 수 없어서 중복
💡리팩토링
public void restoreQuantity(int restoreQuantity) {
validateRestoreQuantity(restoreQuantity);
this.quantity += restoreQuantity;
}
- 중복되는 로직 제거
Stock Entity - 예외 코드 분리
💡수정 전
if (this.quantity < decreaseQuantity) {
throw new GlobalException(DECREASE_QUANTITY_INVALID);
}
- 현재는 재고 부족일 때도 DECREASE_QUANTITY_INVALID를 던지고 있다.
- DECREASE_QUANTITY_INVALID : 입력값 자체가 잘못됨 (0 이하)
- 재고 부족 : 입력값은 정상인데 “상태상 불가”
💡리팩토링
if (this.quantity < decreaseQuantity) {
throw new GlobalException(StockErrorCode.INSUFFICIENT_STOCK);
}
- INSUFFICIENT_STOCK 같은 별도 에러코드 추가
💡리팩토링 기대 효과
- API 응답 메시지도 정확해지고 프론트/클라이언트 처리도 명확해진다.
Stock Entity - 생성 메서드 검증 누락 수정
💡수정 전
public static Stock create(UUID productId, UUID companyId, UUID hubId, int quantity) {
validateProductId(productId);
validateCompanyId(companyId);
validateHubId(hubId);
return Stock.builder()
.productId(productId)
.companyId(companyId)
.hubId(hubId)
.quantity(quantity)
.build();
}
- create()에서 quantity를 검증하지 않아, 지금은 quantity = -1로도 엔티티 생성이 가능하다.
💡리팩토링
public static Stock create(UUID productId, UUID companyId, UUID hubId, int quantity) {
validateProductId(productId);
validateCompanyId(companyId);
validateHubId(hubId);
validateInitialQuantity(quantity);
return Stock.builder()
.productId(productId)
.companyId(companyId)
.hubId(hubId)
.quantity(quantity)
.build();
}
private static void validateInitialQuantity(int quantity) {
if (quantity < 0) {
throw new GlobalException(StockErrorCode.INVALID_STOCK_QUANTITY);
}
}
- validateInitialQuantity() 메서드 로직을 추가해, 초기 재고가 0 이하인 경우 예외 처리한다.
Stock Entity - 접근 제어 수정
💡수정 전
validateDecreaseQuantity는 public
validateRestoreQuantity는 private
- 둘 다 외부에서 호출될 이유가 없으니 private
- 또한 이 검증은 객체 상태를 안 쓰므로 static으로도 가능
💡리팩토링
private static void validateDecreaseQuantity(int q) { ... }
private static void validateRestoreQuantity(int q) { ... }
'Projects > HubEleven' 카테고리의 다른 글
| [리팩토링] Stock 도메인 리팩토링 (1) (0) | 2025.12.18 |
|---|---|
| [리팩토링] 서비스 코드 주석 제거, 메서드명 변경 (0) | 2025.12.17 |
| [동시성 처리] 재고 감소 통합 테스트 코드 2 (MSA 환경에서 코드 공유하기) (0) | 2025.12.11 |
| [동시성 처리] 실제 DB와 동일한 환경에서 테스트하기 (0) | 2025.12.09 |
| [동시성 처리] 재고 감소 통합 테스트 코드 1 (초안) (0) | 2025.12.08 |