feat : 리뷰 파싱 및 리뷰 조회 로직 수정

This commit is contained in:
lsh9672 2025-06-18 10:22:31 +09:00
parent 3a59c0f279
commit c8952d21c1
6 changed files with 542 additions and 527 deletions

View File

@ -522,8 +522,6 @@ public class AnalyticsService implements AnalyticsUseCase {
// 1. 리뷰 데이터 수집
List<String> reviewData = externalReviewPort.getRecentReviews(storeId, days);
log.info("review Data check ===> {}", reviewData);
if (reviewData.isEmpty()) {
log.warn("AI 피드백 생성을 위한 리뷰 데이터가 없습니다: storeId={}", storeId);
return createDefaultAIFeedback(storeId);
@ -533,6 +531,7 @@ public class AnalyticsService implements AnalyticsUseCase {
AiFeedback aiFeedback = aiServicePort.generateFeedback(reviewData);
// 3. 도메인 객체 속성 설정
AiFeedback completeAiFeedback = AiFeedback.builder()
.storeId(storeId)

View File

@ -188,7 +188,7 @@ public class AIServiceAdapter implements AIServicePort {
분석 다음 사항을 고려해주세요:
1. 긍정적 요소는 고객들이 자주 언급하는 좋은 점들
2. 부정적 요소는 고객들이 자주 언급하는 안좋은 점들(없는 경우에는 없음으로 표시)
2. 부정적 요소는 고객들이 자주 언급하는 안좋은 점들
2. 개선점은 부정적 피드백이나 불만사항
3. 추천사항은 매장 운영에 도움이 구체적인 제안
4. 신뢰도 점수는 0.0-1.0 사이의

View File

@ -88,6 +88,9 @@ public class ExternalReviewAdapter implements ExternalReviewPort {
.filter(review -> review.getCreatedAt() != null && review.getCreatedAt().isAfter(cutoffDate))
.map(ReviewListResponse::getContent)
.filter(content -> content != null && !content.trim().isEmpty())
.map(content -> content.replace("`", "")
.replace("\\", "")
.replace("\"", ""))
.collect(Collectors.toList());

View File

@ -80,7 +80,7 @@ public class ReviewInteractor implements CreateReviewUseCase, DeleteReviewUseCas
@Transactional(readOnly = true)
public List<ReviewListResponse> getStoreReviews(Long storeId, Integer page, Integer size) {
Pageable pageable = PageRequest.of(page != null ? page : 0, size != null ? size : 20);
Page<Review> reviews = reviewRepository.findReviewsByStoreId(storeId, pageable);
Page<Review> reviews = reviewRepository.findReviewsByStoreIdOrderByCreatedAtDesc(storeId, pageable);
return reviews.stream()
.filter(review -> review.getStatus() == ReviewStatus.ACTIVE)

View File

@ -28,6 +28,12 @@ public interface ReviewRepository {
*/
Page<Review> findReviewsByStoreId(Long storeId, Pageable pageable);
/**
* 매장 ID로 리뷰 목록 조회
*/
Page<Review> findReviewsByStoreIdOrderByCreatedAtDesc(Long storeId, Pageable pageable);
/**
* 회원 ID로 리뷰 목록 조회
*/

View File

@ -41,6 +41,13 @@ public class ReviewRepositoryAdapter implements ReviewRepository {
return entities.map(this::toDomain);
}
@Override
public Page<Review> findReviewsByStoreIdOrderByCreatedAtDesc(Long storeId, Pageable pageable) {
Page<ReviewEntity> entities = reviewJpaRepository.findByStoreIdAndStatus(storeId, ReviewStatus.ACTIVE,
pageable);
return entities.map(this::toDomain);
}
@Override
public Page<Review> findReviewsByMemberId(Long memberId, Pageable pageable) {
Page<ReviewEntity> entities = reviewJpaRepository.findByMemberIdAndStatus(memberId, ReviewStatus.ACTIVE, pageable);