From e9199c3dbfd7670b614e188acd84106b699693bc Mon Sep 17 00:00:00 2001 From: dev-ant Date: Wed, 13 May 2026 08:04:35 +0900 Subject: [PATCH 1/2] =?UTF-8?q?perf:=20=EC=A1=B0=ED=9A=8C=20API=20?= =?UTF-8?q?=EC=84=B1=EB=8A=A5=20=EA=B0=9C=EC=84=A0=EC=9D=84=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=EC=BA=90=EC=8B=B1=20=EC=B6=94=EA=B0=80=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20=EB=B0=8F=20=EC=9D=B8=EB=8D=B1=EC=8A=A4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AuctionHistoryCacheWarmupService.java | 26 ++++ .../service/AuctionHistoryService.java | 3 +- .../service/AuctionSearchOptionService.java | 3 +- .../entity/AuctionSearchOptionMetadata.java | 8 +- .../rest/AuctionSearchOptionController.java | 7 +- .../eternity/common/util/CacheKeyBuilder.java | 14 ++- .../until/the/eternity/config/CacheNames.java | 3 + .../config/CacheStartupWarmupRunner.java | 117 +++++++++++++----- .../the/eternity/config/RedisConfig.java | 7 +- .../service/EnchantInfoService.java | 3 +- .../persistence/EnchantInfoEntity.java | 6 +- .../application/service/HornBugleService.java | 12 ++ .../rest/controller/ItemInfoController.java | 6 +- .../dto/response/ItemCategoryResponse.java | 20 +-- .../service/MetalwareInfoService.java | 3 +- .../MetalwareInfoJpaRepository.java | 2 +- .../controller/MetalwareInfoController.java | 8 +- .../service/AllTimeRankingService.java | 6 +- .../service/CategoryRankingService.java | 20 ++- .../service/PriceChangeRankingService.java | 9 +- .../service/VolumeRankingService.java | 6 +- .../ranking/repository/RankingRepository.java | 61 +++++++-- .../service/ItemDailyStatisticsService.java | 14 +-- .../service/ItemWeeklyStatisticsService.java | 14 +-- .../SubcategoryDailyStatisticsService.java | 3 +- .../SubcategoryWeeklyStatisticsService.java | 3 +- .../TopCategoryDailyStatisticsService.java | 12 +- .../TopCategoryWeeklyStatisticsService.java | 3 +- .../entity/daily/ItemDailyStatistics.java | 9 +- .../entity/weekly/ItemWeeklyStatistics.java | 9 +- .../weekly/TopCategoryWeeklyStatistics.java | 5 +- .../daily/ItemDailyStatisticsRepository.java | 27 +++- .../TopCategoryDailyStatisticsRepository.java | 24 +++- .../ItemWeeklyStatisticsRepository.java | 29 ++++- ...TopCategoryWeeklyStatisticsRepository.java | 2 +- .../service/DailyStatisticsService.java | 70 +++++++++++ .../V28__add_p99_read_api_indexes.sql | 9 ++ .../V29__add_next_p99_read_api_indexes.sql | 68 ++++++++++ ...30__add_remaining_p99_read_api_indexes.sql | 69 +++++++++++ 39 files changed, 593 insertions(+), 127 deletions(-) create mode 100644 src/main/resources/db/migration/V28__add_p99_read_api_indexes.sql create mode 100644 src/main/resources/db/migration/V29__add_next_p99_read_api_indexes.sql create mode 100644 src/main/resources/db/migration/V30__add_remaining_p99_read_api_indexes.sql diff --git a/src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryCacheWarmupService.java b/src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryCacheWarmupService.java index 477e4995..eeefa31f 100644 --- a/src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryCacheWarmupService.java +++ b/src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryCacheWarmupService.java @@ -10,6 +10,8 @@ import until.the.eternity.common.enums.SortField; import until.the.eternity.common.request.PageRequestDto; import until.the.eternity.config.CacheNames; +import until.the.eternity.ranking.application.service.AllTimeRankingService; +import until.the.eternity.ranking.util.RankingConstants; /** * 경매 거래 내역 캐시 워밍업 서비스. @@ -29,8 +31,10 @@ public class AuctionHistoryCacheWarmupService { private static final int WARMUP_SIZE = 20; private static final int WARMUP_MAX_PAGE = 2; + private static final int[] RANKING_WARMUP_LIMITS = {20, RankingConstants.DEFAULT_LIMIT}; private final AuctionHistoryService auctionHistoryService; + private final AllTimeRankingService allTimeRankingService; private final CacheManager cacheManager; /** @@ -41,6 +45,7 @@ public class AuctionHistoryCacheWarmupService { public void evictAndWarm() { evictCaches(); warmup(); + warmAllTimeRankingCaches(); } /** 앱 시작 시 기본 화면 1개 키만 경량 워밍업한다. */ @@ -105,6 +110,27 @@ private void warmup() { WARMUP_MAX_PAGE * SortField.values().length * SortDirection.values().length); } + private void warmAllTimeRankingCaches() { + int successCount = 0; + int failCount = 0; + + for (int limit : RANKING_WARMUP_LIMITS) { + try { + allTimeRankingService.getAllTimeHighestPrice(limit); + allTimeRankingService.getMonthLargestVolume(limit); + successCount += 2; + } catch (Exception e) { + failCount++; + log.warn("[Cache Warmup] Failed all-time ranking warmup: limit={}", limit, e); + } + } + + log.info( + "[Cache Warmup] All-time ranking completed: success={}, fail={}", + successCount, + failCount); + } + private void clearCache(String cacheName) { Cache cache = cacheManager.getCache(cacheName); if (cache != null) { diff --git a/src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryService.java b/src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryService.java index b813c015..5a71a323 100644 --- a/src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryService.java +++ b/src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryService.java @@ -47,7 +47,8 @@ public class AuctionHistoryService { "#requestDto.itemOptionSearchRequest() == null" + " and #requestDto.enchantSearchRequest() == null" + " and (#requestDto.metalwareSearchRequests() == null or #requestDto.metalwareSearchRequests().isEmpty())" - + " and #requestDto.priceSearchRequest() == null") + + " and #requestDto.priceSearchRequest() == null", + sync = true) @Transactional(readOnly = true) public PageResponseDto> search( AuctionHistorySearchRequest requestDto, PageRequestDto pageRequestDto) { diff --git a/src/main/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionService.java b/src/main/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionService.java index 25e9f1be..3597ca0b 100644 --- a/src/main/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionService.java +++ b/src/main/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionService.java @@ -30,7 +30,8 @@ public class AuctionSearchOptionService { */ @Cacheable( cacheNames = CacheNames.SEARCH_OPTION_ALL_ACTIVE, - key = "T(until.the.eternity.common.util.CacheKeyBuilder).all()") + key = "T(until.the.eternity.common.util.CacheKeyBuilder).all()", + sync = true) @Transactional(readOnly = true) public List getAllActiveSearchOptions() { List entities = repositoryPort.findAllActive(); diff --git a/src/main/java/until/the/eternity/auctionsearchoption/domain/entity/AuctionSearchOptionMetadata.java b/src/main/java/until/the/eternity/auctionsearchoption/domain/entity/AuctionSearchOptionMetadata.java index 21a9e82b..6b7edf73 100644 --- a/src/main/java/until/the/eternity/auctionsearchoption/domain/entity/AuctionSearchOptionMetadata.java +++ b/src/main/java/until/the/eternity/auctionsearchoption/domain/entity/AuctionSearchOptionMetadata.java @@ -9,7 +9,13 @@ import org.hibernate.type.SqlTypes; @Entity -@Table(name = "auction_search_option_metadata") +@Table( + name = "auction_search_option_metadata", + indexes = { + @Index( + name = "idx_search_option_active_display_order", + columnList = "is_active, display_order") + }) @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class AuctionSearchOptionMetadata { diff --git a/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/AuctionSearchOptionController.java b/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/AuctionSearchOptionController.java index 8ad6484b..32669889 100644 --- a/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/AuctionSearchOptionController.java +++ b/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/AuctionSearchOptionController.java @@ -2,8 +2,10 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import java.time.Duration; import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.http.CacheControl; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -25,7 +27,8 @@ public class AuctionSearchOptionController { public ResponseEntity>> getSearchOptions() { List searchOptions = service.getAllActiveSearchOptions(); - return ResponseEntity.ok( - ApiResponse.success("SEARCH_OPTION_SUCCESS", "검색 옵션 조회 성공", searchOptions)); + return ResponseEntity.ok() + .cacheControl(CacheControl.maxAge(Duration.ofDays(1)).cachePublic()) + .body(ApiResponse.success("SEARCH_OPTION_SUCCESS", "검색 옵션 조회 성공", searchOptions)); } } diff --git a/src/main/java/until/the/eternity/common/util/CacheKeyBuilder.java b/src/main/java/until/the/eternity/common/util/CacheKeyBuilder.java index 9795e31b..df9e2e13 100644 --- a/src/main/java/until/the/eternity/common/util/CacheKeyBuilder.java +++ b/src/main/java/until/the/eternity/common/util/CacheKeyBuilder.java @@ -6,6 +6,7 @@ import until.the.eternity.auctionhistory.interfaces.rest.dto.request.AuctionHistorySearchRequest; import until.the.eternity.auctionrealtime.interfaces.rest.dto.request.AuctionRealtimeSearchRequest; import until.the.eternity.common.request.PageRequestDto; +import until.the.eternity.hornBugle.interfaces.rest.dto.request.HornBuglePageRequestDto; import until.the.eternity.iteminfo.interfaces.rest.dto.request.ItemInfoSearchRequest; import until.the.eternity.metalwareinfo.interfaces.rest.dto.request.MetalwareAttributeInfoSearchRequest; @@ -94,8 +95,10 @@ public static String buildStatisticsItemKey( } public static String buildStatisticsSubcategoryKey( - String subCategory, LocalDate startDate, LocalDate endDate) { - return normalize(subCategory) + String topCategory, String subCategory, LocalDate startDate, LocalDate endDate) { + return normalize(topCategory) + + ":" + + normalize(subCategory) + ":" + String.valueOf(startDate) + ":" @@ -183,6 +186,13 @@ public static String buildAuctionRealtimeSearchKey( + pageable.getSort(); } + public static String buildHornBugleRecentKey( + String serverName, HornBuglePageRequestDto pageRequest) { + int page = pageRequest != null ? pageRequest.getResolvedPage() : 1; + int size = pageRequest != null ? pageRequest.getResolvedSize() : 20; + return normalize(serverName) + ":" + page + ":" + size; + } + private static String normalize(String value) { if (value == null) { return ""; diff --git a/src/main/java/until/the/eternity/config/CacheNames.java b/src/main/java/until/the/eternity/config/CacheNames.java index 5b2d8ea7..de1d013b 100644 --- a/src/main/java/until/the/eternity/config/CacheNames.java +++ b/src/main/java/until/the/eternity/config/CacheNames.java @@ -37,6 +37,9 @@ private CacheNames() {} public static final String METALWARE_INFO_ALL = "metalware-info:all"; public static final String METALWARE_ATTRIBUTE_INFO_SEARCH = "metalware-attribute-info:search"; + // ===== 뿔피리 ===== + public static final String HORN_BUGLE_RECENT = "horn-bugle:recent"; + // ===== 통계 (일간) ===== public static final String STATISTICS_ITEM_DAILY = "statistics:item:daily"; public static final String STATISTICS_SUBCATEGORY_DAILY = "statistics:subcategory:daily"; diff --git a/src/main/java/until/the/eternity/config/CacheStartupWarmupRunner.java b/src/main/java/until/the/eternity/config/CacheStartupWarmupRunner.java index 2f23e9fd..65438ed8 100644 --- a/src/main/java/until/the/eternity/config/CacheStartupWarmupRunner.java +++ b/src/main/java/until/the/eternity/config/CacheStartupWarmupRunner.java @@ -1,7 +1,9 @@ package until.the.eternity.config; import java.time.LocalDate; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; @@ -20,6 +22,8 @@ import until.the.eternity.common.enums.ItemCategory; import until.the.eternity.common.enums.SortDirection; import until.the.eternity.enchantinfo.application.service.EnchantInfoService; +import until.the.eternity.hornBugle.application.service.HornBugleService; +import until.the.eternity.hornBugle.interfaces.rest.dto.request.HornBuglePageRequestDto; import until.the.eternity.iteminfo.application.service.ItemInfoService; import until.the.eternity.iteminfo.interfaces.rest.dto.request.ItemInfoSearchRequest; import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoResponse; @@ -46,6 +50,7 @@ public class CacheStartupWarmupRunner implements ApplicationRunner { private final AuctionHistoryCacheWarmupService auctionHistoryCacheWarmupService; private final AuctionRealtimeCacheWarmupService auctionRealtimeCacheWarmupService; + private final HornBugleService hornBugleService; private final AuctionSearchOptionService auctionSearchOptionService; private final ItemInfoService itemInfoService; private final EnchantInfoService enchantInfoService; @@ -66,6 +71,11 @@ public class CacheStartupWarmupRunner implements ApplicationRunner { @Value("${app.cache.warmup.ranking-limit:50}") private int startupRankingLimit; + private record StatisticsWarmupTarget( + String itemName, String topCategory, String subCategory) {} + + private record RankingCategoryWarmupTarget(String topCategory, String subCategory) {} + @Override public void run(ApplicationArguments args) { log.info("[Cache Warmup] Startup warmup scheduled (async)"); @@ -77,6 +87,7 @@ private void warmupAll() { tryWarm("auction-history", auctionHistoryCacheWarmupService::evictAndWarm); tryWarm("auction-realtime", auctionRealtimeCacheWarmupService::evictAndWarm); + tryWarm("horn-bugle", this::warmHornBugleCaches); tryWarm("search-option", auctionSearchOptionService::getAllActiveSearchOptions); tryWarm("item-info", this::warmItemInfoCaches); tryWarm("enchant-info", this::warmEnchantCaches); @@ -117,29 +128,57 @@ private void warmMetalwareCaches() { } } + private void warmHornBugleCaches() { + hornBugleService.search(null, null, new HornBuglePageRequestDto(1, 20)); + } + private void warmRankingCaches() { - int limit = - startupRankingLimit > 0 - ? Math.min(startupRankingLimit, RankingConstants.MAX_LIMIT) - : RankingConstants.DEFAULT_LIMIT; - priceRankingService.getTodayHighestPrice(limit); - priceRankingService.getWeekHighestPrice(limit); - priceRankingService.getTodayLargestVolume(limit); - - volumeRankingService.getTodayPopular(limit); - volumeRankingService.getWeekPopular(limit); - - priceChangeRankingService.getPriceSurge(limit); - priceChangeRankingService.getPriceDrop(limit); - priceChangeRankingService.getVolumeSurge(limit); - - String defaultTopCategory = ItemCategory.ONE_HANDED_WEAPON.getTopCategory(); - String defaultSubCategory = ItemCategory.ONE_HANDED_WEAPON.getSubCategory(); - categoryRankingService.getCategoryTopPriced(defaultTopCategory, defaultSubCategory, limit); - categoryRankingService.getCategoryPopular(defaultTopCategory, defaultSubCategory, limit); - - allTimeRankingService.getAllTimeHighestPrice(limit); - allTimeRankingService.getMonthLargestVolume(limit); + for (int limit : rankingWarmupLimits()) { + priceRankingService.getTodayHighestPrice(limit); + priceRankingService.getWeekHighestPrice(limit); + priceRankingService.getTodayLargestVolume(limit); + + volumeRankingService.getTodayPopular(limit); + volumeRankingService.getWeekPopular(limit); + + priceChangeRankingService.getPriceSurge(limit); + priceChangeRankingService.getPriceDrop(limit); + priceChangeRankingService.getVolumeSurge(limit); + + for (RankingCategoryWarmupTarget target : rankingCategoryWarmupTargets()) { + categoryRankingService.getCategoryTopPriced( + target.topCategory(), target.subCategory(), limit); + categoryRankingService.getCategoryPopular( + target.topCategory(), target.subCategory(), limit); + } + + allTimeRankingService.getAllTimeHighestPrice(limit); + allTimeRankingService.getMonthLargestVolume(limit); + } + } + + private Set rankingWarmupLimits() { + Set limits = new LinkedHashSet<>(); + addRankingWarmupLimit(limits, 20); + addRankingWarmupLimit(limits, RankingConstants.DEFAULT_LIMIT); + addRankingWarmupLimit(limits, startupRankingLimit); + return limits; + } + + private void addRankingWarmupLimit(Set limits, int limit) { + if (limit <= 0) { + return; + } + limits.add(Math.min(limit, RankingConstants.MAX_LIMIT)); + } + + private List rankingCategoryWarmupTargets() { + return List.of( + new RankingCategoryWarmupTarget( + ItemCategory.ONE_HANDED_WEAPON.getTopCategory(), + ItemCategory.ONE_HANDED_WEAPON.getSubCategory()), + new RankingCategoryWarmupTarget("기타", "기타"), + new RankingCategoryWarmupTarget("소모품", "포션")); } private void warmStatisticsCaches() { @@ -150,21 +189,33 @@ private void warmStatisticsCaches() { } ItemInfoResponse sample = items.get(0); + List targets = + List.of( + new StatisticsWarmupTarget( + sample.name(), sample.topCategory(), sample.subCategory()), + new StatisticsWarmupTarget("향기로운 꿀 우유", "기타", "기타"), + new StatisticsWarmupTarget("축복의 포션", "소모품", "포션")); LocalDate dailyStart = LocalDate.now().minusDays(14); LocalDate weeklyStart = LocalDate.now().minusMonths(2); LocalDate end = LocalDate.now(); - itemDailyStatisticsService.search( - sample.name(), sample.subCategory(), sample.topCategory(), dailyStart, end); - subcategoryDailyStatisticsService.search( - sample.topCategory(), sample.subCategory(), dailyStart, end); - topCategoryDailyStatisticsService.search(sample.topCategory(), dailyStart, end); - - itemWeeklyStatisticsService.search( - sample.name(), sample.subCategory(), sample.topCategory(), weeklyStart, end); - subcategoryWeeklyStatisticsService.search( - sample.topCategory(), sample.subCategory(), weeklyStart, end); - topCategoryWeeklyStatisticsService.search(sample.topCategory(), weeklyStart, end); + for (StatisticsWarmupTarget target : targets) { + itemDailyStatisticsService.search( + target.itemName(), target.subCategory(), target.topCategory(), dailyStart, end); + subcategoryDailyStatisticsService.search( + target.topCategory(), target.subCategory(), dailyStart, end); + topCategoryDailyStatisticsService.search(target.topCategory(), dailyStart, end); + + itemWeeklyStatisticsService.search( + target.itemName(), + target.subCategory(), + target.topCategory(), + weeklyStart, + end); + subcategoryWeeklyStatisticsService.search( + target.topCategory(), target.subCategory(), weeklyStart, end); + topCategoryWeeklyStatisticsService.search(target.topCategory(), weeklyStart, end); + } } private void tryWarm(String domain, Runnable runnable) { diff --git a/src/main/java/until/the/eternity/config/RedisConfig.java b/src/main/java/until/the/eternity/config/RedisConfig.java index dbd6abb5..49897a51 100644 --- a/src/main/java/until/the/eternity/config/RedisConfig.java +++ b/src/main/java/until/the/eternity/config/RedisConfig.java @@ -91,10 +91,13 @@ public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) configs.put(CacheNames.ITEM_INFO_DETAIL, defaultConfig.entryTtl(masterTtl)); configs.put(CacheNames.ITEM_INFO_SUMMARY, defaultConfig.entryTtl(masterTtl)); configs.put(CacheNames.ENCHANT_INFO_ALL, defaultConfig.entryTtl(masterTtl)); - configs.put(CacheNames.ENCHANT_INFO_FULLNAMES, defaultConfig.entryTtl(masterTtl)); - configs.put(CacheNames.METALWARE_INFO_ALL, defaultConfig.entryTtl(masterTtl)); + configs.put(CacheNames.ENCHANT_INFO_FULLNAMES, defaultConfig.entryTtl(Duration.ofHours(6))); + configs.put(CacheNames.METALWARE_INFO_ALL, defaultConfig.entryTtl(Duration.ofHours(6))); configs.put(CacheNames.METALWARE_ATTRIBUTE_INFO_SEARCH, defaultConfig.entryTtl(masterTtl)); + // 뿔피리 최신 목록 - 5분 배치 데이터의 짧은 TTL 캐시 + configs.put(CacheNames.HORN_BUGLE_RECENT, defaultConfig.entryTtl(Duration.ofMinutes(2))); + // 통계 - 30분 TTL (이벤트 기반 eviction으로 실시간 반영) Duration statsTtl = Duration.ofMinutes(30); configs.put(CacheNames.STATISTICS_ITEM_DAILY, defaultConfig.entryTtl(statsTtl)); diff --git a/src/main/java/until/the/eternity/enchantinfo/application/service/EnchantInfoService.java b/src/main/java/until/the/eternity/enchantinfo/application/service/EnchantInfoService.java index 5d672321..7e1822c7 100644 --- a/src/main/java/until/the/eternity/enchantinfo/application/service/EnchantInfoService.java +++ b/src/main/java/until/the/eternity/enchantinfo/application/service/EnchantInfoService.java @@ -39,7 +39,8 @@ public Page findAll(Pageable pageable) { cacheNames = CacheNames.ENCHANT_INFO_FULLNAMES, key = "T(until.the.eternity.common.util.CacheKeyBuilder)" - + ".buildEnchantInfoFullnamesKey(#affixPosition)") + + ".buildEnchantInfoFullnamesKey(#affixPosition)", + sync = true) public List findAllFullnames(String affixPosition) { if (affixPosition != null) { if (!ALLOWED_AFFIX_POSITIONS.contains(affixPosition)) { diff --git a/src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoEntity.java b/src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoEntity.java index 370c3c3b..d87e9f15 100644 --- a/src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoEntity.java +++ b/src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoEntity.java @@ -5,7 +5,11 @@ import lombok.NoArgsConstructor; @Entity -@Table(name = "enchant_info") +@Table( + name = "enchant_info", + indexes = { + @Index(name = "idx_enchant_info_affix_position_id", columnList = "affix_position, id") + }) @Getter @NoArgsConstructor public class EnchantInfoEntity { diff --git a/src/main/java/until/the/eternity/hornBugle/application/service/HornBugleService.java b/src/main/java/until/the/eternity/hornBugle/application/service/HornBugleService.java index ed11102f..fafacb9e 100644 --- a/src/main/java/until/the/eternity/hornBugle/application/service/HornBugleService.java +++ b/src/main/java/until/the/eternity/hornBugle/application/service/HornBugleService.java @@ -4,10 +4,13 @@ import java.util.List; import java.util.Optional; import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import until.the.eternity.common.response.PageResponseDto; +import until.the.eternity.config.CacheNames; import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; import until.the.eternity.hornBugle.domain.enums.HornBugleServer; import until.the.eternity.hornBugle.domain.mapper.HornBugleMapper; @@ -47,11 +50,13 @@ public HornBugleService( * @return 저장된 건수 */ @Transactional + @CacheEvict(cacheNames = CacheNames.HORN_BUGLE_RECENT, allEntries = true) public int saveAll(HornBugleServer server, List responses) { return saveAllAndReturnSaved(server, responses).size(); } @Transactional + @CacheEvict(cacheNames = CacheNames.HORN_BUGLE_RECENT, allEntries = true) public List saveAllAndReturnSaved( HornBugleServer server, List responses) { if (responses == null || responses.isEmpty()) { @@ -95,6 +100,13 @@ public List saveAllAndReturnSaved( * @return 페이징 응답 */ @Transactional(readOnly = true) + @Cacheable( + cacheNames = CacheNames.HORN_BUGLE_RECENT, + key = + "T(until.the.eternity.common.util.CacheKeyBuilder)" + + ".buildHornBugleRecentKey(#serverName, #pageRequest)", + condition = "#keyword == null or #keyword.isBlank()", + sync = true) public PageResponseDto search( String serverName, String keyword, HornBuglePageRequestDto pageRequest) { diff --git a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/controller/ItemInfoController.java b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/controller/ItemInfoController.java index 33463e87..234cb80d 100644 --- a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/controller/ItemInfoController.java +++ b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/controller/ItemInfoController.java @@ -4,9 +4,11 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; +import java.time.Duration; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; +import org.springframework.http.CacheControl; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -32,7 +34,9 @@ public class ItemInfoController { @Operation(summary = "카테고리 정보", description = "아이템 상위 카테고리, 하위 카테고리 정보 조회") public ResponseEntity>> findItemCategories() { List itemCategories = itemInfoService.findItemCategories(); - return ResponseEntity.ok(ApiResponse.success(itemCategories)); + return ResponseEntity.ok() + .cacheControl(CacheControl.maxAge(Duration.ofDays(1)).cachePublic()) + .body(ApiResponse.success(itemCategories)); } @Operation(summary = "모든 아이템 정보 조회", description = "시스템에 저장된 모든 아이템 정보를 조회합니다.") diff --git a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemCategoryResponse.java b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemCategoryResponse.java index 065d209e..91d12e3e 100644 --- a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemCategoryResponse.java +++ b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemCategoryResponse.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import lombok.Builder; import lombok.Getter; import until.the.eternity.common.enums.ItemCategory; @@ -11,17 +10,20 @@ @Builder public class ItemCategoryResponse { + private static final List CACHED_RESPONSES = + Arrays.stream(ItemCategory.values()) + .map( + itemCategory -> + ItemCategoryResponse.builder() + .subCategory(itemCategory.getSubCategory()) + .topCategory(itemCategory.getTopCategory()) + .build()) + .toList(); + private String subCategory; private String topCategory; public static List from() { - return Arrays.stream(ItemCategory.values()) - .map( - itemCategory -> - ItemCategoryResponse.builder() - .subCategory(itemCategory.getSubCategory()) - .topCategory(itemCategory.getTopCategory()) - .build()) - .collect(Collectors.toList()); + return CACHED_RESPONSES; } } diff --git a/src/main/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoService.java b/src/main/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoService.java index 7c734b4d..e362091c 100644 --- a/src/main/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoService.java +++ b/src/main/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoService.java @@ -21,7 +21,8 @@ public class MetalwareInfoService { @Cacheable( cacheNames = CacheNames.METALWARE_INFO_ALL, - key = "T(until.the.eternity.common.util.CacheKeyBuilder).all()") + key = "T(until.the.eternity.common.util.CacheKeyBuilder).all()", + sync = true) public List findAll() { List metalwares = metalwareInfoRepository.findAllMetalwares(); return MetalwareInfoResponse.from(metalwares); diff --git a/src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoJpaRepository.java b/src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoJpaRepository.java index b0610721..cabc630e 100644 --- a/src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoJpaRepository.java +++ b/src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoJpaRepository.java @@ -7,7 +7,7 @@ public interface MetalwareInfoJpaRepository extends JpaRepository { - @Query("SELECT m.metalware FROM MetalwareInfoEntity m") + @Query("SELECT m.metalware FROM MetalwareInfoEntity m ORDER BY m.metalware ASC") List findAllMetalwares(); @Modifying diff --git a/src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/controller/MetalwareInfoController.java b/src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/controller/MetalwareInfoController.java index 7047ad96..35ce6ddf 100644 --- a/src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/controller/MetalwareInfoController.java +++ b/src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/controller/MetalwareInfoController.java @@ -3,8 +3,10 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import java.time.Duration; import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.http.CacheControl; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; @@ -26,8 +28,10 @@ public class MetalwareInfoController { // TODO: 세공 레벨별 능력치, 최대 레벨, 한계 돌파 최대 레벨은 수기로 추가 후 조회 시 사용 @Operation(summary = "모든 세공 정보 조회", description = "시스템에 저장된 모든 세공 정보를 조회합니다.") @GetMapping - public List getAllMetalwareInfos() { - return metalwareInfoService.findAll(); + public ResponseEntity> getAllMetalwareInfos() { + return ResponseEntity.ok() + .cacheControl(CacheControl.maxAge(Duration.ofHours(6)).cachePublic()) + .body(metalwareInfoService.findAll()); } @Operation( diff --git a/src/main/java/until/the/eternity/ranking/application/service/AllTimeRankingService.java b/src/main/java/until/the/eternity/ranking/application/service/AllTimeRankingService.java index e8703336..33025dd1 100644 --- a/src/main/java/until/the/eternity/ranking/application/service/AllTimeRankingService.java +++ b/src/main/java/until/the/eternity/ranking/application/service/AllTimeRankingService.java @@ -21,7 +21,8 @@ public class AllTimeRankingService { /** 역대 최고가 거래 TOP N (API 11) - auction_history 전체 스캔, 1시간 TTL */ @Cacheable( cacheNames = CacheNames.RANKING_ALLTIME_HIGHEST, - key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)") + key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)", + sync = true) public List getAllTimeHighestPrice(int limit) { List results = rankingRepository.findAllTimeHighestPrice(limit); return rankingMapper.toAllTimeRankingResponses(results); @@ -30,7 +31,8 @@ public List getAllTimeHighestPrice(int limit) { /** 이번 달 최대 거래액 TOP N (API 12) */ @Cacheable( cacheNames = CacheNames.RANKING_ALLTIME_MONTH_VOLUME, - key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)") + key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)", + sync = true) public List getMonthLargestVolume(int limit) { List results = rankingRepository.findMonthLargestVolume(limit); return rankingMapper.toAllTimeRankingResponses(results); diff --git a/src/main/java/until/the/eternity/ranking/application/service/CategoryRankingService.java b/src/main/java/until/the/eternity/ranking/application/service/CategoryRankingService.java index 1f4c2d80..29713513 100644 --- a/src/main/java/until/the/eternity/ranking/application/service/CategoryRankingService.java +++ b/src/main/java/until/the/eternity/ranking/application/service/CategoryRankingService.java @@ -24,11 +24,15 @@ public class CategoryRankingService { cacheNames = CacheNames.RANKING_CATEGORY_HIGHEST, key = "T(until.the.eternity.common.util.CacheKeyBuilder)" - + ".buildRankingCategoryKey(#topCategory, #subCategory, #limit)") + + ".buildRankingCategoryKey(#topCategory, #subCategory, #limit)", + sync = true) public List getCategoryTopPriced( String topCategory, String subCategory, int limit) { List results = - rankingRepository.findCategoryTopPriced(topCategory, subCategory, limit); + hasSubCategory(subCategory) + ? rankingRepository.findCategoryTopPricedByTopAndSubCategory( + topCategory, subCategory, limit) + : rankingRepository.findCategoryTopPricedByTopCategory(topCategory, limit); return rankingMapper.toPriceRankingResponses(results); } @@ -37,11 +41,19 @@ public List getCategoryTopPriced( cacheNames = CacheNames.RANKING_CATEGORY_POPULAR, key = "T(until.the.eternity.common.util.CacheKeyBuilder)" - + ".buildRankingCategoryKey(#topCategory, #subCategory, #limit)") + + ".buildRankingCategoryKey(#topCategory, #subCategory, #limit)", + sync = true) public List getCategoryPopular( String topCategory, String subCategory, int limit) { List results = - rankingRepository.findCategoryPopular(topCategory, subCategory, limit); + hasSubCategory(subCategory) + ? rankingRepository.findCategoryPopularByTopAndSubCategory( + topCategory, subCategory, limit) + : rankingRepository.findCategoryPopularByTopCategory(topCategory, limit); return rankingMapper.toVolumeRankingResponses(results); } + + private boolean hasSubCategory(String subCategory) { + return subCategory != null && !subCategory.isBlank(); + } } diff --git a/src/main/java/until/the/eternity/ranking/application/service/PriceChangeRankingService.java b/src/main/java/until/the/eternity/ranking/application/service/PriceChangeRankingService.java index a3ae944e..af18355b 100644 --- a/src/main/java/until/the/eternity/ranking/application/service/PriceChangeRankingService.java +++ b/src/main/java/until/the/eternity/ranking/application/service/PriceChangeRankingService.java @@ -22,7 +22,8 @@ public class PriceChangeRankingService { /** 가격 급등 TOP N (API 6) */ @Cacheable( cacheNames = CacheNames.RANKING_CHANGE_PRICE_SURGE, - key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)") + key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)", + sync = true) public List getPriceSurge(int limit) { List results = rankingRepository.findPriceSurge(limit); return rankingMapper.toPriceChangeRankingResponses(results); @@ -31,7 +32,8 @@ public List getPriceSurge(int limit) { /** 가격 급락 TOP N (API 7) */ @Cacheable( cacheNames = CacheNames.RANKING_CHANGE_PRICE_DROP, - key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)") + key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)", + sync = true) public List getPriceDrop(int limit) { List results = rankingRepository.findPriceDrop(limit); return rankingMapper.toPriceChangeRankingResponses(results); @@ -40,7 +42,8 @@ public List getPriceDrop(int limit) { /** 거래량 급증 TOP N (API 8) */ @Cacheable( cacheNames = CacheNames.RANKING_CHANGE_VOLUME_SURGE, - key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)") + key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)", + sync = true) public List getVolumeSurge(int limit) { List results = rankingRepository.findVolumeSurge(limit); return rankingMapper.toVolumeChangeRankingResponses(results); diff --git a/src/main/java/until/the/eternity/ranking/application/service/VolumeRankingService.java b/src/main/java/until/the/eternity/ranking/application/service/VolumeRankingService.java index b778e573..6ffd53e8 100644 --- a/src/main/java/until/the/eternity/ranking/application/service/VolumeRankingService.java +++ b/src/main/java/until/the/eternity/ranking/application/service/VolumeRankingService.java @@ -21,7 +21,8 @@ public class VolumeRankingService { /** 오늘의 인기 아이템 TOP N (API 4) */ @Cacheable( cacheNames = CacheNames.RANKING_VOLUME_TODAY_POPULAR, - key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)") + key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)", + sync = true) public List getTodayPopular(int limit) { List results = rankingRepository.findTodayPopular(limit); return rankingMapper.toVolumeRankingResponses(results); @@ -30,7 +31,8 @@ public List getTodayPopular(int limit) { /** 이번 주 인기 아이템 TOP N (API 5) */ @Cacheable( cacheNames = CacheNames.RANKING_VOLUME_WEEK_POPULAR, - key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)") + key = "T(until.the.eternity.common.util.CacheKeyBuilder).byLimit(#limit)", + sync = true) public List getWeekPopular(int limit) { List results = rankingRepository.findWeekPopular(limit); return rankingMapper.toVolumeRankingResponses(results); diff --git a/src/main/java/until/the/eternity/ranking/repository/RankingRepository.java b/src/main/java/until/the/eternity/ranking/repository/RankingRepository.java index 9c41273c..5e3570dc 100644 --- a/src/main/java/until/the/eternity/ranking/repository/RankingRepository.java +++ b/src/main/java/until/the/eternity/ranking/repository/RankingRepository.java @@ -199,7 +199,7 @@ public interface RankingRepository extends JpaRepository findCategoryTopPriced( + List findCategoryTopPricedByTopCategory( + @Param("topCategory") String topCategory, @Param("limit") int limit); + + /** 상위/하위 카테고리별 최고가 TOP N (API 9) */ + @Query( + value = + """ + SELECT + i.item_name, + i.item_top_category, + i.item_sub_category, + i.max_price, + i.avg_price, + i.total_volume, + i.total_quantity, + i.date_auction_buy + FROM item_daily_statistics i + WHERE i.date_auction_buy = CURDATE() + AND i.item_top_category = :topCategory + AND i.item_sub_category = :subCategory + ORDER BY i.max_price DESC + LIMIT :limit + """, + nativeQuery = true) + List findCategoryTopPricedByTopAndSubCategory( @Param("topCategory") String topCategory, @Param("subCategory") String subCategory, @Param("limit") int limit); - /** 카테고리별 인기 아이템 TOP N (API 10) - 거래 수량 기준 */ + /** 상위 카테고리별 인기 아이템 TOP N (API 10) - 거래 수량 기준 */ + @Query( + value = + """ + SELECT + i.item_name, + i.item_top_category, + i.item_sub_category, + i.total_quantity, + i.total_volume, + i.avg_price, + i.date_auction_buy + FROM item_daily_statistics i + WHERE i.date_auction_buy = CURDATE() + AND i.item_top_category = :topCategory + ORDER BY i.total_quantity DESC + LIMIT :limit + """, + nativeQuery = true) + List findCategoryPopularByTopCategory( + @Param("topCategory") String topCategory, @Param("limit") int limit); + + /** 상위/하위 카테고리별 인기 아이템 TOP N (API 10) - 거래 수량 기준 */ @Query( value = """ @@ -240,12 +285,12 @@ List findCategoryTopPriced( FROM item_daily_statistics i WHERE i.date_auction_buy = CURDATE() AND i.item_top_category = :topCategory - AND (:subCategory IS NULL OR i.item_sub_category = :subCategory) + AND i.item_sub_category = :subCategory ORDER BY i.total_quantity DESC LIMIT :limit """, nativeQuery = true) - List findCategoryPopular( + List findCategoryPopularByTopAndSubCategory( @Param("topCategory") String topCategory, @Param("subCategory") String subCategory, @Param("limit") int limit); @@ -266,7 +311,7 @@ List findCategoryPopular( (ah.auction_price_per_unit * ah.item_count) AS total_price, ah.date_auction_buy FROM auction_history ah - ORDER BY ah.auction_price_per_unit DESC + ORDER BY ah.auction_price_per_unit DESC, ah.auction_buy_id DESC LIMIT :limit """, nativeQuery = true) @@ -288,7 +333,7 @@ List findCategoryPopular( FROM auction_history ah WHERE YEAR(ah.date_auction_buy) = YEAR(CURDATE()) AND MONTH(ah.date_auction_buy) = MONTH(CURDATE()) - ORDER BY (ah.auction_price_per_unit * ah.item_count) DESC + ORDER BY (ah.auction_price_per_unit * ah.item_count) DESC, ah.auction_buy_id DESC LIMIT :limit """, nativeQuery = true) diff --git a/src/main/java/until/the/eternity/statistics/application/service/ItemDailyStatisticsService.java b/src/main/java/until/the/eternity/statistics/application/service/ItemDailyStatisticsService.java index 641d9981..2ff8f786 100644 --- a/src/main/java/until/the/eternity/statistics/application/service/ItemDailyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/application/service/ItemDailyStatisticsService.java @@ -2,15 +2,12 @@ import java.time.LocalDate; import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import until.the.eternity.config.CacheNames; -import until.the.eternity.statistics.domain.entity.daily.ItemDailyStatistics; -import until.the.eternity.statistics.domain.mapper.ItemDailyStatisticsMapper; import until.the.eternity.statistics.interfaces.rest.dto.response.ItemDailyStatisticsResponse; import until.the.eternity.statistics.repository.daily.ItemDailyStatisticsRepository; @@ -20,14 +17,14 @@ public class ItemDailyStatisticsService { private final ItemDailyStatisticsRepository repository; - private final ItemDailyStatisticsMapper mapper; /** 아이템별 일간 통계 조회 (itemName, subCategory, topCategory, 날짜 범위) */ @Cacheable( cacheNames = CacheNames.STATISTICS_ITEM_DAILY, key = "T(until.the.eternity.common.util.CacheKeyBuilder)" - + ".buildStatisticsItemKey(#itemName, #subCategory, #topCategory, #startDate, #endDate)") + + ".buildStatisticsItemKey(#itemName, #subCategory, #topCategory, #startDate, #endDate)", + sync = true) @Transactional(readOnly = true) public List search( String itemName, @@ -38,10 +35,7 @@ public List search( until.the.eternity.statistics.util.DateRangeValidator.validateDailyDateRange( startDate, endDate); - List results = - repository.findByItemAndDateRange( - itemName, subCategory, topCategory, startDate, endDate); - - return results.stream().map(mapper::toDto).collect(Collectors.toList()); + return repository.findByItemAndDateRange( + itemName, subCategory, topCategory, startDate, endDate); } } diff --git a/src/main/java/until/the/eternity/statistics/application/service/ItemWeeklyStatisticsService.java b/src/main/java/until/the/eternity/statistics/application/service/ItemWeeklyStatisticsService.java index ee53d2a1..e38e8889 100644 --- a/src/main/java/until/the/eternity/statistics/application/service/ItemWeeklyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/application/service/ItemWeeklyStatisticsService.java @@ -2,15 +2,12 @@ import java.time.LocalDate; import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import until.the.eternity.config.CacheNames; -import until.the.eternity.statistics.domain.entity.weekly.ItemWeeklyStatistics; -import until.the.eternity.statistics.domain.mapper.ItemWeeklyStatisticsMapper; import until.the.eternity.statistics.interfaces.rest.dto.response.ItemWeeklyStatisticsResponse; import until.the.eternity.statistics.repository.weekly.ItemWeeklyStatisticsRepository; @@ -20,14 +17,14 @@ public class ItemWeeklyStatisticsService { private final ItemWeeklyStatisticsRepository repository; - private final ItemWeeklyStatisticsMapper mapper; /** 아이템별 주간 통계 조회 (itemName, subCategory, topCategory, 날짜 범위) */ @Cacheable( cacheNames = CacheNames.STATISTICS_ITEM_WEEKLY, key = "T(until.the.eternity.common.util.CacheKeyBuilder)" - + ".buildStatisticsItemKey(#itemName, #subCategory, #topCategory, #startDate, #endDate)") + + ".buildStatisticsItemKey(#itemName, #subCategory, #topCategory, #startDate, #endDate)", + sync = true) @Transactional(readOnly = true) public List search( String itemName, @@ -38,10 +35,7 @@ public List search( until.the.eternity.statistics.util.DateRangeValidator.validateWeeklyDateRange( startDate, endDate); - List results = - repository.findByItemAndDateRange( - itemName, subCategory, topCategory, startDate, endDate); - - return results.stream().map(mapper::toDto).collect(Collectors.toList()); + return repository.findByItemAndDateRange( + itemName, subCategory, topCategory, startDate, endDate); } } diff --git a/src/main/java/until/the/eternity/statistics/application/service/SubcategoryDailyStatisticsService.java b/src/main/java/until/the/eternity/statistics/application/service/SubcategoryDailyStatisticsService.java index ea3c74ff..d4a411b1 100644 --- a/src/main/java/until/the/eternity/statistics/application/service/SubcategoryDailyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/application/service/SubcategoryDailyStatisticsService.java @@ -27,7 +27,8 @@ public class SubcategoryDailyStatisticsService { cacheNames = CacheNames.STATISTICS_SUBCATEGORY_DAILY, key = "T(until.the.eternity.common.util.CacheKeyBuilder)" - + ".buildStatisticsSubcategoryKey(#subCategory, #startDate, #endDate)") + + ".buildStatisticsSubcategoryKey(#topCategory, #subCategory, #startDate, #endDate)", + sync = true) @Transactional(readOnly = true) public List search( String topCategory, String subCategory, LocalDate startDate, LocalDate endDate) { diff --git a/src/main/java/until/the/eternity/statistics/application/service/SubcategoryWeeklyStatisticsService.java b/src/main/java/until/the/eternity/statistics/application/service/SubcategoryWeeklyStatisticsService.java index 7445ba04..4c867f39 100644 --- a/src/main/java/until/the/eternity/statistics/application/service/SubcategoryWeeklyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/application/service/SubcategoryWeeklyStatisticsService.java @@ -27,7 +27,8 @@ public class SubcategoryWeeklyStatisticsService { cacheNames = CacheNames.STATISTICS_SUBCATEGORY_WEEKLY, key = "T(until.the.eternity.common.util.CacheKeyBuilder)" - + ".buildStatisticsSubcategoryKey(#subCategory, #startDate, #endDate)") + + ".buildStatisticsSubcategoryKey(#topCategory, #subCategory, #startDate, #endDate)", + sync = true) @Transactional(readOnly = true) public List search( String topCategory, String subCategory, LocalDate startDate, LocalDate endDate) { diff --git a/src/main/java/until/the/eternity/statistics/application/service/TopCategoryDailyStatisticsService.java b/src/main/java/until/the/eternity/statistics/application/service/TopCategoryDailyStatisticsService.java index a7ca0697..bf3d308d 100644 --- a/src/main/java/until/the/eternity/statistics/application/service/TopCategoryDailyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/application/service/TopCategoryDailyStatisticsService.java @@ -2,15 +2,12 @@ import java.time.LocalDate; import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import until.the.eternity.config.CacheNames; -import until.the.eternity.statistics.domain.entity.daily.TopCategoryDailyStatistics; -import until.the.eternity.statistics.domain.mapper.TopCategoryDailyStatisticsMapper; import until.the.eternity.statistics.interfaces.rest.dto.response.TopCategoryDailyStatisticsResponse; import until.the.eternity.statistics.repository.daily.TopCategoryDailyStatisticsRepository; @@ -20,23 +17,20 @@ public class TopCategoryDailyStatisticsService { private final TopCategoryDailyStatisticsRepository repository; - private final TopCategoryDailyStatisticsMapper mapper; /** 탑카테고리별 일간 통계 조회 (topCategory, 날짜 범위) */ @Cacheable( cacheNames = CacheNames.STATISTICS_TOPCATEGORY_DAILY, key = "T(until.the.eternity.common.util.CacheKeyBuilder)" - + ".buildStatisticsTopCategoryKey(#topCategory, #startDate, #endDate)") + + ".buildStatisticsTopCategoryKey(#topCategory, #startDate, #endDate)", + sync = true) @Transactional(readOnly = true) public List search( String topCategory, LocalDate startDate, LocalDate endDate) { until.the.eternity.statistics.util.DateRangeValidator.validateDailyDateRange( startDate, endDate); - List results = - repository.findByTopCategoryAndDateRange(topCategory, startDate, endDate); - - return results.stream().map(mapper::toDto).collect(Collectors.toList()); + return repository.findByTopCategoryAndDateRange(topCategory, startDate, endDate); } } diff --git a/src/main/java/until/the/eternity/statistics/application/service/TopCategoryWeeklyStatisticsService.java b/src/main/java/until/the/eternity/statistics/application/service/TopCategoryWeeklyStatisticsService.java index 7ecbe622..660e1491 100644 --- a/src/main/java/until/the/eternity/statistics/application/service/TopCategoryWeeklyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/application/service/TopCategoryWeeklyStatisticsService.java @@ -27,7 +27,8 @@ public class TopCategoryWeeklyStatisticsService { cacheNames = CacheNames.STATISTICS_TOPCATEGORY_WEEKLY, key = "T(until.the.eternity.common.util.CacheKeyBuilder)" - + ".buildStatisticsTopCategoryKey(#topCategory, #startDate, #endDate)") + + ".buildStatisticsTopCategoryKey(#topCategory, #startDate, #endDate)", + sync = true) @Transactional(readOnly = true) public List search( String topCategory, LocalDate startDate, LocalDate endDate) { diff --git a/src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java index 361df9c1..4e8ae674 100644 --- a/src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java +++ b/src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java @@ -13,7 +13,14 @@ indexes = { @Index( name = "idx_item_daily_statistics_item_name_date", - columnList = "item_name, date_auction_buy") + columnList = "item_name, date_auction_buy"), + @Index( + name = "idx_item_daily_date_total_quantity", + columnList = "date_auction_buy, total_quantity DESC"), + @Index( + name = "idx_item_daily_item_category_date", + columnList = + "item_name, item_top_category, item_sub_category, date_auction_buy") }, uniqueConstraints = { @UniqueConstraint( diff --git a/src/main/java/until/the/eternity/statistics/domain/entity/weekly/ItemWeeklyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/weekly/ItemWeeklyStatistics.java index 6970f18e..e8a595d1 100644 --- a/src/main/java/until/the/eternity/statistics/domain/entity/weekly/ItemWeeklyStatistics.java +++ b/src/main/java/until/the/eternity/statistics/domain/entity/weekly/ItemWeeklyStatistics.java @@ -13,7 +13,14 @@ indexes = { @Index( name = "idx_item_weekly_statistics_item_name_year_week", - columnList = "item_name, year, week_number") + columnList = "item_name, year, week_number"), + @Index( + name = "idx_item_weekly_item_category_start_date", + columnList = + "item_name, item_top_category, item_sub_category, week_start_date"), + @Index( + name = "idx_item_weekly_year_week_total_quantity", + columnList = "year, week_number, total_quantity DESC") }, uniqueConstraints = { @UniqueConstraint( diff --git a/src/main/java/until/the/eternity/statistics/domain/entity/weekly/TopCategoryWeeklyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/weekly/TopCategoryWeeklyStatistics.java index 9201faaf..ea698670 100644 --- a/src/main/java/until/the/eternity/statistics/domain/entity/weekly/TopCategoryWeeklyStatistics.java +++ b/src/main/java/until/the/eternity/statistics/domain/entity/weekly/TopCategoryWeeklyStatistics.java @@ -13,7 +13,10 @@ indexes = { @Index( name = "idx_top_category_weekly_statistics_category_year_week", - columnList = "item_top_category, year, week_number") + columnList = "item_top_category, year, week_number"), + @Index( + name = "idx_top_category_weekly_statistics_category_start_date", + columnList = "item_top_category, week_start_date") }, uniqueConstraints = { @UniqueConstraint( diff --git a/src/main/java/until/the/eternity/statistics/repository/daily/ItemDailyStatisticsRepository.java b/src/main/java/until/the/eternity/statistics/repository/daily/ItemDailyStatisticsRepository.java index 447c2425..f1fa1fd5 100644 --- a/src/main/java/until/the/eternity/statistics/repository/daily/ItemDailyStatisticsRepository.java +++ b/src/main/java/until/the/eternity/statistics/repository/daily/ItemDailyStatisticsRepository.java @@ -8,6 +8,7 @@ import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.daily.ItemDailyStatistics; +import until.the.eternity.statistics.interfaces.rest.dto.response.ItemDailyStatisticsResponse; public interface ItemDailyStatisticsRepository extends JpaRepository { @@ -22,11 +23,27 @@ public interface ItemDailyStatisticsRepository extends JpaRepository findByItemAndDateRange( + """ + SELECT new until.the.eternity.statistics.interfaces.rest.dto.response.ItemDailyStatisticsResponse( + i.id, + i.itemName, + i.dateAuctionBuy, + i.minPrice, + i.maxPrice, + i.avgPrice, + i.totalVolume, + i.totalQuantity, + i.createdAt, + i.updatedAt + ) + FROM ItemDailyStatistics i + WHERE i.itemName = :itemName + AND i.itemSubCategory = :subCategory + AND i.itemTopCategory = :topCategory + AND i.dateAuctionBuy BETWEEN :startDate AND :endDate + ORDER BY i.dateAuctionBuy ASC + """) + List findByItemAndDateRange( @Param("itemName") String itemName, @Param("subCategory") String subCategory, @Param("topCategory") String topCategory, diff --git a/src/main/java/until/the/eternity/statistics/repository/daily/TopCategoryDailyStatisticsRepository.java b/src/main/java/until/the/eternity/statistics/repository/daily/TopCategoryDailyStatisticsRepository.java index 31749482..095ce094 100644 --- a/src/main/java/until/the/eternity/statistics/repository/daily/TopCategoryDailyStatisticsRepository.java +++ b/src/main/java/until/the/eternity/statistics/repository/daily/TopCategoryDailyStatisticsRepository.java @@ -8,6 +8,7 @@ import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.daily.TopCategoryDailyStatistics; +import until.the.eternity.statistics.interfaces.rest.dto.response.TopCategoryDailyStatisticsResponse; public interface TopCategoryDailyStatisticsRepository extends JpaRepository { @@ -21,10 +22,25 @@ public interface TopCategoryDailyStatisticsRepository * @return 해당 조건의 일간 통계 리스트 */ @Query( - "SELECT t FROM TopCategoryDailyStatistics t WHERE t.itemTopCategory = :topCategory " - + "AND t.dateAuctionBuy BETWEEN :startDate AND :endDate " - + "ORDER BY t.dateAuctionBuy ASC") - List findByTopCategoryAndDateRange( + """ + SELECT new until.the.eternity.statistics.interfaces.rest.dto.response.TopCategoryDailyStatisticsResponse( + t.id, + t.itemTopCategory, + t.dateAuctionBuy, + t.minPrice, + t.maxPrice, + t.avgPrice, + t.totalVolume, + t.totalQuantity, + t.createdAt, + t.updatedAt + ) + FROM TopCategoryDailyStatistics t + WHERE t.itemTopCategory = :topCategory + AND t.dateAuctionBuy BETWEEN :startDate AND :endDate + ORDER BY t.dateAuctionBuy ASC + """) + List findByTopCategoryAndDateRange( @Param("topCategory") String topCategory, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate); diff --git a/src/main/java/until/the/eternity/statistics/repository/weekly/ItemWeeklyStatisticsRepository.java b/src/main/java/until/the/eternity/statistics/repository/weekly/ItemWeeklyStatisticsRepository.java index dc7a301a..0f212872 100644 --- a/src/main/java/until/the/eternity/statistics/repository/weekly/ItemWeeklyStatisticsRepository.java +++ b/src/main/java/until/the/eternity/statistics/repository/weekly/ItemWeeklyStatisticsRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.weekly.ItemWeeklyStatistics; +import until.the.eternity.statistics.interfaces.rest.dto.response.ItemWeeklyStatisticsResponse; public interface ItemWeeklyStatisticsRepository extends JpaRepository { @@ -21,11 +22,29 @@ public interface ItemWeeklyStatisticsRepository extends JpaRepository findByItemAndDateRange( + """ + SELECT new until.the.eternity.statistics.interfaces.rest.dto.response.ItemWeeklyStatisticsResponse( + i.id, + i.itemName, + i.year, + i.weekNumber, + i.weekStartDate, + i.minPrice, + i.maxPrice, + i.avgPrice, + i.totalVolume, + i.totalQuantity, + i.createdAt, + i.updatedAt + ) + FROM ItemWeeklyStatistics i + WHERE i.itemName = :itemName + AND i.itemSubCategory = :subCategory + AND i.itemTopCategory = :topCategory + AND i.weekStartDate BETWEEN :startDate AND :endDate + ORDER BY i.weekStartDate ASC + """) + List findByItemAndDateRange( @Param("itemName") String itemName, @Param("subCategory") String subCategory, @Param("topCategory") String topCategory, diff --git a/src/main/java/until/the/eternity/statistics/repository/weekly/TopCategoryWeeklyStatisticsRepository.java b/src/main/java/until/the/eternity/statistics/repository/weekly/TopCategoryWeeklyStatisticsRepository.java index 45a1dad4..8362e1ce 100644 --- a/src/main/java/until/the/eternity/statistics/repository/weekly/TopCategoryWeeklyStatisticsRepository.java +++ b/src/main/java/until/the/eternity/statistics/repository/weekly/TopCategoryWeeklyStatisticsRepository.java @@ -22,7 +22,7 @@ public interface TopCategoryWeeklyStatisticsRepository @Query( "SELECT t FROM TopCategoryWeeklyStatistics t WHERE t.itemTopCategory = :topCategory " + "AND t.weekStartDate BETWEEN :startDate AND :endDate " - + "ORDER BY t.year ASC, t.weekNumber ASC") + + "ORDER BY t.weekStartDate ASC") List findByTopCategoryAndDateRange( @Param("topCategory") String topCategory, @Param("startDate") java.time.LocalDate startDate, diff --git a/src/main/java/until/the/eternity/statistics/service/DailyStatisticsService.java b/src/main/java/until/the/eternity/statistics/service/DailyStatisticsService.java index 2769ed4e..489d8949 100644 --- a/src/main/java/until/the/eternity/statistics/service/DailyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/service/DailyStatisticsService.java @@ -1,12 +1,22 @@ package until.the.eternity.statistics.service; +import java.time.LocalDate; +import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Caching; +import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionSynchronization; +import org.springframework.transaction.support.TransactionSynchronizationManager; import until.the.eternity.config.CacheNames; +import until.the.eternity.ranking.application.service.VolumeRankingService; +import until.the.eternity.ranking.util.RankingConstants; +import until.the.eternity.statistics.application.service.ItemDailyStatisticsService; +import until.the.eternity.statistics.application.service.TopCategoryDailyStatisticsService; import until.the.eternity.statistics.repository.daily.ItemDailyStatisticsRepository; import until.the.eternity.statistics.repository.daily.SubcategoryDailyStatisticsRepository; import until.the.eternity.statistics.repository.daily.TopCategoryDailyStatisticsRepository; @@ -16,9 +26,18 @@ @RequiredArgsConstructor public class DailyStatisticsService { + @Qualifier("applicationTaskExecutor") + private final TaskExecutor taskExecutor; + private final ItemDailyStatisticsRepository itemDailyStatisticsRepository; private final SubcategoryDailyStatisticsRepository subcategoryDailyStatisticsRepository; private final TopCategoryDailyStatisticsRepository topCategoryDailyStatisticsRepository; + private final ItemDailyStatisticsService itemDailyStatisticsReadService; + private final TopCategoryDailyStatisticsService topCategoryDailyStatisticsReadService; + private final VolumeRankingService volumeRankingService; + + private record DailyStatisticsWarmupTarget( + String itemName, String topCategory, String subCategory) {} /** * 당일의 경매 거래 내역을 기반으로 일간 통계를 업데이트 AuctionHistoryScheduler가 실행될 때마다 호출되어 당일 통계만 갱신 순서: @@ -80,6 +99,7 @@ public void calculateAndSaveCurrentDayStatistics() { log.info( "[Current Day Statistics] All current day statistics calculated successfully in {} ms", System.currentTimeMillis() - start); + scheduleReadCacheWarmup("current-day"); } /** @@ -140,5 +160,55 @@ public void calculateAndSavePreviousDayStatistics() { log.info( "[Previous Day Statistics] All previous day statistics finalized successfully in {} ms", System.currentTimeMillis() - start); + scheduleReadCacheWarmup("previous-day"); + } + + private void scheduleReadCacheWarmup(String reason) { + Runnable warmup = () -> warmReadCaches(reason); + if (TransactionSynchronizationManager.isSynchronizationActive()) { + TransactionSynchronizationManager.registerSynchronization( + new TransactionSynchronization() { + @Override + public void afterCommit() { + taskExecutor.execute(warmup); + } + }); + return; + } + taskExecutor.execute(warmup); + } + + private void warmReadCaches(String reason) { + try { + LocalDate end = LocalDate.now(); + LocalDate dailyStart = end.minusDays(14); + + for (DailyStatisticsWarmupTarget target : dailyStatisticsWarmupTargets()) { + itemDailyStatisticsReadService.search( + target.itemName(), + target.subCategory(), + target.topCategory(), + dailyStart, + end); + topCategoryDailyStatisticsReadService.search(target.topCategory(), dailyStart, end); + } + + volumeRankingService.getTodayPopular(20); + volumeRankingService.getTodayPopular(RankingConstants.DEFAULT_LIMIT); + + log.info("[Daily Statistics] Read cache warmup completed after {}", reason); + } catch (Exception e) { + log.warn( + "[Daily Statistics] Read cache warmup failed after {}: {}", + reason, + e.getMessage(), + e); + } + } + + private List dailyStatisticsWarmupTargets() { + return List.of( + new DailyStatisticsWarmupTarget("향기로운 꿀 우유", "기타", "기타"), + new DailyStatisticsWarmupTarget("축복의 포션", "소모품", "포션")); } } diff --git a/src/main/resources/db/migration/V28__add_p99_read_api_indexes.sql b/src/main/resources/db/migration/V28__add_p99_read_api_indexes.sql new file mode 100644 index 00000000..19d3834c --- /dev/null +++ b/src/main/resources/db/migration/V28__add_p99_read_api_indexes.sql @@ -0,0 +1,9 @@ +-- p99 조회 API 최적화 인덱스 +-- - weekly top category 통계 조회는 week_start_date 범위 조건을 사용한다. +-- - enchant fullname 필터 조회는 affix_position 조건과 id 정렬을 함께 사용한다. + +CREATE INDEX idx_top_category_weekly_statistics_category_start_date + ON top_category_weekly_statistics (item_top_category, week_start_date); + +CREATE INDEX idx_enchant_info_affix_position_id + ON enchant_info (affix_position, id); diff --git a/src/main/resources/db/migration/V29__add_next_p99_read_api_indexes.sql b/src/main/resources/db/migration/V29__add_next_p99_read_api_indexes.sql new file mode 100644 index 00000000..a26b2870 --- /dev/null +++ b/src/main/resources/db/migration/V29__add_next_p99_read_api_indexes.sql @@ -0,0 +1,68 @@ +-- 추가 p99 조회 API 최적화 인덱스 +-- - 카테고리 랭킹은 당일/카테고리 조건으로 좁힌 뒤 가격/수량으로 정렬한다. +-- - 가격 변동 랭킹은 오늘/어제 item_daily_statistics self join을 수행한다. +-- - 주간 아이템 통계는 week_start_date 범위 조건을 사용한다. + +SET @index_exists := ( + SELECT COUNT(1) + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'item_daily_statistics' + AND index_name = 'idx_item_daily_date_top_sub_max_price' +); +SET @ddl := IF( + @index_exists = 0, + 'CREATE INDEX idx_item_daily_date_top_sub_max_price ON item_daily_statistics (date_auction_buy, item_top_category, item_sub_category, max_price DESC)', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @index_exists := ( + SELECT COUNT(1) + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'item_daily_statistics' + AND index_name = 'idx_item_daily_date_top_sub_quantity' +); +SET @ddl := IF( + @index_exists = 0, + 'CREATE INDEX idx_item_daily_date_top_sub_quantity ON item_daily_statistics (date_auction_buy, item_top_category, item_sub_category, total_quantity DESC)', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @index_exists := ( + SELECT COUNT(1) + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'item_daily_statistics' + AND index_name = 'idx_item_daily_date_item_category_change' +); +SET @ddl := IF( + @index_exists = 0, + 'CREATE INDEX idx_item_daily_date_item_category_change ON item_daily_statistics (date_auction_buy, item_name(120), item_top_category(80), item_sub_category(80), avg_price, total_quantity)', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @index_exists := ( + SELECT COUNT(1) + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'item_weekly_statistics' + AND index_name = 'idx_item_weekly_item_category_start_date' +); +SET @ddl := IF( + @index_exists = 0, + 'CREATE INDEX idx_item_weekly_item_category_start_date ON item_weekly_statistics (item_name(120), item_top_category(80), item_sub_category(80), week_start_date)', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; diff --git a/src/main/resources/db/migration/V30__add_remaining_p99_read_api_indexes.sql b/src/main/resources/db/migration/V30__add_remaining_p99_read_api_indexes.sql new file mode 100644 index 00000000..b106f175 --- /dev/null +++ b/src/main/resources/db/migration/V30__add_remaining_p99_read_api_indexes.sql @@ -0,0 +1,69 @@ +-- 잔여 p99 조회 API 최적화 인덱스 +-- - 전체 거래량 랭킹은 당일 통계를 거래 수량 기준으로 정렬한다. +-- - 주간 거래량 랭킹은 연도/주차 통계를 거래 수량 기준으로 정렬한다. +-- - 일간 아이템 통계는 itemName + category + date range 조건을 사용한다. +-- - 검색 옵션 메타데이터는 active filtering + display order 정렬을 사용한다. + +SET @index_exists := ( + SELECT COUNT(1) + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'item_daily_statistics' + AND index_name = 'idx_item_daily_date_total_quantity' +); +SET @ddl := IF( + @index_exists = 0, + 'CREATE INDEX idx_item_daily_date_total_quantity ON item_daily_statistics (date_auction_buy, total_quantity DESC)', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @index_exists := ( + SELECT COUNT(1) + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'item_weekly_statistics' + AND index_name = 'idx_item_weekly_year_week_total_quantity' +); +SET @ddl := IF( + @index_exists = 0, + 'CREATE INDEX idx_item_weekly_year_week_total_quantity ON item_weekly_statistics (year, week_number, total_quantity DESC)', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @index_exists := ( + SELECT COUNT(1) + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'item_daily_statistics' + AND index_name = 'idx_item_daily_item_category_date' +); +SET @ddl := IF( + @index_exists = 0, + 'CREATE INDEX idx_item_daily_item_category_date ON item_daily_statistics (item_name(120), item_top_category(80), item_sub_category(80), date_auction_buy)', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @index_exists := ( + SELECT COUNT(1) + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'auction_search_option_metadata' + AND index_name = 'idx_search_option_active_display_order' +); +SET @ddl := IF( + @index_exists = 0, + 'CREATE INDEX idx_search_option_active_display_order ON auction_search_option_metadata (is_active, display_order)', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; From 4479bddaed490a44d60e6a8a928e8572f45ca413 Mon Sep 17 00:00:00 2001 From: dev-ant Date: Wed, 13 May 2026 08:11:10 +0900 Subject: [PATCH 2/2] chore: optimize imports --- .../scheduler/AuctionHistoryScheduler.java | 5 +++-- .../application/service/AuctionHistoryService.java | 3 ++- .../service/fetcher/AuctionHistoryFetcher.java | 7 ++++--- .../service/persister/AuctionHistoryPersister.java | 3 ++- .../auctionhistory/domain/entity/AuctionHistory.java | 5 +++-- .../domain/event/AuctionHistorySavedEvent.java | 3 ++- .../domain/mapper/AuctionHistoryMapper.java | 3 ++- .../domain/mapper/OpenApiAuctionHistoryMapper.java | 5 +++-- .../repository/AuctionHistoryRepositoryPort.java | 9 +++++---- .../service/AuctionHistoryDuplicateChecker.java | 9 +++++---- .../service/fetcher/AuctionHistoryFetcherPort.java | 3 ++- .../persister/AuctionHistoryPersisterPort.java | 3 ++- .../persistence/AuctionHistoryJpaRepository.java | 7 ++++--- .../persistence/AuctionHistoryQueryDslRepository.java | 11 ++++++----- .../persistence/AuctionHistoryRepositoryPortImpl.java | 9 +++++---- .../dto/OpenApiAuctionHistoryListResponse.java | 1 + .../external/dto/OpenApiAuctionHistoryResponse.java | 3 ++- .../interfaces/rest/dto/enums/SearchStandard.java | 1 + .../interfaces/rest/dto/enums/SortDirection.java | 1 + .../rest/dto/request/AuctionHistorySearchRequest.java | 1 + .../dto/response/AuctionHistoryDetailResponse.java | 1 + .../domain/entity/AuctionRealtimeItem.java | 3 ++- .../domain/entity/AuctionRealtimeItemOption.java | 3 ++- .../domain/entity/AuctionHistoryItemOption.java | 3 ++- .../scheduler/AuctionRealtimeScheduler.java | 7 ++++--- .../application/service/AuctionRealtimeService.java | 5 +++-- .../service/fetcher/AuctionRealtimeFetcher.java | 5 +++-- .../service/persister/AuctionRealtimePersister.java | 3 ++- .../domain/mapper/AuctionRealtimeMapper.java | 3 ++- .../domain/mapper/OpenApiAuctionRealtimeMapper.java | 7 ++++--- .../repository/AuctionRealtimeItemRepositoryPort.java | 7 ++++--- .../service/fetcher/AuctionRealtimeFetcherPort.java | 3 ++- .../persister/AuctionRealtimePersisterPort.java | 3 ++- .../persistence/AuctionRealtimeItemRepository.java | 3 ++- .../AuctionRealtimeItemRepositoryPortImpl.java | 7 ++++--- .../AuctionRealtimeQueryDslRepository.java | 11 ++++++----- .../dto/OpenApiAuctionRealtimeListResponse.java | 1 + .../external/dto/OpenApiAuctionRealtimeResponse.java | 3 ++- .../dto/request/AuctionRealtimeSearchRequest.java | 3 ++- .../rest/dto/request/RealtimeSortField.java | 1 + .../dto/response/AuctionRealtimeDetailResponse.java | 1 + .../service/AuctionSearchOptionService.java | 5 +++-- .../domain/entity/AuctionSearchOptionMetadata.java | 3 ++- .../repository/AuctionSearchOptionRepositoryPort.java | 3 ++- .../persistence/AuctionSearchOptionJpaRepository.java | 3 ++- .../AuctionSearchOptionRepositoryPortImpl.java | 3 ++- .../rest/AuctionSearchOptionController.java | 5 +++-- .../interfaces/rest/dto/response/FieldMetadata.java | 1 + .../dto/response/SearchOptionMetadataResponse.java | 1 + .../application/service/BatchExecutionLogService.java | 5 +++-- .../batchlog/domain/entity/BatchExecutionLog.java | 3 ++- .../repository/BatchExecutionLogRepositoryPort.java | 3 ++- .../persistence/BatchExecutionLogJpaRepository.java | 3 ++- .../BatchExecutionLogRepositoryPortImpl.java | 7 ++++--- .../rest/controller/BatchExecutionLogController.java | 3 ++- .../rest/dto/response/BatchExecutionLogResponse.java | 3 ++- .../the/eternity/common/annotation/BatchLog.java | 3 ++- .../common/annotation/MetalwareParameters.java | 1 + .../common/aspect/BatchExecutionLoggingAspect.java | 3 ++- .../until/the/eternity/common/enums/ItemCategory.java | 5 +++-- .../the/eternity/common/enums/SortDirection.java | 3 ++- .../until/the/eternity/common/enums/SortField.java | 1 + .../until/the/eternity/common/enums/UserRole.java | 5 +++-- .../common/exception/GlobalExceptionCode.java | 4 ++-- .../common/exception/GlobalExceptionHandler.java | 4 ++-- .../the/eternity/common/filter/GatewayAuthFilter.java | 7 ++++--- .../the/eternity/common/response/ApiResponse.java | 3 ++- .../the/eternity/common/response/PageResponseDto.java | 1 + .../the/eternity/common/util/CacheKeyBuilder.java | 3 ++- .../the/eternity/common/util/SegongOptionParser.java | 3 ++- .../the/eternity/config/CacheStartupWarmupRunner.java | 9 +++++---- .../the/eternity/config/RedisCacheErrorHandler.java | 3 ++- .../java/until/the/eternity/config/RedisConfig.java | 7 ++++--- .../the/eternity/config/openapi/OpenApiFilters.java | 3 ++- .../eternity/config/openapi/OpenApiRetryPolicy.java | 3 ++- .../config/openapi/OpenApiWebClientProperties.java | 3 ++- .../application/service/EnchantInfoService.java | 5 +++-- .../domain/exception/EnchantInfoExceptionCode.java | 4 ++-- .../domain/repository/EnchantInfoRepositoryPort.java | 3 ++- .../persistence/EnchantInfoJpaRepository.java | 3 ++- .../persistence/EnchantInfoRepositoryPortImpl.java | 3 ++- .../rest/controller/EnchantInfoController.java | 3 ++- .../application/runner/HornBugleIndexRunner.java | 3 ++- .../application/scheduler/HornBugleScheduler.java | 11 ++++++----- .../application/service/HornBugleService.java | 7 ++++--- .../domain/entity/HornBugleWorldHistory.java | 3 ++- .../hornBugle/domain/enums/HornBugleServer.java | 5 +++-- .../hornBugle/domain/mapper/HornBugleMapper.java | 3 ++- .../domain/repository/HornBugleRepositoryPort.java | 7 ++++--- .../domain/service/HornBugleDuplicateChecker.java | 11 ++++++----- .../elasticsearch/HornBugleDocument.java | 3 ++- .../elasticsearch/HornBugleIndexService.java | 3 ++- .../persistence/HornBugleJpaRepository.java | 7 ++++--- .../persistence/HornBugleRepositoryPortImpl.java | 7 ++++--- .../dto/OpenApiHornBugleHistoryListResponse.java | 1 + .../external/dto/OpenApiHornBugleHistoryResponse.java | 1 + .../rest/dto/response/HornBugleHistoryResponse.java | 1 + .../application/HornBugleKafkaProducerService.java | 3 ++- .../iteminfo/application/service/ItemInfoService.java | 9 +++++---- .../eternity/iteminfo/domain/entity/ItemInfoId.java | 3 ++- .../domain/exception/ItemInfoExceptionCode.java | 4 ++-- .../domain/repository/ItemInfoRepositoryPort.java | 3 ++- .../persistence/ItemInfoJpaRepository.java | 3 ++- .../persistence/ItemInfoQueryDslRepository.java | 3 ++- .../persistence/ItemInfoRepositoryPortImpl.java | 3 ++- .../rest/controller/ItemInfoController.java | 5 +++-- .../rest/dto/response/ItemCategoryResponse.java | 5 +++-- .../rest/dto/response/ItemInfoResponse.java | 5 +++-- .../rest/dto/response/ItemInfoSummaryResponse.java | 5 +++-- .../rest/dto/response/ItemInfoSyncResponse.java | 3 ++- .../application/service/ItemOptionInfoService.java | 3 ++- .../domain/entity/ItemOptionInfoId.java | 5 +++-- .../repository/ItemOptionInfoRepositoryPort.java | 5 +++-- .../persistence/ItemOptionInfoRepositoryPortImpl.java | 5 +++-- .../rest/controller/ItemOptionInfoController.java | 5 +++-- .../application/service/MetalwareInfoService.java | 3 ++- .../persistence/MetalwareInfoJpaRepository.java | 3 ++- .../persistence/MetalwareInfoRepositoryPortImpl.java | 3 ++- .../rest/controller/MetalwareInfoController.java | 5 +++-- .../rest/dto/response/MetalwareInfoResponse.java | 3 ++- .../application/service/AllTimeRankingService.java | 3 ++- .../application/service/CategoryRankingService.java | 3 ++- .../service/PriceChangeRankingService.java | 3 ++- .../application/service/PriceRankingService.java | 3 ++- .../application/service/VolumeRankingService.java | 3 ++- .../eternity/ranking/domain/mapper/RankingMapper.java | 5 +++-- .../rest/controller/AllTimeRankingController.java | 3 ++- .../rest/controller/CategoryRankingController.java | 3 ++- .../rest/controller/PriceChangeRankingController.java | 3 ++- .../rest/controller/PriceRankingController.java | 3 ++- .../rest/controller/VolumeRankingController.java | 3 ++- .../rest/dto/response/AllTimeRankingResponse.java | 1 + .../rest/dto/response/PriceChangeRankingResponse.java | 1 + .../rest/dto/response/PriceRankingResponse.java | 1 + .../dto/response/VolumeChangeRankingResponse.java | 1 + .../rest/dto/response/VolumeRankingResponse.java | 1 + .../ranking/repository/RankingRepository.java | 3 ++- .../service/ItemDailyStatisticsService.java | 5 +++-- .../service/ItemWeeklyStatisticsService.java | 5 +++-- .../service/SubcategoryDailyStatisticsService.java | 7 ++++--- .../service/SubcategoryWeeklyStatisticsService.java | 7 ++++--- .../service/TopCategoryDailyStatisticsService.java | 5 +++-- .../service/TopCategoryWeeklyStatisticsService.java | 7 ++++--- .../domain/entity/daily/ItemDailyStatistics.java | 3 ++- .../entity/daily/SubcategoryDailyStatistics.java | 3 ++- .../entity/daily/TopCategoryDailyStatistics.java | 3 ++- .../domain/entity/weekly/ItemWeeklyStatistics.java | 3 ++- .../entity/weekly/SubcategoryWeeklyStatistics.java | 3 ++- .../entity/weekly/TopCategoryWeeklyStatistics.java | 3 ++- .../dto/request/DailyStatisticsSearchRequest.java | 3 ++- .../dto/request/ItemDailyStatisticsSearchRequest.java | 3 ++- .../request/ItemWeeklyStatisticsSearchRequest.java | 3 ++- .../SubcategoryDailyStatisticsSearchRequest.java | 3 ++- .../SubcategoryWeeklyStatisticsSearchRequest.java | 3 ++- .../TopCategoryDailyStatisticsSearchRequest.java | 3 ++- .../TopCategoryWeeklyStatisticsSearchRequest.java | 3 ++- .../dto/response/ItemDailyStatisticsResponse.java | 1 + .../dto/response/ItemWeeklyStatisticsResponse.java | 1 + .../response/SubcategoryDailyStatisticsResponse.java | 1 + .../response/SubcategoryWeeklyStatisticsResponse.java | 1 + .../response/TopCategoryDailyStatisticsResponse.java | 1 + .../response/TopCategoryWeeklyStatisticsResponse.java | 1 + .../daily/ItemDailyStatisticsRepository.java | 5 +++-- .../daily/SubcategoryDailyStatisticsRepository.java | 5 +++-- .../daily/TopCategoryDailyStatisticsRepository.java | 5 +++-- .../weekly/ItemWeeklyStatisticsRepository.java | 3 ++- .../weekly/SubcategoryWeeklyStatisticsRepository.java | 3 ++- .../weekly/TopCategoryWeeklyStatisticsRepository.java | 3 ++- .../statistics/service/DailyStatisticsService.java | 5 +++-- 169 files changed, 403 insertions(+), 238 deletions(-) diff --git a/src/main/java/until/the/eternity/auctionhistory/application/scheduler/AuctionHistoryScheduler.java b/src/main/java/until/the/eternity/auctionhistory/application/scheduler/AuctionHistoryScheduler.java index b4c857c0..64930e73 100644 --- a/src/main/java/until/the/eternity/auctionhistory/application/scheduler/AuctionHistoryScheduler.java +++ b/src/main/java/until/the/eternity/auctionhistory/application/scheduler/AuctionHistoryScheduler.java @@ -1,7 +1,5 @@ package until.the.eternity.auctionhistory.application.scheduler; -import java.util.*; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -19,6 +17,9 @@ import until.the.eternity.common.annotation.BatchLog; import until.the.eternity.common.enums.ItemCategory; +import java.util.*; +import java.util.stream.Collectors; + @Slf4j @Component @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryService.java b/src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryService.java index 5a71a323..13dd0572 100644 --- a/src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryService.java +++ b/src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryService.java @@ -1,7 +1,6 @@ package until.the.eternity.auctionhistory.application.service; import jakarta.persistence.EntityManager; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.Cache; @@ -23,6 +22,8 @@ import until.the.eternity.common.util.CacheKeyBuilder; import until.the.eternity.config.CacheNames; +import java.util.List; + @Service @RequiredArgsConstructor @Slf4j diff --git a/src/main/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcher.java b/src/main/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcher.java index 4c0e05ad..3aa40844 100644 --- a/src/main/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcher.java +++ b/src/main/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcher.java @@ -1,8 +1,5 @@ package until.the.eternity.auctionhistory.application.service.fetcher; -import java.util.ArrayList; -import java.util.List; -import java.util.OptionalInt; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -12,6 +9,10 @@ import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; +import java.util.ArrayList; +import java.util.List; +import java.util.OptionalInt; + @Slf4j @Component @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersister.java b/src/main/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersister.java index 8112b804..ee426dd5 100644 --- a/src/main/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersister.java +++ b/src/main/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersister.java @@ -1,6 +1,5 @@ package until.the.eternity.auctionhistory.application.service.persister; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -11,6 +10,8 @@ import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; +import java.util.List; + @Slf4j @RequiredArgsConstructor @Component diff --git a/src/main/java/until/the/eternity/auctionhistory/domain/entity/AuctionHistory.java b/src/main/java/until/the/eternity/auctionhistory/domain/entity/AuctionHistory.java index af355e14..6f4cd7d8 100644 --- a/src/main/java/until/the/eternity/auctionhistory/domain/entity/AuctionHistory.java +++ b/src/main/java/until/the/eternity/auctionhistory/domain/entity/AuctionHistory.java @@ -1,11 +1,12 @@ package until.the.eternity.auctionhistory.domain.entity; import jakarta.persistence.*; -import java.time.Instant; -import java.util.List; import lombok.*; import until.the.eternity.auctionitemoption.domain.entity.AuctionHistoryItemOption; +import java.time.Instant; +import java.util.List; + @Entity @Table(name = "auction_history") @Getter diff --git a/src/main/java/until/the/eternity/auctionhistory/domain/event/AuctionHistorySavedEvent.java b/src/main/java/until/the/eternity/auctionhistory/domain/event/AuctionHistorySavedEvent.java index 213706e6..fe8f771f 100644 --- a/src/main/java/until/the/eternity/auctionhistory/domain/event/AuctionHistorySavedEvent.java +++ b/src/main/java/until/the/eternity/auctionhistory/domain/event/AuctionHistorySavedEvent.java @@ -1,8 +1,9 @@ package until.the.eternity.auctionhistory.domain.event; -import java.time.LocalDateTime; import lombok.Getter; +import java.time.LocalDateTime; + /** 경매장 거래 내역 저장 완료 이벤트 AuctionHistoryScheduler가 거래 내역을 성공적으로 저장한 후 발행됩니다. */ @Getter public class AuctionHistorySavedEvent { diff --git a/src/main/java/until/the/eternity/auctionhistory/domain/mapper/AuctionHistoryMapper.java b/src/main/java/until/the/eternity/auctionhistory/domain/mapper/AuctionHistoryMapper.java index 93a6fcaa..083ea00f 100644 --- a/src/main/java/until/the/eternity/auctionhistory/domain/mapper/AuctionHistoryMapper.java +++ b/src/main/java/until/the/eternity/auctionhistory/domain/mapper/AuctionHistoryMapper.java @@ -1,6 +1,5 @@ package until.the.eternity.auctionhistory.domain.mapper; -import java.util.List; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import until.the.eternity.auctionhistory.domain.entity.AuctionHistory; @@ -8,6 +7,8 @@ import until.the.eternity.auctionhistory.interfaces.rest.dto.response.ItemOptionResponse; import until.the.eternity.auctionitemoption.domain.entity.AuctionHistoryItemOption; +import java.util.List; + /** * AuctionHistory Entity to internal.responseDto transfer mapper class 데이터 흐름은 external.responseDto * -> entity -> internal.responseDto 단방향으로 흐름 diff --git a/src/main/java/until/the/eternity/auctionhistory/domain/mapper/OpenApiAuctionHistoryMapper.java b/src/main/java/until/the/eternity/auctionhistory/domain/mapper/OpenApiAuctionHistoryMapper.java index 51f3748e..0b2b3bf9 100644 --- a/src/main/java/until/the/eternity/auctionhistory/domain/mapper/OpenApiAuctionHistoryMapper.java +++ b/src/main/java/until/the/eternity/auctionhistory/domain/mapper/OpenApiAuctionHistoryMapper.java @@ -1,12 +1,13 @@ package until.the.eternity.auctionhistory.domain.mapper; -import java.time.Instant; -import java.util.List; import org.mapstruct.*; import until.the.eternity.auctionhistory.domain.entity.AuctionHistory; import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; +import java.time.Instant; +import java.util.List; + @Mapper(componentModel = "spring", uses = OpenApiItemOptionMapper.class) public interface OpenApiAuctionHistoryMapper { diff --git a/src/main/java/until/the/eternity/auctionhistory/domain/repository/AuctionHistoryRepositoryPort.java b/src/main/java/until/the/eternity/auctionhistory/domain/repository/AuctionHistoryRepositoryPort.java index c0ac03ae..530a487a 100644 --- a/src/main/java/until/the/eternity/auctionhistory/domain/repository/AuctionHistoryRepositoryPort.java +++ b/src/main/java/until/the/eternity/auctionhistory/domain/repository/AuctionHistoryRepositoryPort.java @@ -1,14 +1,15 @@ package until.the.eternity.auctionhistory.domain.repository; -import java.time.Instant; -import java.util.List; -import java.util.Optional; -import java.util.Set; import org.springframework.data.domain.Pageable; import until.the.eternity.auctionhistory.domain.entity.AuctionHistory; import until.the.eternity.auctionhistory.interfaces.rest.dto.request.AuctionHistorySearchRequest; import until.the.eternity.common.enums.ItemCategory; +import java.time.Instant; +import java.util.List; +import java.util.Optional; +import java.util.Set; + /** 경매장 거래 내역 POJO Repository - Mock 또는 Stub 으로 대체해 단위 테스트 용이성 확보 */ public interface AuctionHistoryRepositoryPort { diff --git a/src/main/java/until/the/eternity/auctionhistory/domain/service/AuctionHistoryDuplicateChecker.java b/src/main/java/until/the/eternity/auctionhistory/domain/service/AuctionHistoryDuplicateChecker.java index bb844332..dd43726c 100644 --- a/src/main/java/until/the/eternity/auctionhistory/domain/service/AuctionHistoryDuplicateChecker.java +++ b/src/main/java/until/the/eternity/auctionhistory/domain/service/AuctionHistoryDuplicateChecker.java @@ -1,9 +1,5 @@ package until.the.eternity.auctionhistory.domain.service; -import java.time.Instant; -import java.util.List; -import java.util.OptionalInt; -import java.util.Set; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -12,6 +8,11 @@ import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; +import java.time.Instant; +import java.util.List; +import java.util.OptionalInt; +import java.util.Set; + @Slf4j @Component @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/auctionhistory/domain/service/fetcher/AuctionHistoryFetcherPort.java b/src/main/java/until/the/eternity/auctionhistory/domain/service/fetcher/AuctionHistoryFetcherPort.java index 5b649be4..cf00412a 100644 --- a/src/main/java/until/the/eternity/auctionhistory/domain/service/fetcher/AuctionHistoryFetcherPort.java +++ b/src/main/java/until/the/eternity/auctionhistory/domain/service/fetcher/AuctionHistoryFetcherPort.java @@ -1,9 +1,10 @@ package until.the.eternity.auctionhistory.domain.service.fetcher; -import java.util.List; import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; +import java.util.List; + public interface AuctionHistoryFetcherPort { List fetch(ItemCategory category); } diff --git a/src/main/java/until/the/eternity/auctionhistory/domain/service/persister/AuctionHistoryPersisterPort.java b/src/main/java/until/the/eternity/auctionhistory/domain/service/persister/AuctionHistoryPersisterPort.java index 636f4c2d..44f59205 100644 --- a/src/main/java/until/the/eternity/auctionhistory/domain/service/persister/AuctionHistoryPersisterPort.java +++ b/src/main/java/until/the/eternity/auctionhistory/domain/service/persister/AuctionHistoryPersisterPort.java @@ -1,10 +1,11 @@ package until.the.eternity.auctionhistory.domain.service.persister; -import java.util.List; import until.the.eternity.auctionhistory.domain.entity.AuctionHistory; import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; +import java.util.List; + public interface AuctionHistoryPersisterPort { List filterOutExisting( diff --git a/src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryJpaRepository.java b/src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryJpaRepository.java index 4215b1f2..bdb982ab 100644 --- a/src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryJpaRepository.java +++ b/src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryJpaRepository.java @@ -1,8 +1,5 @@ package until.the.eternity.auctionhistory.infrastructure.persistence; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -10,6 +7,10 @@ import org.springframework.stereotype.Repository; import until.the.eternity.auctionhistory.domain.entity.AuctionHistory; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + @Repository public interface AuctionHistoryJpaRepository extends JpaRepository, JpaSpecificationExecutor { diff --git a/src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryQueryDslRepository.java b/src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryQueryDslRepository.java index f59fe8f9..d8f70638 100644 --- a/src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryQueryDslRepository.java +++ b/src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryQueryDslRepository.java @@ -8,11 +8,6 @@ import com.querydsl.core.types.dsl.NumberTemplate; import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; -import java.time.Instant; -import java.time.LocalDate; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -23,6 +18,12 @@ import until.the.eternity.auctionhistory.interfaces.rest.dto.request.*; import until.the.eternity.auctionitemoption.domain.entity.QAuctionHistoryItemOption; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.List; + @Component @RequiredArgsConstructor class AuctionHistoryQueryDslRepository { diff --git a/src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryRepositoryPortImpl.java b/src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryRepositoryPortImpl.java index b0d61b18..c1638cf2 100644 --- a/src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryRepositoryPortImpl.java +++ b/src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryRepositoryPortImpl.java @@ -1,10 +1,6 @@ package until.the.eternity.auctionhistory.infrastructure.persistence; import jakarta.persistence.EntityManager; -import java.time.Instant; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Pageable; @@ -15,6 +11,11 @@ import until.the.eternity.auctionhistory.interfaces.rest.dto.request.AuctionHistorySearchRequest; import until.the.eternity.common.enums.ItemCategory; +import java.time.Instant; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; + /** AuctionHistoryRepository Interface 구현체 */ @Repository @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/auctionhistory/interfaces/external/dto/OpenApiAuctionHistoryListResponse.java b/src/main/java/until/the/eternity/auctionhistory/interfaces/external/dto/OpenApiAuctionHistoryListResponse.java index e194aeb7..c49a6b2b 100644 --- a/src/main/java/until/the/eternity/auctionhistory/interfaces/external/dto/OpenApiAuctionHistoryListResponse.java +++ b/src/main/java/until/the/eternity/auctionhistory/interfaces/external/dto/OpenApiAuctionHistoryListResponse.java @@ -1,6 +1,7 @@ package until.the.eternity.auctionhistory.interfaces.external.dto; import com.fasterxml.jackson.annotation.JsonProperty; + import java.util.List; public record OpenApiAuctionHistoryListResponse( diff --git a/src/main/java/until/the/eternity/auctionhistory/interfaces/external/dto/OpenApiAuctionHistoryResponse.java b/src/main/java/until/the/eternity/auctionhistory/interfaces/external/dto/OpenApiAuctionHistoryResponse.java index f41eb460..65b73ca5 100644 --- a/src/main/java/until/the/eternity/auctionhistory/interfaces/external/dto/OpenApiAuctionHistoryResponse.java +++ b/src/main/java/until/the/eternity/auctionhistory/interfaces/external/dto/OpenApiAuctionHistoryResponse.java @@ -2,9 +2,10 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; +import until.the.eternity.auctionitemoption.domain.dto.external.OpenApiAuctionItemOptionResponse; + import java.time.Instant; import java.util.List; -import until.the.eternity.auctionitemoption.domain.dto.external.OpenApiAuctionItemOptionResponse; public record OpenApiAuctionHistoryResponse( @JsonProperty("item_name") String itemName, diff --git a/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/enums/SearchStandard.java b/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/enums/SearchStandard.java index ef005676..feb2c35e 100644 --- a/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/enums/SearchStandard.java +++ b/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/enums/SearchStandard.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.v3.oas.annotations.media.Schema; + import java.util.Arrays; /** 검색 기준 (이상/이하/같음) */ diff --git a/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/enums/SortDirection.java b/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/enums/SortDirection.java index 82666061..e6aacf98 100644 --- a/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/enums/SortDirection.java +++ b/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/enums/SortDirection.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.v3.oas.annotations.media.Schema; + import java.util.Arrays; /** 정렬 방향 (오름차순/내림차순) */ diff --git a/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/request/AuctionHistorySearchRequest.java b/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/request/AuctionHistorySearchRequest.java index 0bccd0b4..2cf8d232 100644 --- a/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/request/AuctionHistorySearchRequest.java +++ b/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/request/AuctionHistorySearchRequest.java @@ -1,6 +1,7 @@ package until.the.eternity.auctionhistory.interfaces.rest.dto.request; import io.swagger.v3.oas.annotations.media.Schema; + import java.time.LocalDate; import java.util.List; diff --git a/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/response/AuctionHistoryDetailResponse.java b/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/response/AuctionHistoryDetailResponse.java index 082c562f..d694c60c 100644 --- a/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/response/AuctionHistoryDetailResponse.java +++ b/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/response/AuctionHistoryDetailResponse.java @@ -1,6 +1,7 @@ package until.the.eternity.auctionhistory.interfaces.rest.dto.response; import com.fasterxml.jackson.annotation.JsonFormat; + import java.time.Instant; import java.util.List; diff --git a/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionRealtimeItem.java b/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionRealtimeItem.java index ff498a80..d93c2eab 100644 --- a/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionRealtimeItem.java +++ b/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionRealtimeItem.java @@ -1,9 +1,10 @@ package until.the.eternity.auctionitem.domain.entity; import jakarta.persistence.*; +import lombok.*; + import java.time.Instant; import java.util.List; -import lombok.*; /** 실시간 경매장에서 판매 중인 아이템 정보. V15 마이그레이션에서 auction_item → auction_realtime_item으로 변경됨. */ @Entity diff --git a/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionRealtimeItemOption.java b/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionRealtimeItemOption.java index b0a651bf..28ba2905 100644 --- a/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionRealtimeItemOption.java +++ b/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionRealtimeItemOption.java @@ -1,12 +1,13 @@ package until.the.eternity.auctionitem.domain.entity; import jakarta.persistence.*; -import java.util.UUID; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import java.util.UUID; + /** 실시간 경매장 아이템(auction_realtime_item)에 연결된 아이템 옵션 정보. */ @Entity @Table(name = "auction_realtime_item_option") diff --git a/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionHistoryItemOption.java b/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionHistoryItemOption.java index dddac912..332605de 100644 --- a/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionHistoryItemOption.java +++ b/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionHistoryItemOption.java @@ -1,13 +1,14 @@ package until.the.eternity.auctionitemoption.domain.entity; import jakarta.persistence.*; -import java.util.UUID; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import until.the.eternity.auctionhistory.domain.entity.AuctionHistory; +import java.util.UUID; + /** * 경매장 거래 내역(auction_history)에 연결된 아이템 옵션 정보. V15 마이그레이션에서 auction_item_option → * auction_history_item_option으로 변경됨. diff --git a/src/main/java/until/the/eternity/auctionrealtime/application/scheduler/AuctionRealtimeScheduler.java b/src/main/java/until/the/eternity/auctionrealtime/application/scheduler/AuctionRealtimeScheduler.java index 0f310351..6db06623 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/application/scheduler/AuctionRealtimeScheduler.java +++ b/src/main/java/until/the/eternity/auctionrealtime/application/scheduler/AuctionRealtimeScheduler.java @@ -1,8 +1,5 @@ package until.the.eternity.auctionrealtime.application.scheduler; -import java.time.Instant; -import java.util.*; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -16,6 +13,10 @@ import until.the.eternity.auctionrealtime.domain.service.fetcher.AuctionRealtimeFetcherPort.FetchResult; import until.the.eternity.common.enums.ItemCategory; +import java.time.Instant; +import java.util.*; +import java.util.stream.Collectors; + /** * 실시간 경매장 데이터 수집 스케줄러. * diff --git a/src/main/java/until/the/eternity/auctionrealtime/application/service/AuctionRealtimeService.java b/src/main/java/until/the/eternity/auctionrealtime/application/service/AuctionRealtimeService.java index 07b1b2a5..9df0a986 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/application/service/AuctionRealtimeService.java +++ b/src/main/java/until/the/eternity/auctionrealtime/application/service/AuctionRealtimeService.java @@ -1,7 +1,5 @@ package until.the.eternity.auctionrealtime.application.service; -import java.time.Instant; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; @@ -20,6 +18,9 @@ import until.the.eternity.common.response.PageResponseDto; import until.the.eternity.config.CacheNames; +import java.time.Instant; +import java.util.List; + /** 실시간 경매장 데이터 Service. */ @Slf4j @Service diff --git a/src/main/java/until/the/eternity/auctionrealtime/application/service/fetcher/AuctionRealtimeFetcher.java b/src/main/java/until/the/eternity/auctionrealtime/application/service/fetcher/AuctionRealtimeFetcher.java index b2da4f82..132e9d16 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/application/service/fetcher/AuctionRealtimeFetcher.java +++ b/src/main/java/until/the/eternity/auctionrealtime/application/service/fetcher/AuctionRealtimeFetcher.java @@ -1,7 +1,5 @@ package until.the.eternity.auctionrealtime.application.service.fetcher; -import java.util.ArrayList; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -11,6 +9,9 @@ import until.the.eternity.auctionrealtime.interfaces.external.dto.OpenApiAuctionRealtimeResponse; import until.the.eternity.common.enums.ItemCategory; +import java.util.ArrayList; +import java.util.List; + /** * 실시간 경매장 데이터 Fetcher 구현체. * diff --git a/src/main/java/until/the/eternity/auctionrealtime/application/service/persister/AuctionRealtimePersister.java b/src/main/java/until/the/eternity/auctionrealtime/application/service/persister/AuctionRealtimePersister.java index 10e0a9fc..81a73e29 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/application/service/persister/AuctionRealtimePersister.java +++ b/src/main/java/until/the/eternity/auctionrealtime/application/service/persister/AuctionRealtimePersister.java @@ -1,6 +1,5 @@ package until.the.eternity.auctionrealtime.application.service.persister; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -10,6 +9,8 @@ import until.the.eternity.auctionrealtime.interfaces.external.dto.OpenApiAuctionRealtimeResponse; import until.the.eternity.common.enums.ItemCategory; +import java.util.List; + /** 실시간 경매장 데이터 Persister 구현체. */ @Slf4j @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/auctionrealtime/domain/mapper/AuctionRealtimeMapper.java b/src/main/java/until/the/eternity/auctionrealtime/domain/mapper/AuctionRealtimeMapper.java index e373ae9c..f292d803 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/domain/mapper/AuctionRealtimeMapper.java +++ b/src/main/java/until/the/eternity/auctionrealtime/domain/mapper/AuctionRealtimeMapper.java @@ -1,6 +1,5 @@ package until.the.eternity.auctionrealtime.domain.mapper; -import java.util.List; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import until.the.eternity.auctionitem.domain.entity.AuctionRealtimeItem; @@ -8,6 +7,8 @@ import until.the.eternity.auctionrealtime.interfaces.rest.dto.response.AuctionRealtimeDetailResponse; import until.the.eternity.auctionrealtime.interfaces.rest.dto.response.RealtimeItemOptionResponse; +import java.util.List; + /** AuctionRealtimeItem Entity to DTO mapper class. */ @Mapper(componentModel = "spring") public interface AuctionRealtimeMapper { diff --git a/src/main/java/until/the/eternity/auctionrealtime/domain/mapper/OpenApiAuctionRealtimeMapper.java b/src/main/java/until/the/eternity/auctionrealtime/domain/mapper/OpenApiAuctionRealtimeMapper.java index 1409ba29..8f65de6b 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/domain/mapper/OpenApiAuctionRealtimeMapper.java +++ b/src/main/java/until/the/eternity/auctionrealtime/domain/mapper/OpenApiAuctionRealtimeMapper.java @@ -1,13 +1,14 @@ package until.the.eternity.auctionrealtime.domain.mapper; -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.util.List; import org.mapstruct.*; import until.the.eternity.auctionitem.domain.entity.AuctionRealtimeItem; import until.the.eternity.auctionrealtime.interfaces.external.dto.OpenApiAuctionRealtimeResponse; import until.the.eternity.common.enums.ItemCategory; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.List; + /** OpenApiAuctionRealtimeResponse → AuctionRealtimeItem Entity 변환 Mapper. */ @Mapper(componentModel = "spring", uses = OpenApiRealtimeItemOptionMapper.class) public interface OpenApiAuctionRealtimeMapper { diff --git a/src/main/java/until/the/eternity/auctionrealtime/domain/repository/AuctionRealtimeItemRepositoryPort.java b/src/main/java/until/the/eternity/auctionrealtime/domain/repository/AuctionRealtimeItemRepositoryPort.java index 1ff1e35a..373499f7 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/domain/repository/AuctionRealtimeItemRepositoryPort.java +++ b/src/main/java/until/the/eternity/auctionrealtime/domain/repository/AuctionRealtimeItemRepositoryPort.java @@ -1,14 +1,15 @@ package until.the.eternity.auctionrealtime.domain.repository; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import until.the.eternity.auctionitem.domain.entity.AuctionRealtimeItem; import until.the.eternity.auctionrealtime.interfaces.rest.dto.request.AuctionRealtimeSearchRequest; import until.the.eternity.common.enums.ItemCategory; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + /** AuctionRealtimeItem Repository Port (Hexagonal Architecture). */ public interface AuctionRealtimeItemRepositoryPort { diff --git a/src/main/java/until/the/eternity/auctionrealtime/domain/service/fetcher/AuctionRealtimeFetcherPort.java b/src/main/java/until/the/eternity/auctionrealtime/domain/service/fetcher/AuctionRealtimeFetcherPort.java index 31220874..161e47ea 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/domain/service/fetcher/AuctionRealtimeFetcherPort.java +++ b/src/main/java/until/the/eternity/auctionrealtime/domain/service/fetcher/AuctionRealtimeFetcherPort.java @@ -1,9 +1,10 @@ package until.the.eternity.auctionrealtime.domain.service.fetcher; -import java.util.List; import until.the.eternity.auctionrealtime.interfaces.external.dto.OpenApiAuctionRealtimeResponse; import until.the.eternity.common.enums.ItemCategory; +import java.util.List; + /** 실시간 경매장 데이터 Fetcher Port. */ public interface AuctionRealtimeFetcherPort { diff --git a/src/main/java/until/the/eternity/auctionrealtime/domain/service/persister/AuctionRealtimePersisterPort.java b/src/main/java/until/the/eternity/auctionrealtime/domain/service/persister/AuctionRealtimePersisterPort.java index 41357a28..f5b6201e 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/domain/service/persister/AuctionRealtimePersisterPort.java +++ b/src/main/java/until/the/eternity/auctionrealtime/domain/service/persister/AuctionRealtimePersisterPort.java @@ -1,10 +1,11 @@ package until.the.eternity.auctionrealtime.domain.service.persister; -import java.util.List; import until.the.eternity.auctionitem.domain.entity.AuctionRealtimeItem; import until.the.eternity.auctionrealtime.interfaces.external.dto.OpenApiAuctionRealtimeResponse; import until.the.eternity.common.enums.ItemCategory; +import java.util.List; + /** 실시간 경매장 데이터 Persister Port. */ public interface AuctionRealtimePersisterPort { diff --git a/src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeItemRepository.java b/src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeItemRepository.java index 53cbdbf4..be29cbf2 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeItemRepository.java +++ b/src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeItemRepository.java @@ -1,12 +1,13 @@ package until.the.eternity.auctionrealtime.infrastructure.persistence; -import java.time.Instant; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import until.the.eternity.auctionitem.domain.entity.AuctionRealtimeItem; +import java.time.Instant; + /** AuctionRealtimeItem JPA Repository. */ public interface AuctionRealtimeItemRepository extends JpaRepository { diff --git a/src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeItemRepositoryPortImpl.java b/src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeItemRepositoryPortImpl.java index 6da0da26..b1b7c333 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeItemRepositoryPortImpl.java +++ b/src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeItemRepositoryPortImpl.java @@ -1,9 +1,6 @@ package until.the.eternity.auctionrealtime.infrastructure.persistence; import jakarta.persistence.EntityManager; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; @@ -14,6 +11,10 @@ import until.the.eternity.auctionrealtime.interfaces.rest.dto.request.AuctionRealtimeSearchRequest; import until.the.eternity.common.enums.ItemCategory; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + /** AuctionRealtimeItemRepositoryPort 구현체. */ @Slf4j @Repository diff --git a/src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeQueryDslRepository.java b/src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeQueryDslRepository.java index 50e9d8fd..5b34c20a 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeQueryDslRepository.java +++ b/src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeQueryDslRepository.java @@ -8,11 +8,6 @@ import com.querydsl.core.types.dsl.NumberTemplate; import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; -import java.time.Instant; -import java.time.LocalDate; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -29,6 +24,12 @@ import until.the.eternity.auctionrealtime.interfaces.rest.dto.request.AuctionRealtimeSearchRequest; import until.the.eternity.auctionrealtime.interfaces.rest.dto.request.DateAuctionExpireRequest; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.List; + @Component @RequiredArgsConstructor class AuctionRealtimeQueryDslRepository { diff --git a/src/main/java/until/the/eternity/auctionrealtime/interfaces/external/dto/OpenApiAuctionRealtimeListResponse.java b/src/main/java/until/the/eternity/auctionrealtime/interfaces/external/dto/OpenApiAuctionRealtimeListResponse.java index 980fc9e3..114de80e 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/interfaces/external/dto/OpenApiAuctionRealtimeListResponse.java +++ b/src/main/java/until/the/eternity/auctionrealtime/interfaces/external/dto/OpenApiAuctionRealtimeListResponse.java @@ -1,6 +1,7 @@ package until.the.eternity.auctionrealtime.interfaces.external.dto; import com.fasterxml.jackson.annotation.JsonProperty; + import java.util.List; /** Nexon Open API /auction/list 응답 리스트 DTO. */ diff --git a/src/main/java/until/the/eternity/auctionrealtime/interfaces/external/dto/OpenApiAuctionRealtimeResponse.java b/src/main/java/until/the/eternity/auctionrealtime/interfaces/external/dto/OpenApiAuctionRealtimeResponse.java index 28d59235..2b337bfe 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/interfaces/external/dto/OpenApiAuctionRealtimeResponse.java +++ b/src/main/java/until/the/eternity/auctionrealtime/interfaces/external/dto/OpenApiAuctionRealtimeResponse.java @@ -2,9 +2,10 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; +import until.the.eternity.auctionitemoption.domain.dto.external.OpenApiAuctionItemOptionResponse; + import java.time.Instant; import java.util.List; -import until.the.eternity.auctionitemoption.domain.dto.external.OpenApiAuctionItemOptionResponse; /** Nexon Open API /auction/list 응답 DTO. 현재 경매장에서 판매 중인 아이템 정보. */ public record OpenApiAuctionRealtimeResponse( diff --git a/src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/AuctionRealtimeSearchRequest.java b/src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/AuctionRealtimeSearchRequest.java index 05091fa2..30db58ba 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/AuctionRealtimeSearchRequest.java +++ b/src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/AuctionRealtimeSearchRequest.java @@ -1,12 +1,13 @@ package until.the.eternity.auctionrealtime.interfaces.rest.dto.request; import io.swagger.v3.oas.annotations.media.Schema; -import java.util.List; import until.the.eternity.auctionhistory.interfaces.rest.dto.request.EnchantSearchRequest; import until.the.eternity.auctionhistory.interfaces.rest.dto.request.ItemOptionSearchRequest; import until.the.eternity.auctionhistory.interfaces.rest.dto.request.MetalwareSearchRequest; import until.the.eternity.auctionhistory.interfaces.rest.dto.request.PriceSearchRequest; +import java.util.List; + /** 실시간 경매장 검색 조건 DTO */ @Schema(description = "실시간 경매장 검색 조건") public record AuctionRealtimeSearchRequest( diff --git a/src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/RealtimeSortField.java b/src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/RealtimeSortField.java index 223f038a..567b5d71 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/RealtimeSortField.java +++ b/src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/RealtimeSortField.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.v3.oas.annotations.media.Schema; + import java.util.Arrays; /** 실시간 경매장 정렬 필드 */ diff --git a/src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/response/AuctionRealtimeDetailResponse.java b/src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/response/AuctionRealtimeDetailResponse.java index ba184764..a3d5a9e0 100644 --- a/src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/response/AuctionRealtimeDetailResponse.java +++ b/src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/response/AuctionRealtimeDetailResponse.java @@ -1,6 +1,7 @@ package until.the.eternity.auctionrealtime.interfaces.rest.dto.response; import com.fasterxml.jackson.annotation.JsonFormat; + import java.time.Instant; import java.util.List; diff --git a/src/main/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionService.java b/src/main/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionService.java index 3597ca0b..5fa7233c 100644 --- a/src/main/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionService.java +++ b/src/main/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionService.java @@ -2,8 +2,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import java.util.List; -import java.util.Map; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; @@ -15,6 +13,9 @@ import until.the.eternity.auctionsearchoption.interfaces.rest.dto.response.SearchOptionMetadataResponse; import until.the.eternity.config.CacheNames; +import java.util.List; +import java.util.Map; + @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/auctionsearchoption/domain/entity/AuctionSearchOptionMetadata.java b/src/main/java/until/the/eternity/auctionsearchoption/domain/entity/AuctionSearchOptionMetadata.java index 6b7edf73..eac22495 100644 --- a/src/main/java/until/the/eternity/auctionsearchoption/domain/entity/AuctionSearchOptionMetadata.java +++ b/src/main/java/until/the/eternity/auctionsearchoption/domain/entity/AuctionSearchOptionMetadata.java @@ -1,13 +1,14 @@ package until.the.eternity.auctionsearchoption.domain.entity; import jakarta.persistence.*; -import java.time.LocalDateTime; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; +import java.time.LocalDateTime; + @Entity @Table( name = "auction_search_option_metadata", diff --git a/src/main/java/until/the/eternity/auctionsearchoption/domain/repository/AuctionSearchOptionRepositoryPort.java b/src/main/java/until/the/eternity/auctionsearchoption/domain/repository/AuctionSearchOptionRepositoryPort.java index 971be29e..fe4e89b0 100644 --- a/src/main/java/until/the/eternity/auctionsearchoption/domain/repository/AuctionSearchOptionRepositoryPort.java +++ b/src/main/java/until/the/eternity/auctionsearchoption/domain/repository/AuctionSearchOptionRepositoryPort.java @@ -1,8 +1,9 @@ package until.the.eternity.auctionsearchoption.domain.repository; -import java.util.List; import until.the.eternity.auctionsearchoption.domain.entity.AuctionSearchOptionMetadata; +import java.util.List; + public interface AuctionSearchOptionRepositoryPort { /** diff --git a/src/main/java/until/the/eternity/auctionsearchoption/infrastructure/persistence/AuctionSearchOptionJpaRepository.java b/src/main/java/until/the/eternity/auctionsearchoption/infrastructure/persistence/AuctionSearchOptionJpaRepository.java index e7074578..c18fd9e5 100644 --- a/src/main/java/until/the/eternity/auctionsearchoption/infrastructure/persistence/AuctionSearchOptionJpaRepository.java +++ b/src/main/java/until/the/eternity/auctionsearchoption/infrastructure/persistence/AuctionSearchOptionJpaRepository.java @@ -1,10 +1,11 @@ package until.the.eternity.auctionsearchoption.infrastructure.persistence; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import until.the.eternity.auctionsearchoption.domain.entity.AuctionSearchOptionMetadata; +import java.util.List; + @Repository interface AuctionSearchOptionJpaRepository extends JpaRepository { diff --git a/src/main/java/until/the/eternity/auctionsearchoption/infrastructure/persistence/AuctionSearchOptionRepositoryPortImpl.java b/src/main/java/until/the/eternity/auctionsearchoption/infrastructure/persistence/AuctionSearchOptionRepositoryPortImpl.java index 850f43f4..2440e821 100644 --- a/src/main/java/until/the/eternity/auctionsearchoption/infrastructure/persistence/AuctionSearchOptionRepositoryPortImpl.java +++ b/src/main/java/until/the/eternity/auctionsearchoption/infrastructure/persistence/AuctionSearchOptionRepositoryPortImpl.java @@ -1,11 +1,12 @@ package until.the.eternity.auctionsearchoption.infrastructure.persistence; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import until.the.eternity.auctionsearchoption.domain.entity.AuctionSearchOptionMetadata; import until.the.eternity.auctionsearchoption.domain.repository.AuctionSearchOptionRepositoryPort; +import java.util.List; + @Component @RequiredArgsConstructor class AuctionSearchOptionRepositoryPortImpl implements AuctionSearchOptionRepositoryPort { diff --git a/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/AuctionSearchOptionController.java b/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/AuctionSearchOptionController.java index 32669889..18ce7610 100644 --- a/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/AuctionSearchOptionController.java +++ b/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/AuctionSearchOptionController.java @@ -2,8 +2,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import java.time.Duration; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.CacheControl; import org.springframework.http.ResponseEntity; @@ -14,6 +12,9 @@ import until.the.eternity.auctionsearchoption.interfaces.rest.dto.response.SearchOptionMetadataResponse; import until.the.eternity.common.response.ApiResponse; +import java.time.Duration; +import java.util.List; + @Tag(name = "Auction Search Option", description = "경매 검색 옵션 API") @RestController @RequestMapping("/api/search-option") diff --git a/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/dto/response/FieldMetadata.java b/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/dto/response/FieldMetadata.java index 8b8b6ca1..43e5d916 100644 --- a/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/dto/response/FieldMetadata.java +++ b/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/dto/response/FieldMetadata.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; + import java.util.List; @Schema(description = "검색 조건 필드 메타데이터") diff --git a/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/dto/response/SearchOptionMetadataResponse.java b/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/dto/response/SearchOptionMetadataResponse.java index 04581ef7..02c318fb 100644 --- a/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/dto/response/SearchOptionMetadataResponse.java +++ b/src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/dto/response/SearchOptionMetadataResponse.java @@ -1,6 +1,7 @@ package until.the.eternity.auctionsearchoption.interfaces.rest.dto.response; import io.swagger.v3.oas.annotations.media.Schema; + import java.util.Map; @Schema(description = "검색 옵션 메타데이터 응답") diff --git a/src/main/java/until/the/eternity/batchlog/application/service/BatchExecutionLogService.java b/src/main/java/until/the/eternity/batchlog/application/service/BatchExecutionLogService.java index 7f108b64..183e99f6 100644 --- a/src/main/java/until/the/eternity/batchlog/application/service/BatchExecutionLogService.java +++ b/src/main/java/until/the/eternity/batchlog/application/service/BatchExecutionLogService.java @@ -1,7 +1,5 @@ package until.the.eternity.batchlog.application.service; -import java.time.LocalDateTime; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -13,6 +11,9 @@ import until.the.eternity.batchlog.domain.enums.TriggerType; import until.the.eternity.batchlog.domain.repository.BatchExecutionLogRepositoryPort; +import java.time.LocalDateTime; +import java.util.List; + @Service @RequiredArgsConstructor public class BatchExecutionLogService { diff --git a/src/main/java/until/the/eternity/batchlog/domain/entity/BatchExecutionLog.java b/src/main/java/until/the/eternity/batchlog/domain/entity/BatchExecutionLog.java index 2eb8c424..ff42ddf2 100644 --- a/src/main/java/until/the/eternity/batchlog/domain/entity/BatchExecutionLog.java +++ b/src/main/java/until/the/eternity/batchlog/domain/entity/BatchExecutionLog.java @@ -1,13 +1,14 @@ package until.the.eternity.batchlog.domain.entity; import jakarta.persistence.*; -import java.time.LocalDateTime; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import until.the.eternity.batchlog.domain.enums.BatchType; import until.the.eternity.batchlog.domain.enums.TriggerType; +import java.time.LocalDateTime; + @Entity @Table(name = "batch_execution_log") @Getter diff --git a/src/main/java/until/the/eternity/batchlog/domain/repository/BatchExecutionLogRepositoryPort.java b/src/main/java/until/the/eternity/batchlog/domain/repository/BatchExecutionLogRepositoryPort.java index 694bbde8..c6777c89 100644 --- a/src/main/java/until/the/eternity/batchlog/domain/repository/BatchExecutionLogRepositoryPort.java +++ b/src/main/java/until/the/eternity/batchlog/domain/repository/BatchExecutionLogRepositoryPort.java @@ -1,11 +1,12 @@ package until.the.eternity.batchlog.domain.repository; -import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import until.the.eternity.batchlog.domain.entity.BatchExecutionLog; import until.the.eternity.batchlog.domain.enums.BatchType; +import java.util.List; + public interface BatchExecutionLogRepositoryPort { void save(BatchExecutionLog log); diff --git a/src/main/java/until/the/eternity/batchlog/infrastructure/persistence/BatchExecutionLogJpaRepository.java b/src/main/java/until/the/eternity/batchlog/infrastructure/persistence/BatchExecutionLogJpaRepository.java index 0def2940..9fa06d38 100644 --- a/src/main/java/until/the/eternity/batchlog/infrastructure/persistence/BatchExecutionLogJpaRepository.java +++ b/src/main/java/until/the/eternity/batchlog/infrastructure/persistence/BatchExecutionLogJpaRepository.java @@ -1,12 +1,13 @@ package until.the.eternity.batchlog.infrastructure.persistence; -import java.util.Optional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import until.the.eternity.batchlog.domain.entity.BatchExecutionLog; import until.the.eternity.batchlog.domain.enums.BatchType; +import java.util.Optional; + public interface BatchExecutionLogJpaRepository extends JpaRepository { Page findByBatchTypeOrderByStartedAtDesc( diff --git a/src/main/java/until/the/eternity/batchlog/infrastructure/persistence/BatchExecutionLogRepositoryPortImpl.java b/src/main/java/until/the/eternity/batchlog/infrastructure/persistence/BatchExecutionLogRepositoryPortImpl.java index 7ece29b3..28bd82c4 100644 --- a/src/main/java/until/the/eternity/batchlog/infrastructure/persistence/BatchExecutionLogRepositoryPortImpl.java +++ b/src/main/java/until/the/eternity/batchlog/infrastructure/persistence/BatchExecutionLogRepositoryPortImpl.java @@ -1,8 +1,5 @@ package until.the.eternity.batchlog.infrastructure.persistence; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -11,6 +8,10 @@ import until.the.eternity.batchlog.domain.enums.BatchType; import until.the.eternity.batchlog.domain.repository.BatchExecutionLogRepositoryPort; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + @Repository @RequiredArgsConstructor public class BatchExecutionLogRepositoryPortImpl implements BatchExecutionLogRepositoryPort { diff --git a/src/main/java/until/the/eternity/batchlog/interfaces/rest/controller/BatchExecutionLogController.java b/src/main/java/until/the/eternity/batchlog/interfaces/rest/controller/BatchExecutionLogController.java index 3e44b8e5..fda8059f 100644 --- a/src/main/java/until/the/eternity/batchlog/interfaces/rest/controller/BatchExecutionLogController.java +++ b/src/main/java/until/the/eternity/batchlog/interfaces/rest/controller/BatchExecutionLogController.java @@ -5,7 +5,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.http.ResponseEntity; @@ -20,6 +19,8 @@ import until.the.eternity.batchlog.interfaces.rest.dto.response.BatchExecutionLogResponse; import until.the.eternity.common.response.PageResponseDto; +import java.util.List; + @RestController @RequestMapping("/api/batch-logs") @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/batchlog/interfaces/rest/dto/response/BatchExecutionLogResponse.java b/src/main/java/until/the/eternity/batchlog/interfaces/rest/dto/response/BatchExecutionLogResponse.java index edb134f8..8971fd41 100644 --- a/src/main/java/until/the/eternity/batchlog/interfaces/rest/dto/response/BatchExecutionLogResponse.java +++ b/src/main/java/until/the/eternity/batchlog/interfaces/rest/dto/response/BatchExecutionLogResponse.java @@ -1,11 +1,12 @@ package until.the.eternity.batchlog.interfaces.rest.dto.response; import io.swagger.v3.oas.annotations.media.Schema; -import java.time.LocalDateTime; import until.the.eternity.batchlog.domain.entity.BatchExecutionLog; import until.the.eternity.batchlog.domain.enums.BatchType; import until.the.eternity.batchlog.domain.enums.TriggerType; +import java.time.LocalDateTime; + @Schema(description = "배치 실행 로그 응답 DTO") public record BatchExecutionLogResponse( @Schema(description = "로그 ID") Long id, diff --git a/src/main/java/until/the/eternity/common/annotation/BatchLog.java b/src/main/java/until/the/eternity/common/annotation/BatchLog.java index 09776641..d33edfa3 100644 --- a/src/main/java/until/the/eternity/common/annotation/BatchLog.java +++ b/src/main/java/until/the/eternity/common/annotation/BatchLog.java @@ -1,8 +1,9 @@ package until.the.eternity.common.annotation; -import java.lang.annotation.*; import until.the.eternity.batchlog.domain.enums.BatchType; +import java.lang.annotation.*; + @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented diff --git a/src/main/java/until/the/eternity/common/annotation/MetalwareParameters.java b/src/main/java/until/the/eternity/common/annotation/MetalwareParameters.java index a6a9adcc..9efb1ea4 100644 --- a/src/main/java/until/the/eternity/common/annotation/MetalwareParameters.java +++ b/src/main/java/until/the/eternity/common/annotation/MetalwareParameters.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.media.Schema; + import java.lang.annotation.*; @Target(ElementType.METHOD) diff --git a/src/main/java/until/the/eternity/common/aspect/BatchExecutionLoggingAspect.java b/src/main/java/until/the/eternity/common/aspect/BatchExecutionLoggingAspect.java index 6644d3b3..51ed960e 100644 --- a/src/main/java/until/the/eternity/common/aspect/BatchExecutionLoggingAspect.java +++ b/src/main/java/until/the/eternity/common/aspect/BatchExecutionLoggingAspect.java @@ -1,6 +1,5 @@ package until.the.eternity.common.aspect; -import java.time.LocalDateTime; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; @@ -17,6 +16,8 @@ import until.the.eternity.common.annotation.BatchLog; import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSyncResponse; +import java.time.LocalDateTime; + @Slf4j @Aspect @Order(1) diff --git a/src/main/java/until/the/eternity/common/enums/ItemCategory.java b/src/main/java/until/the/eternity/common/enums/ItemCategory.java index 6b8ab078..ca9ee313 100644 --- a/src/main/java/until/the/eternity/common/enums/ItemCategory.java +++ b/src/main/java/until/the/eternity/common/enums/ItemCategory.java @@ -1,11 +1,12 @@ package until.the.eternity.common.enums; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + import java.util.Arrays; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; -import lombok.Getter; -import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/common/enums/SortDirection.java b/src/main/java/until/the/eternity/common/enums/SortDirection.java index 5e688da2..4a797556 100644 --- a/src/main/java/until/the/eternity/common/enums/SortDirection.java +++ b/src/main/java/until/the/eternity/common/enums/SortDirection.java @@ -3,9 +3,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.v3.oas.annotations.media.Schema; -import java.util.Arrays; import org.springframework.data.domain.Sort; +import java.util.Arrays; + /** 정렬 방향 (오름차순/내림차순) */ @Schema(description = "정렬 방향", enumAsRef = true) public enum SortDirection { diff --git a/src/main/java/until/the/eternity/common/enums/SortField.java b/src/main/java/until/the/eternity/common/enums/SortField.java index 704d79d5..3c26de2b 100644 --- a/src/main/java/until/the/eternity/common/enums/SortField.java +++ b/src/main/java/until/the/eternity/common/enums/SortField.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.v3.oas.annotations.media.Schema; + import java.util.Arrays; /** 정렬 필드 */ diff --git a/src/main/java/until/the/eternity/common/enums/UserRole.java b/src/main/java/until/the/eternity/common/enums/UserRole.java index 02d2ddd8..e6c61071 100644 --- a/src/main/java/until/the/eternity/common/enums/UserRole.java +++ b/src/main/java/until/the/eternity/common/enums/UserRole.java @@ -1,12 +1,13 @@ package until.the.eternity.common.enums; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + import java.util.Arrays; import java.util.Map; import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; -import lombok.Getter; -import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/common/exception/GlobalExceptionCode.java b/src/main/java/until/the/eternity/common/exception/GlobalExceptionCode.java index 21c217b0..1169e930 100644 --- a/src/main/java/until/the/eternity/common/exception/GlobalExceptionCode.java +++ b/src/main/java/until/the/eternity/common/exception/GlobalExceptionCode.java @@ -1,11 +1,11 @@ package until.the.eternity.common.exception; -import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; - import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; +import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; + @Getter @RequiredArgsConstructor public enum GlobalExceptionCode implements ExceptionCode { diff --git a/src/main/java/until/the/eternity/common/exception/GlobalExceptionHandler.java b/src/main/java/until/the/eternity/common/exception/GlobalExceptionHandler.java index 4cf5af10..bc069d00 100644 --- a/src/main/java/until/the/eternity/common/exception/GlobalExceptionHandler.java +++ b/src/main/java/until/the/eternity/common/exception/GlobalExceptionHandler.java @@ -1,7 +1,5 @@ package until.the.eternity.common.exception; -import static until.the.eternity.common.exception.GlobalExceptionCode.SERVER_ERROR; - import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -9,6 +7,8 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; import until.the.eternity.common.response.ApiResponse; +import static until.the.eternity.common.exception.GlobalExceptionCode.SERVER_ERROR; + @Slf4j @RestControllerAdvice public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { diff --git a/src/main/java/until/the/eternity/common/filter/GatewayAuthFilter.java b/src/main/java/until/the/eternity/common/filter/GatewayAuthFilter.java index 678f8ebc..703faeb7 100644 --- a/src/main/java/until/the/eternity/common/filter/GatewayAuthFilter.java +++ b/src/main/java/until/the/eternity/common/filter/GatewayAuthFilter.java @@ -4,9 +4,6 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -20,6 +17,10 @@ import until.the.eternity.common.enums.UserRole; import until.the.eternity.common.util.IpAddressUtil; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + /** * Gateway에서 전달한 인증 헤더(X-Auth-*)를 기반으로 Spring Security의 Authentication을 생성하는 필터 * diff --git a/src/main/java/until/the/eternity/common/response/ApiResponse.java b/src/main/java/until/the/eternity/common/response/ApiResponse.java index c7f83b13..c7b99b00 100644 --- a/src/main/java/until/the/eternity/common/response/ApiResponse.java +++ b/src/main/java/until/the/eternity/common/response/ApiResponse.java @@ -1,9 +1,10 @@ package until.the.eternity.common.response; -import java.time.Instant; import lombok.Builder; import lombok.Getter; +import java.time.Instant; + @Getter public class ApiResponse { diff --git a/src/main/java/until/the/eternity/common/response/PageResponseDto.java b/src/main/java/until/the/eternity/common/response/PageResponseDto.java index c142faac..0919ce20 100644 --- a/src/main/java/until/the/eternity/common/response/PageResponseDto.java +++ b/src/main/java/until/the/eternity/common/response/PageResponseDto.java @@ -1,6 +1,7 @@ package until.the.eternity.common.response; import io.swagger.v3.oas.annotations.media.Schema; + import java.util.List; @Schema(description = "페이지 응답 객체") diff --git a/src/main/java/until/the/eternity/common/util/CacheKeyBuilder.java b/src/main/java/until/the/eternity/common/util/CacheKeyBuilder.java index df9e2e13..42a1f85f 100644 --- a/src/main/java/until/the/eternity/common/util/CacheKeyBuilder.java +++ b/src/main/java/until/the/eternity/common/util/CacheKeyBuilder.java @@ -1,6 +1,5 @@ package until.the.eternity.common.util; -import java.time.LocalDate; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import until.the.eternity.auctionhistory.interfaces.rest.dto.request.AuctionHistorySearchRequest; @@ -10,6 +9,8 @@ import until.the.eternity.iteminfo.interfaces.rest.dto.request.ItemInfoSearchRequest; import until.the.eternity.metalwareinfo.interfaces.rest.dto.request.MetalwareAttributeInfoSearchRequest; +import java.time.LocalDate; + public final class CacheKeyBuilder { private CacheKeyBuilder() {} diff --git a/src/main/java/until/the/eternity/common/util/SegongOptionParser.java b/src/main/java/until/the/eternity/common/util/SegongOptionParser.java index 3b362769..55fd9a26 100644 --- a/src/main/java/until/the/eternity/common/util/SegongOptionParser.java +++ b/src/main/java/until/the/eternity/common/util/SegongOptionParser.java @@ -1,8 +1,9 @@ package until.the.eternity.common.util; +import lombok.extern.slf4j.Slf4j; + import java.util.regex.Matcher; import java.util.regex.Pattern; -import lombok.extern.slf4j.Slf4j; /** * 세공 옵션의 option_value를 파싱하여 스킬명(option_value), 레벨(option_value2), 설명(option_desc)을 분리하는 유틸리티. diff --git a/src/main/java/until/the/eternity/config/CacheStartupWarmupRunner.java b/src/main/java/until/the/eternity/config/CacheStartupWarmupRunner.java index 65438ed8..88f0967c 100644 --- a/src/main/java/until/the/eternity/config/CacheStartupWarmupRunner.java +++ b/src/main/java/until/the/eternity/config/CacheStartupWarmupRunner.java @@ -1,9 +1,5 @@ package until.the.eternity.config; -import java.time.LocalDate; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; @@ -35,6 +31,11 @@ import until.the.eternity.ranking.util.RankingConstants; import until.the.eternity.statistics.application.service.*; +import java.time.LocalDate; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + @Slf4j @Component @Order(200) diff --git a/src/main/java/until/the/eternity/config/RedisCacheErrorHandler.java b/src/main/java/until/the/eternity/config/RedisCacheErrorHandler.java index ca5c391f..847ae193 100644 --- a/src/main/java/until/the/eternity/config/RedisCacheErrorHandler.java +++ b/src/main/java/until/the/eternity/config/RedisCacheErrorHandler.java @@ -1,10 +1,11 @@ package until.the.eternity.config; -import java.net.ConnectException; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.Cache; import org.springframework.cache.interceptor.CacheErrorHandler; +import java.net.ConnectException; + /** * Redis 장애 시 캐시 오류를 로깅만 하고 예외를 전파하지 않는 핸들러. * diff --git a/src/main/java/until/the/eternity/config/RedisConfig.java b/src/main/java/until/the/eternity/config/RedisConfig.java index 49897a51..0ce20f22 100644 --- a/src/main/java/until/the/eternity/config/RedisConfig.java +++ b/src/main/java/until/the/eternity/config/RedisConfig.java @@ -6,9 +6,6 @@ import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import java.time.Duration; -import java.util.HashMap; -import java.util.Map; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.CachingConfigurer; import org.springframework.cache.annotation.EnableCaching; @@ -22,6 +19,10 @@ import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.StringRedisSerializer; +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; + @Configuration @EnableCaching public class RedisConfig implements CachingConfigurer { diff --git a/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java b/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java index af0147a8..29ca38fe 100644 --- a/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java +++ b/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java @@ -1,12 +1,13 @@ package until.the.eternity.config.openapi; -import java.time.Duration; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.ExchangeFilterFunction; import reactor.core.publisher.Mono; +import java.time.Duration; + @Slf4j @Component @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/config/openapi/OpenApiRetryPolicy.java b/src/main/java/until/the/eternity/config/openapi/OpenApiRetryPolicy.java index 8c9d0cff..a419df7c 100644 --- a/src/main/java/until/the/eternity/config/openapi/OpenApiRetryPolicy.java +++ b/src/main/java/until/the/eternity/config/openapi/OpenApiRetryPolicy.java @@ -1,11 +1,12 @@ package until.the.eternity.config.openapi; -import java.time.Duration; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.WebClientResponseException; import reactor.util.retry.Retry; import reactor.util.retry.RetryBackoffSpec; +import java.time.Duration; + /** Nexon OPEN API 전용 재시도(Back-off) 정책. */ @Component public class OpenApiRetryPolicy { diff --git a/src/main/java/until/the/eternity/config/openapi/OpenApiWebClientProperties.java b/src/main/java/until/the/eternity/config/openapi/OpenApiWebClientProperties.java index 9d51746d..f8d79043 100644 --- a/src/main/java/until/the/eternity/config/openapi/OpenApiWebClientProperties.java +++ b/src/main/java/until/the/eternity/config/openapi/OpenApiWebClientProperties.java @@ -2,10 +2,11 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Positive; -import java.time.Duration; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.validation.annotation.Validated; +import java.time.Duration; + /** 외부 API용 WebClient 설정값 홀더 application.yml 사용) */ @Validated @ConfigurationProperties(prefix = "openapi.nexon") diff --git a/src/main/java/until/the/eternity/enchantinfo/application/service/EnchantInfoService.java b/src/main/java/until/the/eternity/enchantinfo/application/service/EnchantInfoService.java index 7e1822c7..a88ed7a5 100644 --- a/src/main/java/until/the/eternity/enchantinfo/application/service/EnchantInfoService.java +++ b/src/main/java/until/the/eternity/enchantinfo/application/service/EnchantInfoService.java @@ -1,7 +1,5 @@ package until.the.eternity.enchantinfo.application.service; -import java.util.List; -import java.util.Set; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -17,6 +15,9 @@ import until.the.eternity.enchantinfo.interfaces.rest.dto.response.EnchantInfoResponse; import until.the.eternity.enchantinfo.interfaces.rest.dto.response.EnchantInfoSyncResponse; +import java.util.List; +import java.util.Set; + @Service @Transactional(readOnly = true) @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/enchantinfo/domain/exception/EnchantInfoExceptionCode.java b/src/main/java/until/the/eternity/enchantinfo/domain/exception/EnchantInfoExceptionCode.java index ab88e521..6fc377b0 100644 --- a/src/main/java/until/the/eternity/enchantinfo/domain/exception/EnchantInfoExceptionCode.java +++ b/src/main/java/until/the/eternity/enchantinfo/domain/exception/EnchantInfoExceptionCode.java @@ -1,12 +1,12 @@ package until.the.eternity.enchantinfo.domain.exception; -import static org.springframework.http.HttpStatus.BAD_REQUEST; - import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import until.the.eternity.common.exception.ExceptionCode; +import static org.springframework.http.HttpStatus.BAD_REQUEST; + @Getter @RequiredArgsConstructor public enum EnchantInfoExceptionCode implements ExceptionCode { diff --git a/src/main/java/until/the/eternity/enchantinfo/domain/repository/EnchantInfoRepositoryPort.java b/src/main/java/until/the/eternity/enchantinfo/domain/repository/EnchantInfoRepositoryPort.java index 753bf6ad..379972de 100644 --- a/src/main/java/until/the/eternity/enchantinfo/domain/repository/EnchantInfoRepositoryPort.java +++ b/src/main/java/until/the/eternity/enchantinfo/domain/repository/EnchantInfoRepositoryPort.java @@ -1,10 +1,11 @@ package until.the.eternity.enchantinfo.domain.repository; -import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import until.the.eternity.enchantinfo.infrastructure.persistence.EnchantInfoEntity; +import java.util.List; + public interface EnchantInfoRepositoryPort { Page findAll(Pageable pageable); diff --git a/src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoJpaRepository.java b/src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoJpaRepository.java index 392c1fe7..b007aae5 100644 --- a/src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoJpaRepository.java +++ b/src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoJpaRepository.java @@ -1,10 +1,11 @@ package until.the.eternity.enchantinfo.infrastructure.persistence; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; +import java.util.List; + public interface EnchantInfoJpaRepository extends JpaRepository { @Query("SELECT e.fullname FROM EnchantInfoEntity e ORDER BY e.id ASC") diff --git a/src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoRepositoryPortImpl.java b/src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoRepositoryPortImpl.java index e0c27316..600bde4a 100644 --- a/src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoRepositoryPortImpl.java +++ b/src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoRepositoryPortImpl.java @@ -1,12 +1,13 @@ package until.the.eternity.enchantinfo.infrastructure.persistence; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Repository; import until.the.eternity.enchantinfo.domain.repository.EnchantInfoRepositoryPort; +import java.util.List; + @Repository @RequiredArgsConstructor public class EnchantInfoRepositoryPortImpl implements EnchantInfoRepositoryPort { diff --git a/src/main/java/until/the/eternity/enchantinfo/interfaces/rest/controller/EnchantInfoController.java b/src/main/java/until/the/eternity/enchantinfo/interfaces/rest/controller/EnchantInfoController.java index 62cfb1e7..6db5b49b 100644 --- a/src/main/java/until/the/eternity/enchantinfo/interfaces/rest/controller/EnchantInfoController.java +++ b/src/main/java/until/the/eternity/enchantinfo/interfaces/rest/controller/EnchantInfoController.java @@ -5,7 +5,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.http.ResponseEntity; @@ -16,6 +15,8 @@ import until.the.eternity.enchantinfo.interfaces.rest.dto.response.EnchantInfoResponse; import until.the.eternity.enchantinfo.interfaces.rest.dto.response.EnchantInfoSyncResponse; +import java.util.List; + @RestController @RequestMapping("/api/enchant-infos") @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/hornBugle/application/runner/HornBugleIndexRunner.java b/src/main/java/until/the/eternity/hornBugle/application/runner/HornBugleIndexRunner.java index f4da3691..f96534ff 100644 --- a/src/main/java/until/the/eternity/hornBugle/application/runner/HornBugleIndexRunner.java +++ b/src/main/java/until/the/eternity/hornBugle/application/runner/HornBugleIndexRunner.java @@ -1,6 +1,5 @@ package until.the.eternity.hornBugle.application.runner; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; @@ -14,6 +13,8 @@ import until.the.eternity.hornBugle.domain.repository.HornBugleRepositoryPort; import until.the.eternity.hornBugle.infrastructure.elasticsearch.HornBugleIndexService; +import java.util.List; + /** * 서버 재기동 시 DB 데이터를 Elasticsearch에 일괄 색인하는 Runner. application.yml에서 * elasticsearch.index.enabled=true로 설정 시 활성화됩니다. diff --git a/src/main/java/until/the/eternity/hornBugle/application/scheduler/HornBugleScheduler.java b/src/main/java/until/the/eternity/hornBugle/application/scheduler/HornBugleScheduler.java index aaa6f55e..1fe31492 100644 --- a/src/main/java/until/the/eternity/hornBugle/application/scheduler/HornBugleScheduler.java +++ b/src/main/java/until/the/eternity/hornBugle/application/scheduler/HornBugleScheduler.java @@ -1,10 +1,5 @@ package until.the.eternity.hornBugle.application.scheduler; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -20,6 +15,12 @@ import until.the.eternity.hornBugle.kafka.application.HornBugleKafkaProducerService; import until.the.eternity.hornBugle.kafka.dto.UserVerificationVerifyEvent; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + @Slf4j @Component @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/hornBugle/application/service/HornBugleService.java b/src/main/java/until/the/eternity/hornBugle/application/service/HornBugleService.java index fafacb9e..242644f0 100644 --- a/src/main/java/until/the/eternity/hornBugle/application/service/HornBugleService.java +++ b/src/main/java/until/the/eternity/hornBugle/application/service/HornBugleService.java @@ -1,8 +1,5 @@ package until.the.eternity.hornBugle.application.service; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -22,6 +19,10 @@ import until.the.eternity.hornBugle.interfaces.rest.dto.request.HornBuglePageRequestDto; import until.the.eternity.hornBugle.interfaces.rest.dto.response.HornBugleHistoryResponse; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + @Slf4j @Service public class HornBugleService { diff --git a/src/main/java/until/the/eternity/hornBugle/domain/entity/HornBugleWorldHistory.java b/src/main/java/until/the/eternity/hornBugle/domain/entity/HornBugleWorldHistory.java index 482c8572..05ca8dff 100644 --- a/src/main/java/until/the/eternity/hornBugle/domain/entity/HornBugleWorldHistory.java +++ b/src/main/java/until/the/eternity/hornBugle/domain/entity/HornBugleWorldHistory.java @@ -1,9 +1,10 @@ package until.the.eternity.hornBugle.domain.entity; import jakarta.persistence.*; -import java.time.Instant; import lombok.*; +import java.time.Instant; + @Entity @Table( name = "horn_bugle_world_history", diff --git a/src/main/java/until/the/eternity/hornBugle/domain/enums/HornBugleServer.java b/src/main/java/until/the/eternity/hornBugle/domain/enums/HornBugleServer.java index fe361d09..51bd034f 100644 --- a/src/main/java/until/the/eternity/hornBugle/domain/enums/HornBugleServer.java +++ b/src/main/java/until/the/eternity/hornBugle/domain/enums/HornBugleServer.java @@ -1,10 +1,11 @@ package until.the.eternity.hornBugle.domain.enums; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.Arrays; -import lombok.Getter; -import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/hornBugle/domain/mapper/HornBugleMapper.java b/src/main/java/until/the/eternity/hornBugle/domain/mapper/HornBugleMapper.java index a24aee75..c2bb9e73 100644 --- a/src/main/java/until/the/eternity/hornBugle/domain/mapper/HornBugleMapper.java +++ b/src/main/java/until/the/eternity/hornBugle/domain/mapper/HornBugleMapper.java @@ -1,6 +1,5 @@ package until.the.eternity.hornBugle.domain.mapper; -import java.time.Instant; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; @@ -9,6 +8,8 @@ import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryResponse; import until.the.eternity.hornBugle.interfaces.rest.dto.response.HornBugleHistoryResponse; +import java.time.Instant; + @Mapper(componentModel = "spring") public interface HornBugleMapper { diff --git a/src/main/java/until/the/eternity/hornBugle/domain/repository/HornBugleRepositoryPort.java b/src/main/java/until/the/eternity/hornBugle/domain/repository/HornBugleRepositoryPort.java index 8e85b756..75dfd277 100644 --- a/src/main/java/until/the/eternity/hornBugle/domain/repository/HornBugleRepositoryPort.java +++ b/src/main/java/until/the/eternity/hornBugle/domain/repository/HornBugleRepositoryPort.java @@ -1,12 +1,13 @@ package until.the.eternity.hornBugle.domain.repository; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + public interface HornBugleRepositoryPort { void saveAll(List entities); diff --git a/src/main/java/until/the/eternity/hornBugle/domain/service/HornBugleDuplicateChecker.java b/src/main/java/until/the/eternity/hornBugle/domain/service/HornBugleDuplicateChecker.java index 846ea39a..4d8be4d3 100644 --- a/src/main/java/until/the/eternity/hornBugle/domain/service/HornBugleDuplicateChecker.java +++ b/src/main/java/until/the/eternity/hornBugle/domain/service/HornBugleDuplicateChecker.java @@ -1,10 +1,5 @@ package until.the.eternity.hornBugle.domain.service; -import java.time.Instant; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -13,6 +8,12 @@ import until.the.eternity.hornBugle.domain.repository.HornBugleRepositoryPort; import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryResponse; +import java.time.Instant; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; + @Slf4j @Component @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/hornBugle/infrastructure/elasticsearch/HornBugleDocument.java b/src/main/java/until/the/eternity/hornBugle/infrastructure/elasticsearch/HornBugleDocument.java index 7c0ceb37..98bb7864 100644 --- a/src/main/java/until/the/eternity/hornBugle/infrastructure/elasticsearch/HornBugleDocument.java +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/elasticsearch/HornBugleDocument.java @@ -1,6 +1,5 @@ package until.the.eternity.hornBugle.infrastructure.elasticsearch; -import java.time.Instant; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -12,6 +11,8 @@ import org.springframework.data.elasticsearch.annotations.Setting; import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; +import java.time.Instant; + @Document(indexName = "horn_bugle_world_history") @Setting(settingPath = "elasticsearch/horn-bugle-settings.json") @Getter diff --git a/src/main/java/until/the/eternity/hornBugle/infrastructure/elasticsearch/HornBugleIndexService.java b/src/main/java/until/the/eternity/hornBugle/infrastructure/elasticsearch/HornBugleIndexService.java index d439bfb8..52f59505 100644 --- a/src/main/java/until/the/eternity/hornBugle/infrastructure/elasticsearch/HornBugleIndexService.java +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/elasticsearch/HornBugleIndexService.java @@ -2,7 +2,6 @@ import co.elastic.clients.elasticsearch._types.query_dsl.BoolQuery; import co.elastic.clients.elasticsearch._types.query_dsl.Query; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -18,6 +17,8 @@ import org.springframework.stereotype.Service; import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; +import java.util.List; + @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java index 2e6acde1..e68b01eb 100644 --- a/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java @@ -1,8 +1,5 @@ package until.the.eternity.hornBugle.infrastructure.persistence; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -10,6 +7,10 @@ import org.springframework.stereotype.Repository; import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + @Repository public interface HornBugleJpaRepository extends JpaRepository { diff --git a/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java index 52366b65..706bc05b 100644 --- a/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java @@ -1,9 +1,6 @@ package until.the.eternity.hornBugle.infrastructure.persistence; import jakarta.persistence.EntityManager; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; @@ -13,6 +10,10 @@ import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; import until.the.eternity.hornBugle.domain.repository.HornBugleRepositoryPort; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + @Repository @RequiredArgsConstructor public class HornBugleRepositoryPortImpl implements HornBugleRepositoryPort { diff --git a/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryListResponse.java b/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryListResponse.java index 4090a2d4..adea275a 100644 --- a/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryListResponse.java +++ b/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryListResponse.java @@ -1,6 +1,7 @@ package until.the.eternity.hornBugle.interfaces.external.dto; import com.fasterxml.jackson.annotation.JsonProperty; + import java.util.List; public record OpenApiHornBugleHistoryListResponse( diff --git a/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryResponse.java b/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryResponse.java index 1a11eb0f..78f67772 100644 --- a/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryResponse.java +++ b/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; + import java.time.Instant; public record OpenApiHornBugleHistoryResponse( diff --git a/src/main/java/until/the/eternity/hornBugle/interfaces/rest/dto/response/HornBugleHistoryResponse.java b/src/main/java/until/the/eternity/hornBugle/interfaces/rest/dto/response/HornBugleHistoryResponse.java index cd47b1c0..7660ff1a 100644 --- a/src/main/java/until/the/eternity/hornBugle/interfaces/rest/dto/response/HornBugleHistoryResponse.java +++ b/src/main/java/until/the/eternity/hornBugle/interfaces/rest/dto/response/HornBugleHistoryResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; + import java.time.Instant; @Schema(description = "뿔피리 히스토리 응답") diff --git a/src/main/java/until/the/eternity/hornBugle/kafka/application/HornBugleKafkaProducerService.java b/src/main/java/until/the/eternity/hornBugle/kafka/application/HornBugleKafkaProducerService.java index 6a5d854a..df662e9b 100644 --- a/src/main/java/until/the/eternity/hornBugle/kafka/application/HornBugleKafkaProducerService.java +++ b/src/main/java/until/the/eternity/hornBugle/kafka/application/HornBugleKafkaProducerService.java @@ -1,6 +1,5 @@ package until.the.eternity.hornBugle.kafka.application; -import java.util.concurrent.CompletableFuture; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.kafka.core.KafkaTemplate; @@ -9,6 +8,8 @@ import until.the.eternity.common.constant.KafkaTopicConstant; import until.the.eternity.hornBugle.kafka.dto.UserVerificationVerifyEvent; +import java.util.concurrent.CompletableFuture; + @Service @RequiredArgsConstructor public class HornBugleKafkaProducerService { diff --git a/src/main/java/until/the/eternity/iteminfo/application/service/ItemInfoService.java b/src/main/java/until/the/eternity/iteminfo/application/service/ItemInfoService.java index 6275c02d..4527a44e 100644 --- a/src/main/java/until/the/eternity/iteminfo/application/service/ItemInfoService.java +++ b/src/main/java/until/the/eternity/iteminfo/application/service/ItemInfoService.java @@ -1,9 +1,5 @@ package until.the.eternity.iteminfo.application.service; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; @@ -26,6 +22,11 @@ import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSummaryResponse; import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSyncResponse; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + @Slf4j @Service @Transactional(readOnly = true) diff --git a/src/main/java/until/the/eternity/iteminfo/domain/entity/ItemInfoId.java b/src/main/java/until/the/eternity/iteminfo/domain/entity/ItemInfoId.java index d53cd3b3..6293e4ee 100644 --- a/src/main/java/until/the/eternity/iteminfo/domain/entity/ItemInfoId.java +++ b/src/main/java/until/the/eternity/iteminfo/domain/entity/ItemInfoId.java @@ -2,9 +2,10 @@ import jakarta.persistence.Column; import jakarta.persistence.Embeddable; -import java.io.Serializable; import lombok.*; +import java.io.Serializable; + @Embeddable @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/src/main/java/until/the/eternity/iteminfo/domain/exception/ItemInfoExceptionCode.java b/src/main/java/until/the/eternity/iteminfo/domain/exception/ItemInfoExceptionCode.java index a7ffd4c2..f870031a 100644 --- a/src/main/java/until/the/eternity/iteminfo/domain/exception/ItemInfoExceptionCode.java +++ b/src/main/java/until/the/eternity/iteminfo/domain/exception/ItemInfoExceptionCode.java @@ -1,12 +1,12 @@ package until.the.eternity.iteminfo.domain.exception; -import static org.springframework.http.HttpStatus.BAD_REQUEST; - import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import until.the.eternity.common.exception.ExceptionCode; +import static org.springframework.http.HttpStatus.BAD_REQUEST; + @Getter @RequiredArgsConstructor public enum ItemInfoExceptionCode implements ExceptionCode { diff --git a/src/main/java/until/the/eternity/iteminfo/domain/repository/ItemInfoRepositoryPort.java b/src/main/java/until/the/eternity/iteminfo/domain/repository/ItemInfoRepositoryPort.java index b540fc66..c9f85ea3 100644 --- a/src/main/java/until/the/eternity/iteminfo/domain/repository/ItemInfoRepositoryPort.java +++ b/src/main/java/until/the/eternity/iteminfo/domain/repository/ItemInfoRepositoryPort.java @@ -1,12 +1,13 @@ package until.the.eternity.iteminfo.domain.repository; -import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import until.the.eternity.iteminfo.domain.entity.ItemInfo; import until.the.eternity.iteminfo.domain.entity.ItemInfoId; import until.the.eternity.iteminfo.interfaces.rest.dto.request.ItemInfoSearchRequest; +import java.util.List; + public interface ItemInfoRepositoryPort { List findAll(); diff --git a/src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoJpaRepository.java b/src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoJpaRepository.java index 2be98732..c6838467 100644 --- a/src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoJpaRepository.java +++ b/src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoJpaRepository.java @@ -1,12 +1,13 @@ package until.the.eternity.iteminfo.infrastructure.persistence; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; import until.the.eternity.iteminfo.domain.entity.ItemInfo; import until.the.eternity.iteminfo.domain.entity.ItemInfoId; +import java.util.List; + public interface ItemInfoJpaRepository extends JpaRepository, JpaSpecificationExecutor { diff --git a/src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoQueryDslRepository.java b/src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoQueryDslRepository.java index 266b2303..e13e45f9 100644 --- a/src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoQueryDslRepository.java +++ b/src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoQueryDslRepository.java @@ -3,7 +3,6 @@ import com.querydsl.core.BooleanBuilder; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -13,6 +12,8 @@ import until.the.eternity.iteminfo.domain.entity.QItemInfo; import until.the.eternity.iteminfo.interfaces.rest.dto.request.ItemInfoSearchRequest; +import java.util.List; + @Repository @RequiredArgsConstructor public class ItemInfoQueryDslRepository { diff --git a/src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoRepositoryPortImpl.java b/src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoRepositoryPortImpl.java index 66481cac..497ad7d1 100644 --- a/src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoRepositoryPortImpl.java +++ b/src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoRepositoryPortImpl.java @@ -1,6 +1,5 @@ package until.the.eternity.iteminfo.infrastructure.persistence; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -10,6 +9,8 @@ import until.the.eternity.iteminfo.domain.repository.ItemInfoRepositoryPort; import until.the.eternity.iteminfo.interfaces.rest.dto.request.ItemInfoSearchRequest; +import java.util.List; + @Repository @RequiredArgsConstructor public class ItemInfoRepositoryPortImpl implements ItemInfoRepositoryPort { diff --git a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/controller/ItemInfoController.java b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/controller/ItemInfoController.java index 234cb80d..73f8b97a 100644 --- a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/controller/ItemInfoController.java +++ b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/controller/ItemInfoController.java @@ -4,8 +4,6 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import java.time.Duration; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.http.CacheControl; @@ -22,6 +20,9 @@ import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSummaryResponse; import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSyncResponse; +import java.time.Duration; +import java.util.List; + @RestController @RequestMapping("/api/item-infos") @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemCategoryResponse.java b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemCategoryResponse.java index 91d12e3e..6ae22e44 100644 --- a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemCategoryResponse.java +++ b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemCategoryResponse.java @@ -1,11 +1,12 @@ package until.the.eternity.iteminfo.interfaces.rest.dto.response; -import java.util.Arrays; -import java.util.List; import lombok.Builder; import lombok.Getter; import until.the.eternity.common.enums.ItemCategory; +import java.util.Arrays; +import java.util.List; + @Getter @Builder public class ItemCategoryResponse { diff --git a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoResponse.java b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoResponse.java index be9d890b..70897793 100644 --- a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoResponse.java +++ b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoResponse.java @@ -1,11 +1,12 @@ package until.the.eternity.iteminfo.interfaces.rest.dto.response; import io.swagger.v3.oas.annotations.media.Schema; -import java.util.List; -import java.util.stream.Collectors; import lombok.Builder; import until.the.eternity.iteminfo.domain.entity.ItemInfo; +import java.util.List; +import java.util.stream.Collectors; + @Builder @Schema(description = "아이템 정보 응답 DTO") public record ItemInfoResponse( diff --git a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoSummaryResponse.java b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoSummaryResponse.java index 98e5cfd5..4b9da91b 100644 --- a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoSummaryResponse.java +++ b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoSummaryResponse.java @@ -1,11 +1,12 @@ package until.the.eternity.iteminfo.interfaces.rest.dto.response; import io.swagger.v3.oas.annotations.media.Schema; -import java.util.List; -import java.util.stream.Collectors; import lombok.Builder; import until.the.eternity.iteminfo.domain.entity.ItemInfo; +import java.util.List; +import java.util.stream.Collectors; + @Builder @Schema(description = "아이템 정보 요약 응답 DTO") public record ItemInfoSummaryResponse( diff --git a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoSyncResponse.java b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoSyncResponse.java index e98fce37..02016f52 100644 --- a/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoSyncResponse.java +++ b/src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoSyncResponse.java @@ -1,9 +1,10 @@ package until.the.eternity.iteminfo.interfaces.rest.dto.response; import io.swagger.v3.oas.annotations.media.Schema; -import java.util.List; import lombok.Builder; +import java.util.List; + @Builder @Schema(description = "아이템 정보 동기화 응답 DTO") public record ItemInfoSyncResponse( diff --git a/src/main/java/until/the/eternity/itemoptioninfo/application/service/ItemOptionInfoService.java b/src/main/java/until/the/eternity/itemoptioninfo/application/service/ItemOptionInfoService.java index e4f5da74..8595e38c 100644 --- a/src/main/java/until/the/eternity/itemoptioninfo/application/service/ItemOptionInfoService.java +++ b/src/main/java/until/the/eternity/itemoptioninfo/application/service/ItemOptionInfoService.java @@ -1,6 +1,5 @@ package until.the.eternity.itemoptioninfo.application.service; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -8,6 +7,8 @@ import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfoId; import until.the.eternity.itemoptioninfo.domain.repository.ItemOptionInfoRepositoryPort; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) diff --git a/src/main/java/until/the/eternity/itemoptioninfo/domain/entity/ItemOptionInfoId.java b/src/main/java/until/the/eternity/itemoptioninfo/domain/entity/ItemOptionInfoId.java index 17634464..5bbcdaf9 100644 --- a/src/main/java/until/the/eternity/itemoptioninfo/domain/entity/ItemOptionInfoId.java +++ b/src/main/java/until/the/eternity/itemoptioninfo/domain/entity/ItemOptionInfoId.java @@ -2,12 +2,13 @@ import jakarta.persistence.Column; import jakarta.persistence.Embeddable; -import java.io.Serializable; -import java.util.Objects; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import java.io.Serializable; +import java.util.Objects; + @Embeddable @Getter @NoArgsConstructor diff --git a/src/main/java/until/the/eternity/itemoptioninfo/domain/repository/ItemOptionInfoRepositoryPort.java b/src/main/java/until/the/eternity/itemoptioninfo/domain/repository/ItemOptionInfoRepositoryPort.java index 904949d5..37076dd7 100644 --- a/src/main/java/until/the/eternity/itemoptioninfo/domain/repository/ItemOptionInfoRepositoryPort.java +++ b/src/main/java/until/the/eternity/itemoptioninfo/domain/repository/ItemOptionInfoRepositoryPort.java @@ -1,10 +1,11 @@ package until.the.eternity.itemoptioninfo.domain.repository; -import java.util.List; -import java.util.Optional; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfoId; +import java.util.List; +import java.util.Optional; + public interface ItemOptionInfoRepositoryPort { List findAll(); diff --git a/src/main/java/until/the/eternity/itemoptioninfo/infrastructure/persistence/ItemOptionInfoRepositoryPortImpl.java b/src/main/java/until/the/eternity/itemoptioninfo/infrastructure/persistence/ItemOptionInfoRepositoryPortImpl.java index f8f7f1cc..0d5c1247 100644 --- a/src/main/java/until/the/eternity/itemoptioninfo/infrastructure/persistence/ItemOptionInfoRepositoryPortImpl.java +++ b/src/main/java/until/the/eternity/itemoptioninfo/infrastructure/persistence/ItemOptionInfoRepositoryPortImpl.java @@ -1,13 +1,14 @@ package until.the.eternity.itemoptioninfo.infrastructure.persistence; -import java.util.List; -import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfoId; import until.the.eternity.itemoptioninfo.domain.repository.ItemOptionInfoRepositoryPort; +import java.util.List; +import java.util.Optional; + @Repository @RequiredArgsConstructor public class ItemOptionInfoRepositoryPortImpl implements ItemOptionInfoRepositoryPort { diff --git a/src/main/java/until/the/eternity/itemoptioninfo/interfaces/rest/controller/ItemOptionInfoController.java b/src/main/java/until/the/eternity/itemoptioninfo/interfaces/rest/controller/ItemOptionInfoController.java index e36b5213..f5351cc9 100644 --- a/src/main/java/until/the/eternity/itemoptioninfo/interfaces/rest/controller/ItemOptionInfoController.java +++ b/src/main/java/until/the/eternity/itemoptioninfo/interfaces/rest/controller/ItemOptionInfoController.java @@ -4,8 +4,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; @@ -17,6 +15,9 @@ import until.the.eternity.itemoptioninfo.interfaces.rest.dto.request.ItemOptionInfoRequest; import until.the.eternity.itemoptioninfo.interfaces.rest.dto.response.ItemOptionInfoResponse; +import java.util.List; +import java.util.stream.Collectors; + @RestController @RequestMapping("/api/v1/item-option-infos") @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoService.java b/src/main/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoService.java index e362091c..0c7c4ba0 100644 --- a/src/main/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoService.java +++ b/src/main/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoService.java @@ -1,6 +1,5 @@ package until.the.eternity.metalwareinfo.application.service; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -12,6 +11,8 @@ import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoSyncResponse; +import java.util.List; + @Service @Transactional(readOnly = true) @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoJpaRepository.java b/src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoJpaRepository.java index cabc630e..142b8c39 100644 --- a/src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoJpaRepository.java +++ b/src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoJpaRepository.java @@ -1,10 +1,11 @@ package until.the.eternity.metalwareinfo.infrastructure.persistence; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; +import java.util.List; + public interface MetalwareInfoJpaRepository extends JpaRepository { @Query("SELECT m.metalware FROM MetalwareInfoEntity m ORDER BY m.metalware ASC") diff --git a/src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoRepositoryPortImpl.java b/src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoRepositoryPortImpl.java index 9355cf37..60ccfde6 100644 --- a/src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoRepositoryPortImpl.java +++ b/src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoRepositoryPortImpl.java @@ -1,10 +1,11 @@ package until.the.eternity.metalwareinfo.infrastructure.persistence; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import until.the.eternity.metalwareinfo.domain.repository.MetalwareInfoRepositoryPort; +import java.util.List; + @Repository @RequiredArgsConstructor public class MetalwareInfoRepositoryPortImpl implements MetalwareInfoRepositoryPort { diff --git a/src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/controller/MetalwareInfoController.java b/src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/controller/MetalwareInfoController.java index 35ce6ddf..ecf86a6a 100644 --- a/src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/controller/MetalwareInfoController.java +++ b/src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/controller/MetalwareInfoController.java @@ -3,8 +3,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; -import java.time.Duration; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.CacheControl; import org.springframework.http.ResponseEntity; @@ -17,6 +15,9 @@ import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoSyncResponse; +import java.time.Duration; +import java.util.List; + @RestController @RequestMapping("/api/metalware-infos") @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/dto/response/MetalwareInfoResponse.java b/src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/dto/response/MetalwareInfoResponse.java index a3122710..4e8d9d1e 100644 --- a/src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/dto/response/MetalwareInfoResponse.java +++ b/src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/dto/response/MetalwareInfoResponse.java @@ -1,9 +1,10 @@ package until.the.eternity.metalwareinfo.interfaces.rest.dto.response; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; + import java.util.List; import java.util.stream.Collectors; -import lombok.Builder; @Builder @Schema(description = "세공 정보 응답 DTO") diff --git a/src/main/java/until/the/eternity/ranking/application/service/AllTimeRankingService.java b/src/main/java/until/the/eternity/ranking/application/service/AllTimeRankingService.java index 33025dd1..06bfc07e 100644 --- a/src/main/java/until/the/eternity/ranking/application/service/AllTimeRankingService.java +++ b/src/main/java/until/the/eternity/ranking/application/service/AllTimeRankingService.java @@ -1,6 +1,5 @@ package until.the.eternity.ranking.application.service; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -10,6 +9,8 @@ import until.the.eternity.ranking.interfaces.rest.dto.response.AllTimeRankingResponse; import until.the.eternity.ranking.repository.RankingRepository; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) diff --git a/src/main/java/until/the/eternity/ranking/application/service/CategoryRankingService.java b/src/main/java/until/the/eternity/ranking/application/service/CategoryRankingService.java index 29713513..b6a826a4 100644 --- a/src/main/java/until/the/eternity/ranking/application/service/CategoryRankingService.java +++ b/src/main/java/until/the/eternity/ranking/application/service/CategoryRankingService.java @@ -1,6 +1,5 @@ package until.the.eternity.ranking.application.service; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -11,6 +10,8 @@ import until.the.eternity.ranking.interfaces.rest.dto.response.VolumeRankingResponse; import until.the.eternity.ranking.repository.RankingRepository; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) diff --git a/src/main/java/until/the/eternity/ranking/application/service/PriceChangeRankingService.java b/src/main/java/until/the/eternity/ranking/application/service/PriceChangeRankingService.java index af18355b..bfd24ffb 100644 --- a/src/main/java/until/the/eternity/ranking/application/service/PriceChangeRankingService.java +++ b/src/main/java/until/the/eternity/ranking/application/service/PriceChangeRankingService.java @@ -1,6 +1,5 @@ package until.the.eternity.ranking.application.service; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -11,6 +10,8 @@ import until.the.eternity.ranking.interfaces.rest.dto.response.VolumeChangeRankingResponse; import until.the.eternity.ranking.repository.RankingRepository; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) diff --git a/src/main/java/until/the/eternity/ranking/application/service/PriceRankingService.java b/src/main/java/until/the/eternity/ranking/application/service/PriceRankingService.java index 3db9873a..b27ff48f 100644 --- a/src/main/java/until/the/eternity/ranking/application/service/PriceRankingService.java +++ b/src/main/java/until/the/eternity/ranking/application/service/PriceRankingService.java @@ -1,6 +1,5 @@ package until.the.eternity.ranking.application.service; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -10,6 +9,8 @@ import until.the.eternity.ranking.interfaces.rest.dto.response.PriceRankingResponse; import until.the.eternity.ranking.repository.RankingRepository; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) diff --git a/src/main/java/until/the/eternity/ranking/application/service/VolumeRankingService.java b/src/main/java/until/the/eternity/ranking/application/service/VolumeRankingService.java index 6ffd53e8..2da7e4cc 100644 --- a/src/main/java/until/the/eternity/ranking/application/service/VolumeRankingService.java +++ b/src/main/java/until/the/eternity/ranking/application/service/VolumeRankingService.java @@ -1,6 +1,5 @@ package until.the.eternity.ranking.application.service; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -10,6 +9,8 @@ import until.the.eternity.ranking.interfaces.rest.dto.response.VolumeRankingResponse; import until.the.eternity.ranking.repository.RankingRepository; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) diff --git a/src/main/java/until/the/eternity/ranking/domain/mapper/RankingMapper.java b/src/main/java/until/the/eternity/ranking/domain/mapper/RankingMapper.java index 973c42d8..008f1ea5 100644 --- a/src/main/java/until/the/eternity/ranking/domain/mapper/RankingMapper.java +++ b/src/main/java/until/the/eternity/ranking/domain/mapper/RankingMapper.java @@ -1,5 +1,8 @@ package until.the.eternity.ranking.domain.mapper; +import org.springframework.stereotype.Component; +import until.the.eternity.ranking.interfaces.rest.dto.response.*; + import java.math.BigDecimal; import java.sql.Date; import java.sql.Timestamp; @@ -7,8 +10,6 @@ import java.time.LocalDate; import java.util.List; import java.util.stream.IntStream; -import org.springframework.stereotype.Component; -import until.the.eternity.ranking.interfaces.rest.dto.response.*; @Component public class RankingMapper { diff --git a/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/AllTimeRankingController.java b/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/AllTimeRankingController.java index 606efa53..57110a5c 100644 --- a/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/AllTimeRankingController.java +++ b/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/AllTimeRankingController.java @@ -3,7 +3,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.ResponseEntity; @@ -16,6 +15,8 @@ import until.the.eternity.ranking.interfaces.rest.dto.request.RankingSearchRequest; import until.the.eternity.ranking.interfaces.rest.dto.response.AllTimeRankingResponse; +import java.util.List; + @RestController @RequestMapping("/rankings/all-time") @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/CategoryRankingController.java b/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/CategoryRankingController.java index c02d8c13..335b73a8 100644 --- a/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/CategoryRankingController.java +++ b/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/CategoryRankingController.java @@ -3,7 +3,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.ResponseEntity; @@ -17,6 +16,8 @@ import until.the.eternity.ranking.interfaces.rest.dto.response.PriceRankingResponse; import until.the.eternity.ranking.interfaces.rest.dto.response.VolumeRankingResponse; +import java.util.List; + @RestController @RequestMapping("/rankings/category") @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/PriceChangeRankingController.java b/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/PriceChangeRankingController.java index 3140cac0..0cf931ca 100644 --- a/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/PriceChangeRankingController.java +++ b/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/PriceChangeRankingController.java @@ -3,7 +3,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.ResponseEntity; @@ -17,6 +16,8 @@ import until.the.eternity.ranking.interfaces.rest.dto.response.PriceChangeRankingResponse; import until.the.eternity.ranking.interfaces.rest.dto.response.VolumeChangeRankingResponse; +import java.util.List; + @RestController @RequestMapping("/rankings/price-change") @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/PriceRankingController.java b/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/PriceRankingController.java index d27291e2..33b539a1 100644 --- a/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/PriceRankingController.java +++ b/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/PriceRankingController.java @@ -3,7 +3,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.ResponseEntity; @@ -16,6 +15,8 @@ import until.the.eternity.ranking.interfaces.rest.dto.request.RankingSearchRequest; import until.the.eternity.ranking.interfaces.rest.dto.response.PriceRankingResponse; +import java.util.List; + @RestController @RequestMapping("/rankings/price") @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/VolumeRankingController.java b/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/VolumeRankingController.java index 68d84170..77e77c52 100644 --- a/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/VolumeRankingController.java +++ b/src/main/java/until/the/eternity/ranking/interfaces/rest/controller/VolumeRankingController.java @@ -3,7 +3,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.ResponseEntity; @@ -16,6 +15,8 @@ import until.the.eternity.ranking.interfaces.rest.dto.request.RankingSearchRequest; import until.the.eternity.ranking.interfaces.rest.dto.response.VolumeRankingResponse; +import java.util.List; + @RestController @RequestMapping("/rankings/volume") @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/AllTimeRankingResponse.java b/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/AllTimeRankingResponse.java index 9d0f2ef4..5da8ec98 100644 --- a/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/AllTimeRankingResponse.java +++ b/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/AllTimeRankingResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; + import java.time.Instant; @Schema(description = "역대 기록 랭킹 응답") diff --git a/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/PriceChangeRankingResponse.java b/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/PriceChangeRankingResponse.java index 8ae2aea7..d1749dba 100644 --- a/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/PriceChangeRankingResponse.java +++ b/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/PriceChangeRankingResponse.java @@ -1,6 +1,7 @@ package until.the.eternity.ranking.interfaces.rest.dto.response; import io.swagger.v3.oas.annotations.media.Schema; + import java.math.BigDecimal; @Schema(description = "가격 변동 랭킹 응답") diff --git a/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/PriceRankingResponse.java b/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/PriceRankingResponse.java index c4789746..adef1c49 100644 --- a/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/PriceRankingResponse.java +++ b/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/PriceRankingResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; + import java.math.BigDecimal; import java.time.LocalDate; diff --git a/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/VolumeChangeRankingResponse.java b/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/VolumeChangeRankingResponse.java index bfde6388..181014a8 100644 --- a/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/VolumeChangeRankingResponse.java +++ b/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/VolumeChangeRankingResponse.java @@ -1,6 +1,7 @@ package until.the.eternity.ranking.interfaces.rest.dto.response; import io.swagger.v3.oas.annotations.media.Schema; + import java.math.BigDecimal; @Schema(description = "거래량 변동 랭킹 응답") diff --git a/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/VolumeRankingResponse.java b/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/VolumeRankingResponse.java index 853e3550..df5087bc 100644 --- a/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/VolumeRankingResponse.java +++ b/src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/VolumeRankingResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; + import java.math.BigDecimal; import java.time.LocalDate; diff --git a/src/main/java/until/the/eternity/ranking/repository/RankingRepository.java b/src/main/java/until/the/eternity/ranking/repository/RankingRepository.java index 5e3570dc..53aec222 100644 --- a/src/main/java/until/the/eternity/ranking/repository/RankingRepository.java +++ b/src/main/java/until/the/eternity/ranking/repository/RankingRepository.java @@ -1,11 +1,12 @@ package until.the.eternity.ranking.repository; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import until.the.eternity.statistics.domain.entity.daily.ItemDailyStatistics; +import java.util.List; + public interface RankingRepository extends JpaRepository { // ===== 가격 랭킹 (Price Ranking) ===== diff --git a/src/main/java/until/the/eternity/statistics/application/service/ItemDailyStatisticsService.java b/src/main/java/until/the/eternity/statistics/application/service/ItemDailyStatisticsService.java index 2ff8f786..7e913709 100644 --- a/src/main/java/until/the/eternity/statistics/application/service/ItemDailyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/application/service/ItemDailyStatisticsService.java @@ -1,7 +1,5 @@ package until.the.eternity.statistics.application.service; -import java.time.LocalDate; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; @@ -11,6 +9,9 @@ import until.the.eternity.statistics.interfaces.rest.dto.response.ItemDailyStatisticsResponse; import until.the.eternity.statistics.repository.daily.ItemDailyStatisticsRepository; +import java.time.LocalDate; +import java.util.List; + @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/statistics/application/service/ItemWeeklyStatisticsService.java b/src/main/java/until/the/eternity/statistics/application/service/ItemWeeklyStatisticsService.java index e38e8889..4644f32e 100644 --- a/src/main/java/until/the/eternity/statistics/application/service/ItemWeeklyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/application/service/ItemWeeklyStatisticsService.java @@ -1,7 +1,5 @@ package until.the.eternity.statistics.application.service; -import java.time.LocalDate; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; @@ -11,6 +9,9 @@ import until.the.eternity.statistics.interfaces.rest.dto.response.ItemWeeklyStatisticsResponse; import until.the.eternity.statistics.repository.weekly.ItemWeeklyStatisticsRepository; +import java.time.LocalDate; +import java.util.List; + @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/statistics/application/service/SubcategoryDailyStatisticsService.java b/src/main/java/until/the/eternity/statistics/application/service/SubcategoryDailyStatisticsService.java index d4a411b1..a330a490 100644 --- a/src/main/java/until/the/eternity/statistics/application/service/SubcategoryDailyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/application/service/SubcategoryDailyStatisticsService.java @@ -1,8 +1,5 @@ package until.the.eternity.statistics.application.service; -import java.time.LocalDate; -import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; @@ -14,6 +11,10 @@ import until.the.eternity.statistics.interfaces.rest.dto.response.SubcategoryDailyStatisticsResponse; import until.the.eternity.statistics.repository.daily.SubcategoryDailyStatisticsRepository; +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; + @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/statistics/application/service/SubcategoryWeeklyStatisticsService.java b/src/main/java/until/the/eternity/statistics/application/service/SubcategoryWeeklyStatisticsService.java index 4c867f39..f358c28e 100644 --- a/src/main/java/until/the/eternity/statistics/application/service/SubcategoryWeeklyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/application/service/SubcategoryWeeklyStatisticsService.java @@ -1,8 +1,5 @@ package until.the.eternity.statistics.application.service; -import java.time.LocalDate; -import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; @@ -14,6 +11,10 @@ import until.the.eternity.statistics.interfaces.rest.dto.response.SubcategoryWeeklyStatisticsResponse; import until.the.eternity.statistics.repository.weekly.SubcategoryWeeklyStatisticsRepository; +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; + @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/statistics/application/service/TopCategoryDailyStatisticsService.java b/src/main/java/until/the/eternity/statistics/application/service/TopCategoryDailyStatisticsService.java index bf3d308d..543bd9df 100644 --- a/src/main/java/until/the/eternity/statistics/application/service/TopCategoryDailyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/application/service/TopCategoryDailyStatisticsService.java @@ -1,7 +1,5 @@ package until.the.eternity.statistics.application.service; -import java.time.LocalDate; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; @@ -11,6 +9,9 @@ import until.the.eternity.statistics.interfaces.rest.dto.response.TopCategoryDailyStatisticsResponse; import until.the.eternity.statistics.repository.daily.TopCategoryDailyStatisticsRepository; +import java.time.LocalDate; +import java.util.List; + @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/statistics/application/service/TopCategoryWeeklyStatisticsService.java b/src/main/java/until/the/eternity/statistics/application/service/TopCategoryWeeklyStatisticsService.java index 660e1491..06f8db16 100644 --- a/src/main/java/until/the/eternity/statistics/application/service/TopCategoryWeeklyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/application/service/TopCategoryWeeklyStatisticsService.java @@ -1,8 +1,5 @@ package until.the.eternity.statistics.application.service; -import java.time.LocalDate; -import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; @@ -14,6 +11,10 @@ import until.the.eternity.statistics.interfaces.rest.dto.response.TopCategoryWeeklyStatisticsResponse; import until.the.eternity.statistics.repository.weekly.TopCategoryWeeklyStatisticsRepository; +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; + @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java index 4e8ae674..4e9f68d0 100644 --- a/src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java +++ b/src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java @@ -2,10 +2,11 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.*; +import lombok.*; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import lombok.*; @Entity @Table( diff --git a/src/main/java/until/the/eternity/statistics/domain/entity/daily/SubcategoryDailyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/daily/SubcategoryDailyStatistics.java index 66e5382d..887807d9 100644 --- a/src/main/java/until/the/eternity/statistics/domain/entity/daily/SubcategoryDailyStatistics.java +++ b/src/main/java/until/the/eternity/statistics/domain/entity/daily/SubcategoryDailyStatistics.java @@ -2,10 +2,11 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.*; +import lombok.*; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import lombok.*; @Entity @Table( diff --git a/src/main/java/until/the/eternity/statistics/domain/entity/daily/TopCategoryDailyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/daily/TopCategoryDailyStatistics.java index fb3ab7a8..bfcb536b 100644 --- a/src/main/java/until/the/eternity/statistics/domain/entity/daily/TopCategoryDailyStatistics.java +++ b/src/main/java/until/the/eternity/statistics/domain/entity/daily/TopCategoryDailyStatistics.java @@ -2,10 +2,11 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.*; +import lombok.*; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import lombok.*; @Entity @Table( diff --git a/src/main/java/until/the/eternity/statistics/domain/entity/weekly/ItemWeeklyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/weekly/ItemWeeklyStatistics.java index e8a595d1..87009479 100644 --- a/src/main/java/until/the/eternity/statistics/domain/entity/weekly/ItemWeeklyStatistics.java +++ b/src/main/java/until/the/eternity/statistics/domain/entity/weekly/ItemWeeklyStatistics.java @@ -2,10 +2,11 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.*; +import lombok.*; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import lombok.*; @Entity @Table( diff --git a/src/main/java/until/the/eternity/statistics/domain/entity/weekly/SubcategoryWeeklyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/weekly/SubcategoryWeeklyStatistics.java index 5756b091..a05c528e 100644 --- a/src/main/java/until/the/eternity/statistics/domain/entity/weekly/SubcategoryWeeklyStatistics.java +++ b/src/main/java/until/the/eternity/statistics/domain/entity/weekly/SubcategoryWeeklyStatistics.java @@ -2,10 +2,11 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.*; +import lombok.*; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import lombok.*; @Entity @Table( diff --git a/src/main/java/until/the/eternity/statistics/domain/entity/weekly/TopCategoryWeeklyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/weekly/TopCategoryWeeklyStatistics.java index ea698670..c7198311 100644 --- a/src/main/java/until/the/eternity/statistics/domain/entity/weekly/TopCategoryWeeklyStatistics.java +++ b/src/main/java/until/the/eternity/statistics/domain/entity/weekly/TopCategoryWeeklyStatistics.java @@ -2,10 +2,11 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.*; +import lombok.*; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import lombok.*; @Entity @Table( diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/DailyStatisticsSearchRequest.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/DailyStatisticsSearchRequest.java index 7908da49..59954a6b 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/DailyStatisticsSearchRequest.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/DailyStatisticsSearchRequest.java @@ -1,9 +1,10 @@ package until.the.eternity.statistics.interfaces.rest.dto.request; import io.swagger.v3.oas.annotations.media.Schema; -import java.time.LocalDate; import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDate; + @Schema(description = "일간 통계 검색 요청") public record DailyStatisticsSearchRequest( @Schema(description = "아이템 이름 (부분 일치)", example = "켈틱") String itemName, diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/ItemDailyStatisticsSearchRequest.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/ItemDailyStatisticsSearchRequest.java index f6f91521..46b2cf78 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/ItemDailyStatisticsSearchRequest.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/ItemDailyStatisticsSearchRequest.java @@ -2,9 +2,10 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import java.time.LocalDate; import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDate; + @Schema(description = "아이템별 일간 통계 검색 요청") public record ItemDailyStatisticsSearchRequest( @NotBlank(message = "아이템 이름은 필수입니다") diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/ItemWeeklyStatisticsSearchRequest.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/ItemWeeklyStatisticsSearchRequest.java index 1360de10..d132153d 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/ItemWeeklyStatisticsSearchRequest.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/ItemWeeklyStatisticsSearchRequest.java @@ -2,9 +2,10 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import java.time.LocalDate; import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDate; + @Schema(description = "아이템별 주간 통계 검색 요청") public record ItemWeeklyStatisticsSearchRequest( @NotBlank(message = "아이템 이름은 필수입니다") diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/SubcategoryDailyStatisticsSearchRequest.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/SubcategoryDailyStatisticsSearchRequest.java index 47c2c966..4ff95e0d 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/SubcategoryDailyStatisticsSearchRequest.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/SubcategoryDailyStatisticsSearchRequest.java @@ -2,9 +2,10 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import java.time.LocalDate; import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDate; + @Schema(description = "서브카테고리별 일간 통계 검색 요청") public record SubcategoryDailyStatisticsSearchRequest( @NotBlank(message = "탑 카테고리는 필수입니다") diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/SubcategoryWeeklyStatisticsSearchRequest.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/SubcategoryWeeklyStatisticsSearchRequest.java index 9d7bc716..e0247871 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/SubcategoryWeeklyStatisticsSearchRequest.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/SubcategoryWeeklyStatisticsSearchRequest.java @@ -2,9 +2,10 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import java.time.LocalDate; import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDate; + @Schema(description = "서브카테고리별 주간 통계 검색 요청") public record SubcategoryWeeklyStatisticsSearchRequest( @NotBlank(message = "탑 카테고리는 필수입니다") diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/TopCategoryDailyStatisticsSearchRequest.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/TopCategoryDailyStatisticsSearchRequest.java index 4b8e25d7..382bfefb 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/TopCategoryDailyStatisticsSearchRequest.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/TopCategoryDailyStatisticsSearchRequest.java @@ -2,9 +2,10 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import java.time.LocalDate; import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDate; + @Schema(description = "탑카테고리별 일간 통계 검색 요청") public record TopCategoryDailyStatisticsSearchRequest( @NotBlank(message = "탑 카테고리는 필수입니다") diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/TopCategoryWeeklyStatisticsSearchRequest.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/TopCategoryWeeklyStatisticsSearchRequest.java index ad1c6b41..2986275f 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/TopCategoryWeeklyStatisticsSearchRequest.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/TopCategoryWeeklyStatisticsSearchRequest.java @@ -2,9 +2,10 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import java.time.LocalDate; import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDate; + @Schema(description = "탑카테고리별 주간 통계 검색 요청") public record TopCategoryWeeklyStatisticsSearchRequest( @NotBlank(message = "탑 카테고리는 필수입니다") diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/ItemDailyStatisticsResponse.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/ItemDailyStatisticsResponse.java index a9611010..e2485f4d 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/ItemDailyStatisticsResponse.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/ItemDailyStatisticsResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/ItemWeeklyStatisticsResponse.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/ItemWeeklyStatisticsResponse.java index 05e86f70..7d499d85 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/ItemWeeklyStatisticsResponse.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/ItemWeeklyStatisticsResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/SubcategoryDailyStatisticsResponse.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/SubcategoryDailyStatisticsResponse.java index e27f7f3a..b167b92c 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/SubcategoryDailyStatisticsResponse.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/SubcategoryDailyStatisticsResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/SubcategoryWeeklyStatisticsResponse.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/SubcategoryWeeklyStatisticsResponse.java index bb826866..5f67f69e 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/SubcategoryWeeklyStatisticsResponse.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/SubcategoryWeeklyStatisticsResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/TopCategoryDailyStatisticsResponse.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/TopCategoryDailyStatisticsResponse.java index fd49c2f2..df6c9f8e 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/TopCategoryDailyStatisticsResponse.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/TopCategoryDailyStatisticsResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/TopCategoryWeeklyStatisticsResponse.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/TopCategoryWeeklyStatisticsResponse.java index ad81f768..01782f02 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/TopCategoryWeeklyStatisticsResponse.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/TopCategoryWeeklyStatisticsResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; diff --git a/src/main/java/until/the/eternity/statistics/repository/daily/ItemDailyStatisticsRepository.java b/src/main/java/until/the/eternity/statistics/repository/daily/ItemDailyStatisticsRepository.java index f1fa1fd5..e5faf1a0 100644 --- a/src/main/java/until/the/eternity/statistics/repository/daily/ItemDailyStatisticsRepository.java +++ b/src/main/java/until/the/eternity/statistics/repository/daily/ItemDailyStatisticsRepository.java @@ -1,7 +1,5 @@ package until.the.eternity.statistics.repository.daily; -import java.time.LocalDate; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -10,6 +8,9 @@ import until.the.eternity.statistics.domain.entity.daily.ItemDailyStatistics; import until.the.eternity.statistics.interfaces.rest.dto.response.ItemDailyStatisticsResponse; +import java.time.LocalDate; +import java.util.List; + public interface ItemDailyStatisticsRepository extends JpaRepository { /** diff --git a/src/main/java/until/the/eternity/statistics/repository/daily/SubcategoryDailyStatisticsRepository.java b/src/main/java/until/the/eternity/statistics/repository/daily/SubcategoryDailyStatisticsRepository.java index 3bed0b1a..e8f72fc4 100644 --- a/src/main/java/until/the/eternity/statistics/repository/daily/SubcategoryDailyStatisticsRepository.java +++ b/src/main/java/until/the/eternity/statistics/repository/daily/SubcategoryDailyStatisticsRepository.java @@ -1,7 +1,5 @@ package until.the.eternity.statistics.repository.daily; -import java.time.LocalDate; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -9,6 +7,9 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.daily.SubcategoryDailyStatistics; +import java.time.LocalDate; +import java.util.List; + public interface SubcategoryDailyStatisticsRepository extends JpaRepository { diff --git a/src/main/java/until/the/eternity/statistics/repository/daily/TopCategoryDailyStatisticsRepository.java b/src/main/java/until/the/eternity/statistics/repository/daily/TopCategoryDailyStatisticsRepository.java index 095ce094..f91992fd 100644 --- a/src/main/java/until/the/eternity/statistics/repository/daily/TopCategoryDailyStatisticsRepository.java +++ b/src/main/java/until/the/eternity/statistics/repository/daily/TopCategoryDailyStatisticsRepository.java @@ -1,7 +1,5 @@ package until.the.eternity.statistics.repository.daily; -import java.time.LocalDate; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -10,6 +8,9 @@ import until.the.eternity.statistics.domain.entity.daily.TopCategoryDailyStatistics; import until.the.eternity.statistics.interfaces.rest.dto.response.TopCategoryDailyStatisticsResponse; +import java.time.LocalDate; +import java.util.List; + public interface TopCategoryDailyStatisticsRepository extends JpaRepository { diff --git a/src/main/java/until/the/eternity/statistics/repository/weekly/ItemWeeklyStatisticsRepository.java b/src/main/java/until/the/eternity/statistics/repository/weekly/ItemWeeklyStatisticsRepository.java index 0f212872..e2462abc 100644 --- a/src/main/java/until/the/eternity/statistics/repository/weekly/ItemWeeklyStatisticsRepository.java +++ b/src/main/java/until/the/eternity/statistics/repository/weekly/ItemWeeklyStatisticsRepository.java @@ -1,6 +1,5 @@ package until.the.eternity.statistics.repository.weekly; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -9,6 +8,8 @@ import until.the.eternity.statistics.domain.entity.weekly.ItemWeeklyStatistics; import until.the.eternity.statistics.interfaces.rest.dto.response.ItemWeeklyStatisticsResponse; +import java.util.List; + public interface ItemWeeklyStatisticsRepository extends JpaRepository { /** diff --git a/src/main/java/until/the/eternity/statistics/repository/weekly/SubcategoryWeeklyStatisticsRepository.java b/src/main/java/until/the/eternity/statistics/repository/weekly/SubcategoryWeeklyStatisticsRepository.java index fb0986af..ea3542c1 100644 --- a/src/main/java/until/the/eternity/statistics/repository/weekly/SubcategoryWeeklyStatisticsRepository.java +++ b/src/main/java/until/the/eternity/statistics/repository/weekly/SubcategoryWeeklyStatisticsRepository.java @@ -1,6 +1,5 @@ package until.the.eternity.statistics.repository.weekly; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -8,6 +7,8 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.weekly.SubcategoryWeeklyStatistics; +import java.util.List; + public interface SubcategoryWeeklyStatisticsRepository extends JpaRepository { diff --git a/src/main/java/until/the/eternity/statistics/repository/weekly/TopCategoryWeeklyStatisticsRepository.java b/src/main/java/until/the/eternity/statistics/repository/weekly/TopCategoryWeeklyStatisticsRepository.java index 8362e1ce..f05eafff 100644 --- a/src/main/java/until/the/eternity/statistics/repository/weekly/TopCategoryWeeklyStatisticsRepository.java +++ b/src/main/java/until/the/eternity/statistics/repository/weekly/TopCategoryWeeklyStatisticsRepository.java @@ -1,6 +1,5 @@ package until.the.eternity.statistics.repository.weekly; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -8,6 +7,8 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.weekly.TopCategoryWeeklyStatistics; +import java.util.List; + public interface TopCategoryWeeklyStatisticsRepository extends JpaRepository { diff --git a/src/main/java/until/the/eternity/statistics/service/DailyStatisticsService.java b/src/main/java/until/the/eternity/statistics/service/DailyStatisticsService.java index 489d8949..42e4201d 100644 --- a/src/main/java/until/the/eternity/statistics/service/DailyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/service/DailyStatisticsService.java @@ -1,7 +1,5 @@ package until.the.eternity.statistics.service; -import java.time.LocalDate; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; @@ -21,6 +19,9 @@ import until.the.eternity.statistics.repository.daily.SubcategoryDailyStatisticsRepository; import until.the.eternity.statistics.repository.daily.TopCategoryDailyStatisticsRepository; +import java.time.LocalDate; +import java.util.List; + @Slf4j @Service @RequiredArgsConstructor