package com.crop.goodcrop.domain.trend.service;
import com.crop.goodcrop.config.CacheConfig;
import com.crop.goodcrop.domain.trend.dto.TopKeywordDto;
import com.crop.goodcrop.domain.trend.entity.SearchHistory;
import com.crop.goodcrop.domain.trend.entity.TopKeyword;
import com.crop.goodcrop.domain.trend.repository.SearchHistoryRepository;
import com.crop.goodcrop.domain.trend.repository.TopKeywordRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.Cache;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
@RequiredArgsConstructor
public class TrendService {
private final SearchHistoryRepository searchHistoryRepository;
private final TopKeywordRepository topKeywordRepository;
private final CaffeineCacheManager cacheManager;
public List<TopKeywordDto> retrieveTopKeyword() {
List<TopKeyword> topKeywords = topKeywordRepository.findAll();
return topKeywords.stream().map(TopKeywordDto::from).toList();
}
public void modifyTopKeywordVersion1() {
List<TopKeywordDto> searchHistories = searchHistoryRepository.findTopFiveOrderBySearchCount();
topKeywordRepository.deleteAll();
if(searchHistories == null || searchHistories.isEmpty())
return;
List<TopKeyword> topKeywords = new ArrayList<>();
for(TopKeywordDto topKeywordDto : searchHistories) {
TopKeyword topKeyword = topKeywordDto.convertDtoToEntity();
topKeywords.add(topKeyword);
}
topKeywordRepository.saveAll(topKeywords);
}
// 캐시에서 로그를 읽어서
// 여기는 .. 어노테이션으로해도 괜찮지 않을..까?
// 핫키워드 업데이트
public void modifyTopKeywordVersion2() {
Cache cache = cacheManager.getCache(CacheConfig.SEARCH_HISTORY);
if(cache instanceof CaffeineCache caffeineCache) {
// caffeineCache.getAsyncCache()
caffeineCache.getAsyncCache().asMap();
}
}
}