fix: 0319 통합 테스트 이후 개선 사항 반영#254
Hidden character warning
Conversation
# Conflicts: # src/main/java/kr/inventory/ai/stock/service/StockShortageAiQueryService.java # src/main/java/kr/inventory/ai/stock/tool/dto/response/StockShortageSummaryItemToolResponse.java # src/main/java/kr/inventory/domain/analytics/document/stock/StockShortageDocument.java # src/main/java/kr/inventory/domain/stock/service/StockInboundService.java
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 이 Pull Request는 0319 통합 테스트 이후 발견된 여러 재고 관리 시스템의 개선 사항을 반영합니다. 주요 목적은 재고 데이터의 정확성과 일관성을 높이고, 사용자 경험을 개선하는 것입니다. 특히, 재고 이력 조회 필터링 기능을 확장하고, 폐기 기록에 대한 정렬 옵션을 추가하며, 재고 변경 사항이 Elasticsearch에 실시간으로 동기화되도록 하여 분석 데이터의 신뢰도를 향상시키는 데 중점을 두었습니다. 또한, 재고 부족 및 조정 관련 데이터 이상을 수정하여 시스템의 전반적인 안정성을 강화했습니다. Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. Footnotes
|
There was a problem hiding this comment.
Code Review
통합 테스트 이후 발견된 여러 개선 사항들이 잘 반영되었습니다. 특히 재고 로그 검색 기능이 ReferenceType 필터링을 통해 향상되었고, 폐기 기록에 대한 동적 정렬 기능이 추가되어 데이터 활용도가 높아졌습니다. 가장 중요한 변경 사항은 StockBatchIndexingService를 통한 Elasticsearch 동기화 로직의 일관된 적용입니다. 재고 수량 변경이 발생하는 모든 서비스(입고, 출고, 실사, 폐기)에서 Elasticsearch 업데이트가 보장되며, StockBatchIndexingService 자체에 비동기 처리와 견고한 예외 처리가 추가되어 시스템의 안정성과 데이터 일관성이 크게 개선되었습니다.
| @Async | ||
| public void index(IngredientStockBatch batch) { | ||
| IngredientStockBatchDocument doc = IngredientStockBatchDocument.from(batch, | ||
| batch.getIngredient().getLowStockThreshold()); | ||
| stockBatchSearchRepository.save(doc); | ||
| log.debug("[ES] 재고 배치 인덱싱 완료 batchId={}", batch.getBatchId()); | ||
| try { | ||
| IngredientStockBatchDocument doc = IngredientStockBatchDocument.from(batch, | ||
| batch.getIngredient().getLowStockThreshold()); | ||
|
|
||
| stockBatchSearchRepository.save(doc); | ||
| log.debug("[ES] 재고 배치 인덱싱 완료 batchId={}", batch.getBatchId()); | ||
| } catch (Exception e) { | ||
| log.error("[ES] 재고 배치 인덱싱 실패 batchId={}", batch.getBatchId(), e); | ||
| } | ||
|
|
There was a problem hiding this comment.
StockBatchIndexingService의 index 메서드에 @Async 어노테이션을 추가하여 비동기 처리를 도입하고, 내부적으로 try-catch 블록을 통해 예외를 처리하도록 변경한 점은 매우 좋습니다. 이는 메인 스레드의 블로킹을 방지하여 애플리케이션의 응답성을 높이고, Elasticsearch 인덱싱 실패 시에도 전체 시스템에 영향을 주지 않도록 견고성을 확보합니다. 특히 예외 발생 시 상세한 로그를 남기는 것은 문제 발생 시 디버깅에 큰 도움이 됩니다. 이는 Repository Style Guide의 '에러 처리/경계값: 실패 케이스가 명확하고 일관적인가' (14행) 원칙에 부합합니다.
| private BooleanExpression referenceTypeEq(ReferenceType type) { | ||
| return type != null ? stockLog.referenceType.eq(type) : null; | ||
| } | ||
|
|
||
| private BooleanExpression TransactionTypeEq(TransactionType type) { | ||
| return type != null ? stockLog.transactionType.eq(type) : null; |
| private OrderSpecifier<?>[] getAllOrderSpecifiers(Pageable pageable) { | ||
| List<OrderSpecifier<?>> orders = new ArrayList<>(); | ||
|
|
||
| if (!pageable.getSort().isEmpty()) { | ||
| for (Sort.Order sortOrder : pageable.getSort()) { | ||
| Order direction = sortOrder.getDirection().isAscending() ? Order.ASC : Order.DESC; | ||
|
|
||
| switch (sortOrder.getProperty()) { | ||
| case "wasteDate": | ||
| orders.add(new OrderSpecifier<>(direction, wasteRecord.wasteDate)); | ||
| break; | ||
| case "amount": | ||
| orders.add(new OrderSpecifier<>(direction, wasteRecord.wasteAmount)); | ||
| break; | ||
| default: | ||
| orders.add(new OrderSpecifier<>(Order.DESC, wasteRecord.wasteDate)); | ||
| break; | ||
| } | ||
| } | ||
| } else { | ||
| orders.add(new OrderSpecifier<>(Order.DESC, wasteRecord.wasteDate)); | ||
| } | ||
|
|
||
| return orders.toArray(new OrderSpecifier[0]); | ||
| } |
There was a problem hiding this comment.
| ingredientStockBatchRepository.save(adjustmentBatch); | ||
|
|
||
| try { | ||
| stockBatchIndexingService.index(adjustmentBatch); | ||
| } catch (Exception e) { | ||
| log.error("[ES] 입고 인덱싱 실패 batchId={}", adjustmentBatch.getBatchId(), e); | ||
| } | ||
| stockBatchIndexingService.index(adjustmentBatch); |
There was a problem hiding this comment.
StockBatchIndexingService의 index 메서드에 이미 예외 처리가 포함되어 있으므로, createAdjustmentBatch 메서드에서 중복된 try-catch 블록을 제거한 것은 좋은 리팩터링입니다. 이는 코드의 중복을 줄이고, 예외 처리 로직을 한 곳으로 집중시켜 유지보수성을 높입니다. 이는 Repository Style Guide의 '동일한 패턴(검증/변환/로깅/예외)은 공통화한다' (35행) 원칙에 부합합니다.
| ingredientStockBatchRepository.save(adjustmentBatch); | |
| try { | |
| stockBatchIndexingService.index(adjustmentBatch); | |
| } catch (Exception e) { | |
| log.error("[ES] 입고 인덱싱 실패 batchId={}", adjustmentBatch.getBatchId(), e); | |
| } | |
| stockBatchIndexingService.index(adjustmentBatch); | |
| stockBatchIndexingService.index(adjustmentBatch); |
작업 내용
재고 이력: 날짜 필터링 안 되는 문제 수정
재고 조정: 조정(+) / 조정(-) 분리
재고 조정: 조정했는데 조정 이력으로 안 들어가는 문제 수정
재고 부족 순위 데이터 이상 수정
임계치 이하인데 재고 부족으로 카운트되지 않는 문제 수정
재고 ES 동기화 확인 및 수정
재고 분석: 총 보유 배치(가용 가능) 숫자 불일치 수정
대시보드 주문: 이모티콘 변경 또는 제거
대시보드: 부족 재고 데이터 이상 확인 및 수정
폐기 관리: 정렬/필터(금액 큰 순, 최신순, 사유별 등) 검토 및 반영