Skip to content

Commit

Permalink
FIX: (#145) 판매점 도메인 응용 계층을 재정의한다
Browse files Browse the repository at this point in the history
  • Loading branch information
anxi01 committed Feb 20, 2025
1 parent 33825c5 commit bcc9a07
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions src/main/java/com/zerozero/store/application/StoreService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.zerozero.store.application;

import com.zerozero.review.domain.model.ZeroDrink;
import com.zerozero.review.domain.response.ReviewResponse;
import com.zerozero.review.domain.service.ReadStoreReviewUseCase;
import com.zerozero.store.domain.response.StoreResponse;
import com.zerozero.store.domain.service.ReadStoreInfoUseCase;
import com.zerozero.store.presentation.request.ReadStoreRequest;
import com.zerozero.store.presentation.response.ReadStoreResponse;
import com.zerozero.user.domain.model.User;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class StoreService {

private final ReadStoreInfoUseCase readStoreInfoUseCase;

private final ReadStoreReviewUseCase readStoreReviewUseCase;

public ReadStoreResponse readStore(ReadStoreRequest readStoreRequest, User user) {
StoreResponse store = readStoreInfoUseCase.execute(readStoreRequest.storeId());
List<ReviewResponse> reviews = readStoreReviewUseCase.execute(readStoreRequest, user);
return ReadStoreResponse.of(store, reviews, getTop3ZeroDrinks(reviews));
}

private List<ZeroDrink> getTop3ZeroDrinks(List<ReviewResponse> reviews) {
if (reviews == null) {
return Collections.emptyList();
}
List<ZeroDrink> allZeroDrinks = reviews.stream()
.flatMap(review -> review.zeroDrinks().stream())
.collect(Collectors.toList());

return allZeroDrinks.stream()
.collect(Collectors.groupingBy(type -> type, Collectors.counting()))
.entrySet().stream()
.sorted(Map.Entry.<ZeroDrink, Long>comparingByValue().reversed()
.thenComparing(Map.Entry.comparingByKey()))
.limit(3)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
}
}

0 comments on commit bcc9a07

Please sign in to comment.