From b28f99cd095fbf0ce0423d110a90ebe884ac1b00 Mon Sep 17 00:00:00 2001 From: dev-ant Date: Thu, 14 May 2026 08:03:18 +0900 Subject: [PATCH 1/3] =?UTF-8?q?perf:=20p99=20latency=EA=B0=80=20=EB=86=92?= =?UTF-8?q?=EC=9D=80=20=EC=A1=B0=ED=9A=8C=20API=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduler/AuctionHistoryScheduler.java | 5 +- .../service/AuctionHistoryService.java | 3 +- .../fetcher/AuctionHistoryFetcher.java | 7 +- .../persister/AuctionHistoryPersister.java | 3 +- .../domain/entity/AuctionHistory.java | 13 ++-- .../event/AuctionHistorySavedEvent.java | 3 +- .../domain/mapper/AuctionHistoryMapper.java | 3 +- .../mapper/OpenApiAuctionHistoryMapper.java | 5 +- .../AuctionHistoryRepositoryPort.java | 9 ++- .../AuctionHistoryDuplicateChecker.java | 9 ++- .../fetcher/AuctionHistoryFetcherPort.java | 3 +- .../AuctionHistoryPersisterPort.java | 3 +- .../AuctionHistoryJpaRepository.java | 7 +- .../AuctionHistoryQueryDslRepository.java | 11 ++- .../AuctionHistoryRepositoryPortImpl.java | 9 ++- .../OpenApiAuctionHistoryListResponse.java | 1 - .../dto/OpenApiAuctionHistoryResponse.java | 3 +- .../rest/dto/enums/SearchStandard.java | 1 - .../rest/dto/enums/SortDirection.java | 1 - .../request/AuctionHistorySearchRequest.java | 1 - .../AuctionHistoryDetailResponse.java | 1 - .../domain/entity/AuctionRealtimeItem.java | 3 +- .../entity/AuctionRealtimeItemOption.java | 3 +- .../entity/AuctionHistoryItemOption.java | 3 +- .../scheduler/AuctionRealtimeScheduler.java | 7 +- .../service/AuctionRealtimeService.java | 5 +- .../fetcher/AuctionRealtimeFetcher.java | 5 +- .../persister/AuctionRealtimePersister.java | 3 +- .../domain/mapper/AuctionRealtimeMapper.java | 3 +- .../mapper/OpenApiAuctionRealtimeMapper.java | 7 +- .../AuctionRealtimeItemRepositoryPort.java | 7 +- .../fetcher/AuctionRealtimeFetcherPort.java | 3 +- .../AuctionRealtimePersisterPort.java | 3 +- .../AuctionRealtimeItemRepository.java | 3 +- ...AuctionRealtimeItemRepositoryPortImpl.java | 7 +- .../AuctionRealtimeQueryDslRepository.java | 11 ++- .../OpenApiAuctionRealtimeListResponse.java | 1 - .../dto/OpenApiAuctionRealtimeResponse.java | 3 +- .../request/AuctionRealtimeSearchRequest.java | 3 +- .../rest/dto/request/RealtimeSortField.java | 1 - .../AuctionRealtimeDetailResponse.java | 1 - .../service/AuctionSearchOptionService.java | 5 +- .../entity/AuctionSearchOptionMetadata.java | 3 +- .../AuctionSearchOptionRepositoryPort.java | 3 +- .../AuctionSearchOptionJpaRepository.java | 3 +- ...AuctionSearchOptionRepositoryPortImpl.java | 3 +- .../rest/AuctionSearchOptionController.java | 5 +- .../rest/dto/response/FieldMetadata.java | 1 - .../SearchOptionMetadataResponse.java | 1 - .../service/BatchExecutionLogService.java | 5 +- .../domain/entity/BatchExecutionLog.java | 3 +- .../BatchExecutionLogRepositoryPort.java | 3 +- .../BatchExecutionLogJpaRepository.java | 3 +- .../BatchExecutionLogRepositoryPortImpl.java | 7 +- .../BatchExecutionLogController.java | 3 +- .../response/BatchExecutionLogResponse.java | 3 +- .../eternity/common/annotation/BatchLog.java | 3 +- .../annotation/MetalwareParameters.java | 1 - .../aspect/BatchExecutionLoggingAspect.java | 3 +- .../eternity/common/enums/ItemCategory.java | 5 +- .../eternity/common/enums/SortDirection.java | 3 +- .../the/eternity/common/enums/SortField.java | 1 - .../the/eternity/common/enums/UserRole.java | 5 +- .../common/exception/GlobalExceptionCode.java | 4 +- .../exception/GlobalExceptionHandler.java | 4 +- .../common/filter/GatewayAuthFilter.java | 7 +- .../eternity/common/response/ApiResponse.java | 3 +- .../eternity/common/response/PageMeta.java | 18 +++++ .../common/response/PageResponseDto.java | 6 +- .../eternity/common/util/CacheKeyBuilder.java | 3 +- .../common/util/SegongOptionParser.java | 3 +- .../config/CacheStartupWarmupRunner.java | 9 ++- .../config/RedisCacheErrorHandler.java | 3 +- .../the/eternity/config/RedisConfig.java | 16 +++-- .../config/openapi/OpenApiFilters.java | 3 +- .../config/openapi/OpenApiRetryPolicy.java | 3 +- .../openapi/OpenApiWebClientProperties.java | 3 +- .../service/EnchantInfoService.java | 5 +- .../exception/EnchantInfoExceptionCode.java | 4 +- .../repository/EnchantInfoRepositoryPort.java | 3 +- .../persistence/EnchantInfoJpaRepository.java | 3 +- .../EnchantInfoRepositoryPortImpl.java | 3 +- .../controller/EnchantInfoController.java | 3 +- .../runner/HornBugleIndexRunner.java | 3 +- .../scheduler/HornBugleScheduler.java | 29 ++++++-- .../application/service/HornBugleService.java | 18 ++--- .../domain/entity/HornBugleWorldHistory.java | 9 ++- .../domain/enums/HornBugleServer.java | 5 +- .../domain/mapper/HornBugleMapper.java | 3 +- .../repository/HornBugleRepositoryPort.java | 12 ++-- .../service/HornBugleDuplicateChecker.java | 11 ++- .../elasticsearch/HornBugleDocument.java | 3 +- .../elasticsearch/HornBugleIndexService.java | 3 +- .../persistence/HornBugleJpaRepository.java | 26 ++++--- .../HornBugleRepositoryPortImpl.java | 21 ++++-- .../OpenApiHornBugleHistoryListResponse.java | 1 - .../dto/OpenApiHornBugleHistoryResponse.java | 1 - .../response/HornBugleHistoryResponse.java | 1 - .../HornBugleKafkaProducerService.java | 3 +- .../application/service/ItemInfoService.java | 9 ++- .../iteminfo/domain/entity/ItemInfoId.java | 3 +- .../exception/ItemInfoExceptionCode.java | 4 +- .../repository/ItemInfoRepositoryPort.java | 3 +- .../persistence/ItemInfoJpaRepository.java | 3 +- .../ItemInfoQueryDslRepository.java | 3 +- .../ItemInfoRepositoryPortImpl.java | 3 +- .../rest/controller/ItemInfoController.java | 5 +- .../dto/response/ItemCategoryResponse.java | 5 +- .../rest/dto/response/ItemInfoResponse.java | 5 +- .../dto/response/ItemInfoSummaryResponse.java | 5 +- .../dto/response/ItemInfoSyncResponse.java | 3 +- .../service/ItemOptionInfoService.java | 3 +- .../domain/entity/ItemOptionInfoId.java | 5 +- .../ItemOptionInfoRepositoryPort.java | 5 +- .../ItemOptionInfoRepositoryPortImpl.java | 5 +- .../controller/ItemOptionInfoController.java | 5 +- .../service/MetalwareInfoService.java | 3 +- .../MetalwareInfoJpaRepository.java | 3 +- .../MetalwareInfoRepositoryPortImpl.java | 3 +- .../controller/MetalwareInfoController.java | 5 +- .../dto/response/MetalwareInfoResponse.java | 3 +- .../service/AllTimeRankingService.java | 3 +- .../service/CategoryRankingService.java | 3 +- .../service/PriceChangeRankingService.java | 3 +- .../service/PriceRankingService.java | 3 +- .../service/VolumeRankingService.java | 3 +- .../ranking/domain/mapper/RankingMapper.java | 5 +- .../controller/AllTimeRankingController.java | 3 +- .../controller/CategoryRankingController.java | 3 +- .../PriceChangeRankingController.java | 3 +- .../controller/PriceRankingController.java | 3 +- .../controller/VolumeRankingController.java | 3 +- .../dto/response/AllTimeRankingResponse.java | 1 - .../response/PriceChangeRankingResponse.java | 1 - .../dto/response/PriceRankingResponse.java | 1 - .../response/VolumeChangeRankingResponse.java | 1 - .../dto/response/VolumeRankingResponse.java | 1 - .../ranking/repository/RankingRepository.java | 3 +- .../service/ItemDailyStatisticsService.java | 5 +- .../service/ItemWeeklyStatisticsService.java | 5 +- .../SubcategoryDailyStatisticsService.java | 7 +- .../SubcategoryWeeklyStatisticsService.java | 7 +- .../TopCategoryDailyStatisticsService.java | 5 +- .../TopCategoryWeeklyStatisticsService.java | 7 +- .../entity/daily/ItemDailyStatistics.java | 3 +- .../daily/SubcategoryDailyStatistics.java | 3 +- .../daily/TopCategoryDailyStatistics.java | 3 +- .../entity/weekly/ItemWeeklyStatistics.java | 3 +- .../weekly/SubcategoryWeeklyStatistics.java | 3 +- .../weekly/TopCategoryWeeklyStatistics.java | 3 +- .../request/DailyStatisticsSearchRequest.java | 3 +- .../ItemDailyStatisticsSearchRequest.java | 3 +- .../ItemWeeklyStatisticsSearchRequest.java | 3 +- ...bcategoryDailyStatisticsSearchRequest.java | 3 +- ...categoryWeeklyStatisticsSearchRequest.java | 3 +- ...pCategoryDailyStatisticsSearchRequest.java | 3 +- ...CategoryWeeklyStatisticsSearchRequest.java | 3 +- .../response/ItemDailyStatisticsResponse.java | 1 - .../ItemWeeklyStatisticsResponse.java | 1 - .../SubcategoryDailyStatisticsResponse.java | 1 - .../SubcategoryWeeklyStatisticsResponse.java | 1 - .../TopCategoryDailyStatisticsResponse.java | 1 - .../TopCategoryWeeklyStatisticsResponse.java | 1 - .../daily/ItemDailyStatisticsRepository.java | 5 +- .../SubcategoryDailyStatisticsRepository.java | 5 +- .../TopCategoryDailyStatisticsRepository.java | 5 +- .../ItemWeeklyStatisticsRepository.java | 3 +- ...SubcategoryWeeklyStatisticsRepository.java | 3 +- ...TopCategoryWeeklyStatisticsRepository.java | 3 +- .../service/DailyStatisticsService.java | 5 +- .../service/WeeklyStatisticsService.java | 70 +++++++++++++++++++ .../V31__add_batch_read_p99_tail_indexes.sql | 51 ++++++++++++++ 172 files changed, 457 insertions(+), 418 deletions(-) create mode 100644 src/main/resources/db/migration/V31__add_batch_read_p99_tail_indexes.sql 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 64930e73..b4c857c0 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,5 +1,7 @@ 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; @@ -17,9 +19,6 @@ 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 13dd0572..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 @@ -1,6 +1,7 @@ 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; @@ -22,8 +23,6 @@ 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 3aa40844..4c0e05ad 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,5 +1,8 @@ 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; @@ -9,10 +12,6 @@ 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 ee426dd5..8112b804 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,5 +1,6 @@ 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; @@ -10,8 +11,6 @@ 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 6f4cd7d8..0bddde7a 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,14 +1,19 @@ package until.the.eternity.auctionhistory.domain.entity; import jakarta.persistence.*; -import lombok.*; -import until.the.eternity.auctionitemoption.domain.entity.AuctionHistoryItemOption; - import java.time.Instant; import java.util.List; +import lombok.*; +import until.the.eternity.auctionitemoption.domain.entity.AuctionHistoryItemOption; @Entity -@Table(name = "auction_history") +@Table( + name = "auction_history", + indexes = { + @Index( + name = "idx_auction_history_price_buy_id", + columnList = "auction_price_per_unit DESC, auction_buy_id DESC") + }) @Getter @Setter @NoArgsConstructor 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 fe8f771f..213706e6 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,7 @@ package until.the.eternity.auctionhistory.domain.event; -import lombok.Getter; - import java.time.LocalDateTime; +import lombok.Getter; /** 경매장 거래 내역 저장 완료 이벤트 AuctionHistoryScheduler가 거래 내역을 성공적으로 저장한 후 발행됩니다. */ @Getter 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 083ea00f..93a6fcaa 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,5 +1,6 @@ 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; @@ -7,8 +8,6 @@ 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 0b2b3bf9..51f3748e 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,13 +1,12 @@ 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 530a487a..c0ac03ae 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,13 @@ package until.the.eternity.auctionhistory.domain.repository; -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; +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; /** 경매장 거래 내역 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 dd43726c..bb844332 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,5 +1,9 @@ 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; @@ -8,11 +12,6 @@ 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 cf00412a..5b649be4 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,10 +1,9 @@ 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 44f59205..636f4c2d 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,11 +1,10 @@ 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 bdb982ab..4215b1f2 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,5 +1,8 @@ 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; @@ -7,10 +10,6 @@ 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 d8f70638..f59fe8f9 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,6 +8,11 @@ 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; @@ -18,12 +23,6 @@ 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 c1638cf2..b0d61b18 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,6 +1,10 @@ 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; @@ -11,11 +15,6 @@ 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 c49a6b2b..e194aeb7 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,7 +1,6 @@ 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 65b73ca5..f41eb460 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,10 +2,9 @@ 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 feb2c35e..ef005676 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,7 +3,6 @@ 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 e6aacf98..82666061 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,7 +3,6 @@ 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 2cf8d232..0bccd0b4 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,7 +1,6 @@ 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 d694c60c..082c562f 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,7 +1,6 @@ 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 d93c2eab..ff498a80 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,10 +1,9 @@ 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 28ba2905..b0a651bf 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,13 +1,12 @@ 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 332605de..dddac912 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,14 +1,13 @@ 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 6db06623..0f310351 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,5 +1,8 @@ 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; @@ -13,10 +16,6 @@ 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 9df0a986..07b1b2a5 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,5 +1,7 @@ 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; @@ -18,9 +20,6 @@ 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 132e9d16..b2da4f82 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,5 +1,7 @@ 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; @@ -9,9 +11,6 @@ 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 81a73e29..10e0a9fc 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,5 +1,6 @@ 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; @@ -9,8 +10,6 @@ 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 f292d803..e373ae9c 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,5 +1,6 @@ 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; @@ -7,8 +8,6 @@ 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 8f65de6b..1409ba29 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,14 +1,13 @@ 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 373499f7..1ff1e35a 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,15 +1,14 @@ 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 161e47ea..31220874 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,10 +1,9 @@ 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 f5b6201e..41357a28 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,11 +1,10 @@ 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 be29cbf2..53cbdbf4 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,13 +1,12 @@ 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 b1b7c333..6da0da26 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,6 +1,9 @@ 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; @@ -11,10 +14,6 @@ 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 5b34c20a..50e9d8fd 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,6 +8,11 @@ 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; @@ -24,12 +29,6 @@ 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 114de80e..980fc9e3 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,7 +1,6 @@ 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 2b337bfe..28d59235 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,10 +2,9 @@ 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 30db58ba..05091fa2 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,13 +1,12 @@ 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 567b5d71..223f038a 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,7 +3,6 @@ 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 a3d5a9e0..ba184764 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,7 +1,6 @@ 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 5fa7233c..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 @@ -2,6 +2,8 @@ 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; @@ -13,9 +15,6 @@ 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 eac22495..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 @@ -1,14 +1,13 @@ 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 fe4e89b0..971be29e 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,7 @@ package until.the.eternity.auctionsearchoption.domain.repository; -import until.the.eternity.auctionsearchoption.domain.entity.AuctionSearchOptionMetadata; - import java.util.List; +import until.the.eternity.auctionsearchoption.domain.entity.AuctionSearchOptionMetadata; 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 c18fd9e5..e7074578 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,11 +1,10 @@ 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 2440e821..850f43f4 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,12 +1,11 @@ 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 18ce7610..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,6 +2,8 @@ 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; @@ -12,9 +14,6 @@ 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 43e5d916..8b8b6ca1 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,7 +2,6 @@ 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 02c318fb..04581ef7 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,7 +1,6 @@ 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 183e99f6..7f108b64 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,5 +1,7 @@ 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; @@ -11,9 +13,6 @@ 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 ff42ddf2..2eb8c424 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,14 +1,13 @@ 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 c6777c89..694bbde8 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,12 +1,11 @@ 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 9fa06d38..0def2940 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,13 +1,12 @@ 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 28bd82c4..7ece29b3 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,5 +1,8 @@ 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; @@ -8,10 +11,6 @@ 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 fda8059f..3e44b8e5 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,6 +5,7 @@ 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; @@ -19,8 +20,6 @@ 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 8971fd41..edb134f8 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,12 +1,11 @@ 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 d33edfa3..09776641 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,7 @@ package until.the.eternity.common.annotation; -import until.the.eternity.batchlog.domain.enums.BatchType; - import java.lang.annotation.*; +import until.the.eternity.batchlog.domain.enums.BatchType; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) 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 9efb1ea4..a6a9adcc 100644 --- a/src/main/java/until/the/eternity/common/annotation/MetalwareParameters.java +++ b/src/main/java/until/the/eternity/common/annotation/MetalwareParameters.java @@ -4,7 +4,6 @@ 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 51ed960e..6644d3b3 100644 --- a/src/main/java/until/the/eternity/common/aspect/BatchExecutionLoggingAspect.java +++ b/src/main/java/until/the/eternity/common/aspect/BatchExecutionLoggingAspect.java @@ -1,5 +1,6 @@ package until.the.eternity.common.aspect; +import java.time.LocalDateTime; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; @@ -16,8 +17,6 @@ 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 ca9ee313..6b8ab078 100644 --- a/src/main/java/until/the/eternity/common/enums/ItemCategory.java +++ b/src/main/java/until/the/eternity/common/enums/ItemCategory.java @@ -1,12 +1,11 @@ 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 4a797556..5e688da2 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,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.v3.oas.annotations.media.Schema; -import org.springframework.data.domain.Sort; - import java.util.Arrays; +import org.springframework.data.domain.Sort; /** 정렬 방향 (오름차순/내림차순) */ @Schema(description = "정렬 방향", enumAsRef = true) 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 3c26de2b..704d79d5 100644 --- a/src/main/java/until/the/eternity/common/enums/SortField.java +++ b/src/main/java/until/the/eternity/common/enums/SortField.java @@ -3,7 +3,6 @@ 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 e6c61071..02d2ddd8 100644 --- a/src/main/java/until/the/eternity/common/enums/UserRole.java +++ b/src/main/java/until/the/eternity/common/enums/UserRole.java @@ -1,13 +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.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 1169e930..21c217b0 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 bc069d00..4cf5af10 100644 --- a/src/main/java/until/the/eternity/common/exception/GlobalExceptionHandler.java +++ b/src/main/java/until/the/eternity/common/exception/GlobalExceptionHandler.java @@ -1,5 +1,7 @@ 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; @@ -7,8 +9,6 @@ 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 703faeb7..678f8ebc 100644 --- a/src/main/java/until/the/eternity/common/filter/GatewayAuthFilter.java +++ b/src/main/java/until/the/eternity/common/filter/GatewayAuthFilter.java @@ -4,6 +4,9 @@ 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; @@ -17,10 +20,6 @@ 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 c7b99b00..c7f83b13 100644 --- a/src/main/java/until/the/eternity/common/response/ApiResponse.java +++ b/src/main/java/until/the/eternity/common/response/ApiResponse.java @@ -1,10 +1,9 @@ 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/PageMeta.java b/src/main/java/until/the/eternity/common/response/PageMeta.java index 8165065c..31eb8a09 100644 --- a/src/main/java/until/the/eternity/common/response/PageMeta.java +++ b/src/main/java/until/the/eternity/common/response/PageMeta.java @@ -2,6 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import org.springframework.data.domain.Page; +import org.springframework.data.domain.Slice; @Schema(description = "페이지 응답 메타데이터") public record PageMeta( @@ -21,4 +22,21 @@ public static PageMeta of(Page page) { page.isFirst(), page.isLast()); } + + public static PageMeta of(Slice slice) { + int currentPage = slice.getNumber() + 1; + int totalPages = currentPage + (slice.hasNext() ? 1 : 0); + long totalElements = + slice.getPageable().getOffset() + + slice.getNumberOfElements() + + (slice.hasNext() ? 1 : 0); + + return new PageMeta( + currentPage, + slice.getSize(), + totalPages, + totalElements, + slice.isFirst(), + slice.isLast()); + } } 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 0919ce20..95accae3 100644 --- a/src/main/java/until/the/eternity/common/response/PageResponseDto.java +++ b/src/main/java/until/the/eternity/common/response/PageResponseDto.java @@ -1,8 +1,8 @@ package until.the.eternity.common.response; import io.swagger.v3.oas.annotations.media.Schema; - import java.util.List; +import org.springframework.data.domain.Slice; @Schema(description = "페이지 응답 객체") public record PageResponseDto( @@ -12,4 +12,8 @@ public record PageResponseDto( public static PageResponseDto of(org.springframework.data.domain.Page page) { return new PageResponseDto<>(page.getContent(), PageMeta.of(page)); } + + public static PageResponseDto of(Slice slice) { + return new PageResponseDto<>(slice.getContent(), PageMeta.of(slice)); + } } 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 42a1f85f..df9e2e13 100644 --- a/src/main/java/until/the/eternity/common/util/CacheKeyBuilder.java +++ b/src/main/java/until/the/eternity/common/util/CacheKeyBuilder.java @@ -1,5 +1,6 @@ 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; @@ -9,8 +10,6 @@ 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 55fd9a26..3b362769 100644 --- a/src/main/java/until/the/eternity/common/util/SegongOptionParser.java +++ b/src/main/java/until/the/eternity/common/util/SegongOptionParser.java @@ -1,9 +1,8 @@ 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 88f0967c..65438ed8 100644 --- a/src/main/java/until/the/eternity/config/CacheStartupWarmupRunner.java +++ b/src/main/java/until/the/eternity/config/CacheStartupWarmupRunner.java @@ -1,5 +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; @@ -31,11 +35,6 @@ 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 847ae193..ca5c391f 100644 --- a/src/main/java/until/the/eternity/config/RedisCacheErrorHandler.java +++ b/src/main/java/until/the/eternity/config/RedisCacheErrorHandler.java @@ -1,11 +1,10 @@ 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 0ce20f22..c029e60e 100644 --- a/src/main/java/until/the/eternity/config/RedisConfig.java +++ b/src/main/java/until/the/eternity/config/RedisConfig.java @@ -6,6 +6,9 @@ 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; @@ -19,10 +22,6 @@ 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 { @@ -101,12 +100,15 @@ public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) // 통계 - 30분 TTL (이벤트 기반 eviction으로 실시간 반영) Duration statsTtl = Duration.ofMinutes(30); + Duration weeklyStatsTtl = Duration.ofHours(12); configs.put(CacheNames.STATISTICS_ITEM_DAILY, defaultConfig.entryTtl(statsTtl)); configs.put(CacheNames.STATISTICS_SUBCATEGORY_DAILY, defaultConfig.entryTtl(statsTtl)); configs.put(CacheNames.STATISTICS_TOPCATEGORY_DAILY, defaultConfig.entryTtl(statsTtl)); - configs.put(CacheNames.STATISTICS_ITEM_WEEKLY, defaultConfig.entryTtl(statsTtl)); - configs.put(CacheNames.STATISTICS_SUBCATEGORY_WEEKLY, defaultConfig.entryTtl(statsTtl)); - configs.put(CacheNames.STATISTICS_TOPCATEGORY_WEEKLY, defaultConfig.entryTtl(statsTtl)); + configs.put(CacheNames.STATISTICS_ITEM_WEEKLY, defaultConfig.entryTtl(weeklyStatsTtl)); + configs.put( + CacheNames.STATISTICS_SUBCATEGORY_WEEKLY, defaultConfig.entryTtl(weeklyStatsTtl)); + configs.put( + CacheNames.STATISTICS_TOPCATEGORY_WEEKLY, defaultConfig.entryTtl(weeklyStatsTtl)); // 실시간 경매 - 12분 TTL (10분 배치 + 여유 2분) configs.put( 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 29ca38fe..af0147a8 100644 --- a/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java +++ b/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java @@ -1,13 +1,12 @@ 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 a419df7c..8c9d0cff 100644 --- a/src/main/java/until/the/eternity/config/openapi/OpenApiRetryPolicy.java +++ b/src/main/java/until/the/eternity/config/openapi/OpenApiRetryPolicy.java @@ -1,12 +1,11 @@ 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 f8d79043..9d51746d 100644 --- a/src/main/java/until/the/eternity/config/openapi/OpenApiWebClientProperties.java +++ b/src/main/java/until/the/eternity/config/openapi/OpenApiWebClientProperties.java @@ -2,11 +2,10 @@ 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 a88ed7a5..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 @@ -1,5 +1,7 @@ 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; @@ -15,9 +17,6 @@ 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 6fc377b0..ab88e521 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 379972de..753bf6ad 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,11 +1,10 @@ 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 b007aae5..392c1fe7 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,11 +1,10 @@ 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 600bde4a..e0c27316 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,13 +1,12 @@ 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 6db5b49b..62cfb1e7 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,6 +5,7 @@ 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; @@ -15,8 +16,6 @@ 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 f96534ff..f4da3691 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,5 +1,6 @@ package until.the.eternity.hornBugle.application.runner; +import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; @@ -13,8 +14,6 @@ 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 1fe31492..f0ccc7a6 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,5 +1,10 @@ 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; @@ -12,15 +17,10 @@ import until.the.eternity.hornBugle.infrastructure.client.HornBugleClient; import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryListResponse; import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryResponse; +import until.the.eternity.hornBugle.interfaces.rest.dto.request.HornBuglePageRequestDto; 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 @@ -75,6 +75,8 @@ public void fetchAndSaveHornBugleHistoryAll() { log.info( "[HornBugle] Horn Bugle World History scheduler completed. Total saved: {}", totalSavedCount); + + warmRecentReadCaches(); } /** @@ -224,4 +226,19 @@ private void waitForRateLimit() { Thread.currentThread().interrupt(); } } + + private void warmRecentReadCaches() { + try { + service.search(null, null, new HornBuglePageRequestDto(1, 20)); + service.search(null, null, new HornBuglePageRequestDto(2, 20)); + + for (HornBugleServer server : HornBugleServer.values()) { + service.search(server.getServerName(), null, new HornBuglePageRequestDto(1, 20)); + } + + log.info("[HornBugle] Recent read cache warmup completed"); + } catch (Exception e) { + log.warn("[HornBugle] Recent read cache warmup failed: {}", e.getMessage(), e); + } + } } 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 242644f0..afccceff 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,9 +1,13 @@ 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; import org.springframework.data.domain.Page; +import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import until.the.eternity.common.response.PageResponseDto; @@ -19,10 +23,6 @@ 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 { @@ -159,15 +159,17 @@ private PageResponseDto searchByElasticsearch( private PageResponseDto searchByDatabase( String serverName, HornBuglePageRequestDto pageRequest) { - Page page; + Slice page; if (serverName != null && !serverName.isBlank()) { - page = repository.findByServerName(serverName, pageRequest.toPageable()); + page = + repository.findRecentByServerName( + serverName, pageRequest.toPageableWithoutSort()); } else { - page = repository.findAll(pageRequest.toPageable()); + page = repository.findRecent(pageRequest.toPageableWithoutSort()); } - Page responsePage = page.map(mapper::toResponse); + Slice responsePage = page.map(mapper::toResponse); return PageResponseDto.of(responsePage); } 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 05ca8dff..bb0a20c6 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,8 @@ package until.the.eternity.hornBugle.domain.entity; import jakarta.persistence.*; -import lombok.*; - import java.time.Instant; +import lombok.*; @Entity @Table( @@ -12,7 +11,11 @@ @Index( name = "idx_horn_bugle_server_date_send", columnList = "server_name, date_send DESC"), - @Index(name = "idx_horn_bugle_date_send", columnList = "date_send DESC") + @Index(name = "idx_horn_bugle_date_send", columnList = "date_send DESC"), + @Index(name = "idx_horn_bugle_date_send_id", columnList = "date_send DESC, id DESC"), + @Index( + name = "idx_horn_bugle_server_date_send_id", + columnList = "server_name, date_send DESC, id DESC") }) @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) 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 51bd034f..fe361d09 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,11 +1,10 @@ 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 c2bb9e73..a24aee75 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,5 +1,6 @@ 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; @@ -8,8 +9,6 @@ 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 75dfd277..fb760cf7 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,12 @@ package until.the.eternity.hornBugle.domain.repository; -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; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; +import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; public interface HornBugleRepositoryPort { @@ -18,6 +18,10 @@ public interface HornBugleRepositoryPort { Page findAll(Pageable pageable); + Slice findRecent(Pageable pageable); + + Slice findRecentByServerName(String serverName, Pageable pageable); + List findByServerNameAndDateSend(String serverName, Instant dateSend); /** FULLTEXT 인덱스를 사용한 키워드 검색 (전체 서버) */ 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 4d8be4d3..846ea39a 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,5 +1,10 @@ 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; @@ -8,12 +13,6 @@ 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 98bb7864..7c0ceb37 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,5 +1,6 @@ package until.the.eternity.hornBugle.infrastructure.elasticsearch; +import java.time.Instant; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -11,8 +12,6 @@ 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 52f59505..d439bfb8 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,6 +2,7 @@ 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; @@ -17,8 +18,6 @@ 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 e68b01eb..b9754150 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,29 +1,37 @@ 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.domain.Slice; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; 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 { + Optional findTopByServerNameOrderByDateSendDescIdDesc(String serverName); + + Page findByServerName(String serverName, Pageable pageable); + @Query( """ SELECT h FROM HornBugleWorldHistory h - WHERE h.serverName = :serverName - ORDER BY h.dateSend DESC - LIMIT 1 + ORDER BY h.dateSend DESC, h.id DESC """) - Optional findLatestByServerName(String serverName); + Slice findRecent(Pageable pageable); - Page findByServerName(String serverName, Pageable pageable); + @Query( + """ + SELECT h FROM HornBugleWorldHistory h + WHERE h.serverName = :serverName + ORDER BY h.dateSend DESC, h.id DESC + """) + Slice findRecentByServerName(String serverName, Pageable pageable); List findByServerNameAndDateSend(String serverName, Instant dateSend); 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 706bc05b..5fe5bd69 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,19 +1,19 @@ 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; import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; 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 { @@ -42,7 +42,7 @@ public void saveAll(List entities) { @Override public Optional findLatestByServerName(String serverName) { - return jpaRepository.findLatestByServerName(serverName); + return jpaRepository.findTopByServerNameOrderByDateSendDescIdDesc(serverName); } @Override @@ -55,6 +55,17 @@ public Page findAll(Pageable pageable) { return jpaRepository.findAll(pageable); } + @Override + public Slice findRecent(Pageable pageable) { + return jpaRepository.findRecent(pageable); + } + + @Override + public Slice findRecentByServerName( + String serverName, Pageable pageable) { + return jpaRepository.findRecentByServerName(serverName, pageable); + } + @Override public List findByServerNameAndDateSend( String serverName, Instant dateSend) { 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 adea275a..4090a2d4 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,7 +1,6 @@ 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 78f67772..1a11eb0f 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,7 +2,6 @@ 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 7660ff1a..cd47b1c0 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,7 +2,6 @@ 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 df662e9b..6a5d854a 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,5 +1,6 @@ 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; @@ -8,8 +9,6 @@ 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 4527a44e..6275c02d 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,5 +1,9 @@ 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; @@ -22,11 +26,6 @@ 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 6293e4ee..d53cd3b3 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,8 @@ import jakarta.persistence.Column; import jakarta.persistence.Embeddable; -import lombok.*; - import java.io.Serializable; +import lombok.*; @Embeddable @Getter 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 f870031a..a7ffd4c2 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 c9f85ea3..b540fc66 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,13 +1,12 @@ 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 c6838467..2be98732 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,13 +1,12 @@ 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 e13e45f9..266b2303 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,6 +3,7 @@ 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; @@ -12,8 +13,6 @@ 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 497ad7d1..66481cac 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,5 +1,6 @@ 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; @@ -9,8 +10,6 @@ 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 73f8b97a..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,6 +4,8 @@ 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; @@ -20,9 +22,6 @@ 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 6ae22e44..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 @@ -1,12 +1,11 @@ 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 70897793..be9d890b 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,10 @@ package until.the.eternity.iteminfo.interfaces.rest.dto.response; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import until.the.eternity.iteminfo.domain.entity.ItemInfo; - import java.util.List; import java.util.stream.Collectors; +import lombok.Builder; +import until.the.eternity.iteminfo.domain.entity.ItemInfo; @Builder @Schema(description = "아이템 정보 응답 DTO") 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 4b9da91b..98e5cfd5 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,10 @@ package until.the.eternity.iteminfo.interfaces.rest.dto.response; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import until.the.eternity.iteminfo.domain.entity.ItemInfo; - import java.util.List; import java.util.stream.Collectors; +import lombok.Builder; +import until.the.eternity.iteminfo.domain.entity.ItemInfo; @Builder @Schema(description = "아이템 정보 요약 응답 DTO") 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 02016f52..e98fce37 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,8 @@ package until.the.eternity.iteminfo.interfaces.rest.dto.response; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; - import java.util.List; +import lombok.Builder; @Builder @Schema(description = "아이템 정보 동기화 응답 DTO") 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 8595e38c..e4f5da74 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,5 +1,6 @@ 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; @@ -7,8 +8,6 @@ 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 5bbcdaf9..17634464 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,13 +2,12 @@ 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 37076dd7..904949d5 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,9 @@ package until.the.eternity.itemoptioninfo.domain.repository; -import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; -import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfoId; - import java.util.List; import java.util.Optional; +import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; +import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfoId; 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 0d5c1247..f8f7f1cc 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,14 +1,13 @@ 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 f5351cc9..e36b5213 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,6 +4,8 @@ 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; @@ -15,9 +17,6 @@ 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 0c7c4ba0..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 @@ -1,5 +1,6 @@ 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; @@ -11,8 +12,6 @@ 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 142b8c39..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 @@ -1,11 +1,10 @@ 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 60ccfde6..9355cf37 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,11 +1,10 @@ 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 ecf86a6a..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,6 +3,8 @@ 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; @@ -15,9 +17,6 @@ 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 4e8d9d1e..a3122710 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,10 +1,9 @@ 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 06bfc07e..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 @@ -1,5 +1,6 @@ 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; @@ -9,8 +10,6 @@ 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 b6a826a4..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 @@ -1,5 +1,6 @@ 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,8 +11,6 @@ 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 bfd24ffb..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 @@ -1,5 +1,6 @@ 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,8 +11,6 @@ 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 b27ff48f..3db9873a 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,5 +1,6 @@ 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; @@ -9,8 +10,6 @@ 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 2da7e4cc..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 @@ -1,5 +1,6 @@ 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; @@ -9,8 +10,6 @@ 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 008f1ea5..973c42d8 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,8 +1,5 @@ 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; @@ -10,6 +7,8 @@ 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 57110a5c..606efa53 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,6 +3,7 @@ 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; @@ -15,8 +16,6 @@ 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 335b73a8..c02d8c13 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,6 +3,7 @@ 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,8 +17,6 @@ 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 0cf931ca..3140cac0 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,6 +3,7 @@ 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,8 +17,6 @@ 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 33b539a1..d27291e2 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,6 +3,7 @@ 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; @@ -15,8 +16,6 @@ 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 77e77c52..68d84170 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,6 +3,7 @@ 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; @@ -15,8 +16,6 @@ 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 5da8ec98..9d0f2ef4 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,7 +2,6 @@ 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 d1749dba..8ae2aea7 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,7 +1,6 @@ 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 adef1c49..c4789746 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,7 +2,6 @@ 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 181014a8..bfde6388 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,7 +1,6 @@ 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 df5087bc..853e3550 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,7 +2,6 @@ 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 53aec222..5e3570dc 100644 --- a/src/main/java/until/the/eternity/ranking/repository/RankingRepository.java +++ b/src/main/java/until/the/eternity/ranking/repository/RankingRepository.java @@ -1,12 +1,11 @@ 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 7e913709..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 @@ -1,5 +1,7 @@ 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; @@ -9,9 +11,6 @@ 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 4644f32e..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 @@ -1,5 +1,7 @@ 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; @@ -9,9 +11,6 @@ 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 a330a490..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 @@ -1,5 +1,8 @@ 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; @@ -11,10 +14,6 @@ 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 f358c28e..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 @@ -1,5 +1,8 @@ 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; @@ -11,10 +14,6 @@ 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 543bd9df..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 @@ -1,5 +1,7 @@ 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; @@ -9,9 +11,6 @@ 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 06f8db16..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 @@ -1,5 +1,8 @@ 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; @@ -11,10 +14,6 @@ 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 4e9f68d0..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 @@ -2,11 +2,10 @@ 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 887807d9..66e5382d 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,11 +2,10 @@ 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 bfcb536b..fb3ab7a8 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,11 +2,10 @@ 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 87009479..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 @@ -2,11 +2,10 @@ 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 a05c528e..5756b091 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,11 +2,10 @@ 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 c7198311..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 @@ -2,11 +2,10 @@ 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 59954a6b..7908da49 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,8 @@ package until.the.eternity.statistics.interfaces.rest.dto.request; import io.swagger.v3.oas.annotations.media.Schema; -import org.springframework.format.annotation.DateTimeFormat; - import java.time.LocalDate; +import org.springframework.format.annotation.DateTimeFormat; @Schema(description = "일간 통계 검색 요청") public record DailyStatisticsSearchRequest( 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 46b2cf78..f6f91521 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,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import org.springframework.format.annotation.DateTimeFormat; - import java.time.LocalDate; +import org.springframework.format.annotation.DateTimeFormat; @Schema(description = "아이템별 일간 통계 검색 요청") public record ItemDailyStatisticsSearchRequest( 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 d132153d..1360de10 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,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import org.springframework.format.annotation.DateTimeFormat; - import java.time.LocalDate; +import org.springframework.format.annotation.DateTimeFormat; @Schema(description = "아이템별 주간 통계 검색 요청") public record ItemWeeklyStatisticsSearchRequest( 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 4ff95e0d..47c2c966 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,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import org.springframework.format.annotation.DateTimeFormat; - import java.time.LocalDate; +import org.springframework.format.annotation.DateTimeFormat; @Schema(description = "서브카테고리별 일간 통계 검색 요청") public record SubcategoryDailyStatisticsSearchRequest( 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 e0247871..9d7bc716 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,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import org.springframework.format.annotation.DateTimeFormat; - import java.time.LocalDate; +import org.springframework.format.annotation.DateTimeFormat; @Schema(description = "서브카테고리별 주간 통계 검색 요청") public record SubcategoryWeeklyStatisticsSearchRequest( 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 382bfefb..4b8e25d7 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,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import org.springframework.format.annotation.DateTimeFormat; - import java.time.LocalDate; +import org.springframework.format.annotation.DateTimeFormat; @Schema(description = "탑카테고리별 일간 통계 검색 요청") public record TopCategoryDailyStatisticsSearchRequest( 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 2986275f..ad1c6b41 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,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import org.springframework.format.annotation.DateTimeFormat; - import java.time.LocalDate; +import org.springframework.format.annotation.DateTimeFormat; @Schema(description = "탑카테고리별 주간 통계 검색 요청") public record TopCategoryWeeklyStatisticsSearchRequest( 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 e2485f4d..a9611010 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,7 +2,6 @@ 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 7d499d85..05e86f70 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,7 +2,6 @@ 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 b167b92c..e27f7f3a 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,7 +2,6 @@ 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 5f67f69e..bb826866 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,7 +2,6 @@ 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 df6c9f8e..fd49c2f2 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,7 +2,6 @@ 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 01782f02..ad81f768 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,7 +2,6 @@ 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 e5faf1a0..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 @@ -1,5 +1,7 @@ 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; @@ -8,9 +10,6 @@ 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 e8f72fc4..3bed0b1a 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,5 +1,7 @@ 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; @@ -7,9 +9,6 @@ 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 f91992fd..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 @@ -1,5 +1,7 @@ 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; @@ -8,9 +10,6 @@ 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 e2462abc..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 @@ -1,5 +1,6 @@ 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,8 +9,6 @@ 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 ea3542c1..fb0986af 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,5 +1,6 @@ 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; @@ -7,8 +8,6 @@ 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 f05eafff..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 @@ -1,5 +1,6 @@ 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; @@ -7,8 +8,6 @@ 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 42e4201d..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,5 +1,7 @@ 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; @@ -19,9 +21,6 @@ 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 diff --git a/src/main/java/until/the/eternity/statistics/service/WeeklyStatisticsService.java b/src/main/java/until/the/eternity/statistics/service/WeeklyStatisticsService.java index ca191803..f3a55b80 100644 --- a/src/main/java/until/the/eternity/statistics/service/WeeklyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/service/WeeklyStatisticsService.java @@ -1,12 +1,23 @@ 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.PriceRankingService; +import until.the.eternity.ranking.application.service.VolumeRankingService; +import until.the.eternity.ranking.util.RankingConstants; +import until.the.eternity.statistics.application.service.ItemWeeklyStatisticsService; +import until.the.eternity.statistics.application.service.TopCategoryWeeklyStatisticsService; import until.the.eternity.statistics.repository.weekly.ItemWeeklyStatisticsRepository; import until.the.eternity.statistics.repository.weekly.SubcategoryWeeklyStatisticsRepository; import until.the.eternity.statistics.repository.weekly.TopCategoryWeeklyStatisticsRepository; @@ -16,9 +27,19 @@ @RequiredArgsConstructor public class WeeklyStatisticsService { + @Qualifier("applicationTaskExecutor") + private final TaskExecutor taskExecutor; + private final ItemWeeklyStatisticsRepository itemWeeklyStatisticsRepository; private final SubcategoryWeeklyStatisticsRepository subcategoryWeeklyStatisticsRepository; private final TopCategoryWeeklyStatisticsRepository topCategoryWeeklyStatisticsRepository; + private final ItemWeeklyStatisticsService itemWeeklyStatisticsReadService; + private final TopCategoryWeeklyStatisticsService topCategoryWeeklyStatisticsReadService; + private final PriceRankingService priceRankingService; + private final VolumeRankingService volumeRankingService; + + private record WeeklyStatisticsWarmupTarget( + String itemName, String topCategory, String subCategory) {} /** * 전주(지난 주 월~일)의 일간 통계를 기반으로 주간 통계를 계산하여 저장 순서: ItemDaily → ItemWeekly → SubcategoryWeekly → @@ -72,5 +93,54 @@ public void calculateAndSaveWeeklyStatistics() { log.info( "[Weekly Statistics] All weekly statistics calculated successfully in {} ms", System.currentTimeMillis() - start); + scheduleReadCacheWarmup(); + } + + private void scheduleReadCacheWarmup() { + Runnable warmup = this::warmReadCaches; + if (TransactionSynchronizationManager.isSynchronizationActive()) { + TransactionSynchronizationManager.registerSynchronization( + new TransactionSynchronization() { + @Override + public void afterCommit() { + taskExecutor.execute(warmup); + } + }); + return; + } + taskExecutor.execute(warmup); + } + + private void warmReadCaches() { + try { + LocalDate end = LocalDate.now(); + LocalDate weeklyStart = end.minusMonths(2); + + for (WeeklyStatisticsWarmupTarget target : weeklyStatisticsWarmupTargets()) { + itemWeeklyStatisticsReadService.search( + target.itemName(), + target.subCategory(), + target.topCategory(), + weeklyStart, + end); + topCategoryWeeklyStatisticsReadService.search( + target.topCategory(), weeklyStart, end); + } + + priceRankingService.getWeekHighestPrice(20); + priceRankingService.getWeekHighestPrice(RankingConstants.DEFAULT_LIMIT); + volumeRankingService.getWeekPopular(20); + volumeRankingService.getWeekPopular(RankingConstants.DEFAULT_LIMIT); + + log.info("[Weekly Statistics] Read cache warmup completed"); + } catch (Exception e) { + log.warn("[Weekly Statistics] Read cache warmup failed: {}", e.getMessage(), e); + } + } + + private List weeklyStatisticsWarmupTargets() { + return List.of( + new WeeklyStatisticsWarmupTarget("향기로운 꿀 우유", "기타", "기타"), + new WeeklyStatisticsWarmupTarget("축복의 포션", "소모품", "포션")); } } diff --git a/src/main/resources/db/migration/V31__add_batch_read_p99_tail_indexes.sql b/src/main/resources/db/migration/V31__add_batch_read_p99_tail_indexes.sql new file mode 100644 index 00000000..acd8ebd3 --- /dev/null +++ b/src/main/resources/db/migration/V31__add_batch_read_p99_tail_indexes.sql @@ -0,0 +1,51 @@ +-- BATCH 조회 API P99 tail latency 개선 인덱스 +-- - horn_bugle 최신 목록은 date_send DESC + id DESC 순서로 안정적인 top-N 조회를 수행한다. +-- - all-time highest ranking은 auction_history 전체 정렬 대신 가격/거래 ID 인덱스로 top-N 조회한다. + +SET @index_exists := ( + SELECT COUNT(1) + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'horn_bugle_world_history' + AND index_name = 'idx_horn_bugle_date_send_id' +); +SET @ddl := IF( + @index_exists = 0, + 'CREATE INDEX idx_horn_bugle_date_send_id ON horn_bugle_world_history (date_send DESC, id 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 = 'horn_bugle_world_history' + AND index_name = 'idx_horn_bugle_server_date_send_id' +); +SET @ddl := IF( + @index_exists = 0, + 'CREATE INDEX idx_horn_bugle_server_date_send_id ON horn_bugle_world_history (server_name, date_send DESC, id 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 = 'auction_history' + AND index_name = 'idx_auction_history_price_buy_id' +); +SET @ddl := IF( + @index_exists = 0, + 'CREATE INDEX idx_auction_history_price_buy_id ON auction_history (auction_price_per_unit DESC, auction_buy_id DESC)', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; From 6b455750cecdc1d62521ba640df6f856168e372f Mon Sep 17 00:00:00 2001 From: dev-ant Date: Thu, 14 May 2026 08:05:48 +0900 Subject: [PATCH 2/3] chore: optimize imports --- .../scheduler/AuctionHistoryScheduler.java | 5 +++-- .../service/AuctionHistoryService.java | 3 ++- .../service/fetcher/AuctionHistoryFetcher.java | 7 ++++--- .../persister/AuctionHistoryPersister.java | 3 ++- .../domain/entity/AuctionHistory.java | 5 +++-- .../domain/event/AuctionHistorySavedEvent.java | 3 ++- .../domain/mapper/AuctionHistoryMapper.java | 3 ++- .../mapper/OpenApiAuctionHistoryMapper.java | 5 +++-- .../AuctionHistoryRepositoryPort.java | 9 +++++---- .../service/AuctionHistoryDuplicateChecker.java | 9 +++++---- .../fetcher/AuctionHistoryFetcherPort.java | 3 ++- .../persister/AuctionHistoryPersisterPort.java | 3 ++- .../AuctionHistoryJpaRepository.java | 7 ++++--- .../AuctionHistoryQueryDslRepository.java | 11 ++++++----- .../AuctionHistoryRepositoryPortImpl.java | 9 +++++---- .../dto/OpenApiAuctionHistoryListResponse.java | 1 + .../dto/OpenApiAuctionHistoryResponse.java | 3 ++- .../rest/dto/enums/SearchStandard.java | 1 + .../rest/dto/enums/SortDirection.java | 1 + .../request/AuctionHistorySearchRequest.java | 1 + .../response/AuctionHistoryDetailResponse.java | 1 + .../domain/entity/AuctionRealtimeItem.java | 3 ++- .../entity/AuctionRealtimeItemOption.java | 3 ++- .../domain/entity/AuctionHistoryItemOption.java | 3 ++- .../scheduler/AuctionRealtimeScheduler.java | 7 ++++--- .../service/AuctionRealtimeService.java | 5 +++-- .../service/fetcher/AuctionRealtimeFetcher.java | 5 +++-- .../persister/AuctionRealtimePersister.java | 3 ++- .../domain/mapper/AuctionRealtimeMapper.java | 3 ++- .../mapper/OpenApiAuctionRealtimeMapper.java | 7 ++++--- .../AuctionRealtimeItemRepositoryPort.java | 7 ++++--- .../fetcher/AuctionRealtimeFetcherPort.java | 3 ++- .../persister/AuctionRealtimePersisterPort.java | 3 ++- .../AuctionRealtimeItemRepository.java | 3 ++- .../AuctionRealtimeItemRepositoryPortImpl.java | 7 ++++--- .../AuctionRealtimeQueryDslRepository.java | 11 ++++++----- .../dto/OpenApiAuctionRealtimeListResponse.java | 1 + .../dto/OpenApiAuctionRealtimeResponse.java | 3 ++- .../request/AuctionRealtimeSearchRequest.java | 3 ++- .../rest/dto/request/RealtimeSortField.java | 1 + .../response/AuctionRealtimeDetailResponse.java | 1 + .../service/AuctionSearchOptionService.java | 5 +++-- .../entity/AuctionSearchOptionMetadata.java | 3 ++- .../AuctionSearchOptionRepositoryPort.java | 3 ++- .../AuctionSearchOptionJpaRepository.java | 3 ++- .../AuctionSearchOptionRepositoryPortImpl.java | 3 ++- .../rest/AuctionSearchOptionController.java | 5 +++-- .../rest/dto/response/FieldMetadata.java | 1 + .../response/SearchOptionMetadataResponse.java | 1 + .../service/BatchExecutionLogService.java | 5 +++-- .../domain/entity/BatchExecutionLog.java | 3 ++- .../BatchExecutionLogRepositoryPort.java | 3 ++- .../BatchExecutionLogJpaRepository.java | 3 ++- .../BatchExecutionLogRepositoryPortImpl.java | 7 ++++--- .../controller/BatchExecutionLogController.java | 3 ++- .../dto/response/BatchExecutionLogResponse.java | 3 ++- .../eternity/common/annotation/BatchLog.java | 3 ++- .../common/annotation/MetalwareParameters.java | 1 + .../aspect/BatchExecutionLoggingAspect.java | 3 ++- .../the/eternity/common/enums/ItemCategory.java | 5 +++-- .../eternity/common/enums/SortDirection.java | 3 ++- .../the/eternity/common/enums/SortField.java | 1 + .../the/eternity/common/enums/UserRole.java | 5 +++-- .../common/exception/GlobalExceptionCode.java | 4 ++-- .../exception/GlobalExceptionHandler.java | 4 ++-- .../common/filter/GatewayAuthFilter.java | 7 ++++--- .../eternity/common/response/ApiResponse.java | 3 ++- .../common/response/PageResponseDto.java | 3 ++- .../eternity/common/util/CacheKeyBuilder.java | 3 ++- .../common/util/SegongOptionParser.java | 3 ++- .../config/CacheStartupWarmupRunner.java | 9 +++++---- .../eternity/config/RedisCacheErrorHandler.java | 3 ++- .../until/the/eternity/config/RedisConfig.java | 7 ++++--- .../eternity/config/openapi/OpenApiFilters.java | 3 ++- .../config/openapi/OpenApiRetryPolicy.java | 3 ++- .../openapi/OpenApiWebClientProperties.java | 3 ++- .../application/service/EnchantInfoService.java | 5 +++-- .../exception/EnchantInfoExceptionCode.java | 4 ++-- .../repository/EnchantInfoRepositoryPort.java | 3 ++- .../persistence/EnchantInfoJpaRepository.java | 3 ++- .../EnchantInfoRepositoryPortImpl.java | 3 ++- .../rest/controller/EnchantInfoController.java | 3 ++- .../runner/HornBugleIndexRunner.java | 3 ++- .../scheduler/HornBugleScheduler.java | 11 ++++++----- .../application/service/HornBugleService.java | 7 ++++--- .../domain/entity/HornBugleWorldHistory.java | 3 ++- .../hornBugle/domain/enums/HornBugleServer.java | 5 +++-- .../domain/mapper/HornBugleMapper.java | 3 ++- .../repository/HornBugleRepositoryPort.java | 7 ++++--- .../service/HornBugleDuplicateChecker.java | 11 ++++++----- .../elasticsearch/HornBugleDocument.java | 3 ++- .../elasticsearch/HornBugleIndexService.java | 3 ++- .../persistence/HornBugleJpaRepository.java | 7 ++++--- .../HornBugleRepositoryPortImpl.java | 7 ++++--- .../OpenApiHornBugleHistoryListResponse.java | 1 + .../dto/OpenApiHornBugleHistoryResponse.java | 1 + .../dto/response/HornBugleHistoryResponse.java | 1 + .../HornBugleKafkaProducerService.java | 3 ++- .../application/service/ItemInfoService.java | 9 +++++---- .../iteminfo/domain/entity/ItemInfoId.java | 3 ++- .../domain/exception/ItemInfoExceptionCode.java | 4 ++-- .../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 +++-- .../dto/response/ItemInfoSummaryResponse.java | 5 +++-- .../rest/dto/response/ItemInfoSyncResponse.java | 3 ++- .../service/ItemOptionInfoService.java | 3 ++- .../domain/entity/ItemOptionInfoId.java | 5 +++-- .../ItemOptionInfoRepositoryPort.java | 5 +++-- .../ItemOptionInfoRepositoryPortImpl.java | 5 +++-- .../controller/ItemOptionInfoController.java | 5 +++-- .../service/MetalwareInfoService.java | 3 ++- .../persistence/MetalwareInfoJpaRepository.java | 3 ++- .../MetalwareInfoRepositoryPortImpl.java | 3 ++- .../controller/MetalwareInfoController.java | 5 +++-- .../dto/response/MetalwareInfoResponse.java | 3 ++- .../service/AllTimeRankingService.java | 3 ++- .../service/CategoryRankingService.java | 3 ++- .../service/PriceChangeRankingService.java | 3 ++- .../service/PriceRankingService.java | 3 ++- .../service/VolumeRankingService.java | 3 ++- .../ranking/domain/mapper/RankingMapper.java | 5 +++-- .../controller/AllTimeRankingController.java | 3 ++- .../controller/CategoryRankingController.java | 3 ++- .../PriceChangeRankingController.java | 3 ++- .../rest/controller/PriceRankingController.java | 3 ++- .../controller/VolumeRankingController.java | 3 ++- .../dto/response/AllTimeRankingResponse.java | 1 + .../response/PriceChangeRankingResponse.java | 1 + .../rest/dto/response/PriceRankingResponse.java | 1 + .../response/VolumeChangeRankingResponse.java | 1 + .../dto/response/VolumeRankingResponse.java | 1 + .../ranking/repository/RankingRepository.java | 3 ++- .../service/ItemDailyStatisticsService.java | 5 +++-- .../service/ItemWeeklyStatisticsService.java | 5 +++-- .../SubcategoryDailyStatisticsService.java | 7 ++++--- .../SubcategoryWeeklyStatisticsService.java | 7 ++++--- .../TopCategoryDailyStatisticsService.java | 5 +++-- .../TopCategoryWeeklyStatisticsService.java | 7 ++++--- .../entity/daily/ItemDailyStatistics.java | 3 ++- .../daily/SubcategoryDailyStatistics.java | 3 ++- .../daily/TopCategoryDailyStatistics.java | 3 ++- .../entity/weekly/ItemWeeklyStatistics.java | 3 ++- .../weekly/SubcategoryWeeklyStatistics.java | 3 ++- .../weekly/TopCategoryWeeklyStatistics.java | 3 ++- .../request/DailyStatisticsSearchRequest.java | 3 ++- .../ItemDailyStatisticsSearchRequest.java | 3 ++- .../ItemWeeklyStatisticsSearchRequest.java | 3 ++- ...SubcategoryDailyStatisticsSearchRequest.java | 3 ++- ...ubcategoryWeeklyStatisticsSearchRequest.java | 3 ++- ...TopCategoryDailyStatisticsSearchRequest.java | 3 ++- ...opCategoryWeeklyStatisticsSearchRequest.java | 3 ++- .../response/ItemDailyStatisticsResponse.java | 1 + .../response/ItemWeeklyStatisticsResponse.java | 1 + .../SubcategoryDailyStatisticsResponse.java | 1 + .../SubcategoryWeeklyStatisticsResponse.java | 1 + .../TopCategoryDailyStatisticsResponse.java | 1 + .../TopCategoryWeeklyStatisticsResponse.java | 1 + .../daily/ItemDailyStatisticsRepository.java | 5 +++-- .../SubcategoryDailyStatisticsRepository.java | 5 +++-- .../TopCategoryDailyStatisticsRepository.java | 5 +++-- .../weekly/ItemWeeklyStatisticsRepository.java | 3 ++- .../SubcategoryWeeklyStatisticsRepository.java | 3 ++- .../TopCategoryWeeklyStatisticsRepository.java | 3 ++- .../service/DailyStatisticsService.java | 5 +++-- .../service/WeeklyStatisticsService.java | 5 +++-- .../service/AuctionHistoryServiceTest.java | 13 +++++++------ .../fetcher/AuctionHistoryFetcherTest.java | 17 +++++++++-------- .../persister/AuctionHistoryPersisterTest.java | 13 +++++++------ .../AuctionHistoryDuplicateCheckerTest.java | 17 +++++++++-------- .../service/AuctionRealtimeServiceTest.java | 13 +++++++------ .../fetcher/AuctionRealtimeFetcherTest.java | 15 ++++++++------- .../service/AuctionSearchOptionServiceTest.java | 11 ++++++----- .../common/util/SegongOptionParserTest.java | 4 ++-- .../service/ItemInfoServiceTest.java | 11 ++++++----- .../service/MetalwareInfoServiceTest.java | 9 +++++---- 180 files changed, 473 insertions(+), 298 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 0bddde7a..bb5dc710 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", 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 95accae3..4419c5c9 100644 --- a/src/main/java/until/the/eternity/common/response/PageResponseDto.java +++ b/src/main/java/until/the/eternity/common/response/PageResponseDto.java @@ -1,9 +1,10 @@ package until.the.eternity.common.response; import io.swagger.v3.oas.annotations.media.Schema; -import java.util.List; import org.springframework.data.domain.Slice; +import java.util.List; + @Schema(description = "페이지 응답 객체") public record PageResponseDto( @Schema(description = "데이터 리스트") List items, 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 c029e60e..a5a50e3a 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 f0ccc7a6..be81e18c 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; @@ -21,6 +16,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 afccceff..16aea268 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; @@ -23,6 +20,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 bb0a20c6..12b2d3a1 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 fb760cf7..7d2b995f 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,13 +1,14 @@ 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 org.springframework.data.domain.Slice; 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 b9754150..411667b7 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.domain.Slice; @@ -11,6 +8,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 5fe5bd69..b3a1fc43 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; @@ -14,6 +11,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 diff --git a/src/main/java/until/the/eternity/statistics/service/WeeklyStatisticsService.java b/src/main/java/until/the/eternity/statistics/service/WeeklyStatisticsService.java index f3a55b80..35c7527e 100644 --- a/src/main/java/until/the/eternity/statistics/service/WeeklyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/service/WeeklyStatisticsService.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; @@ -22,6 +20,9 @@ import until.the.eternity.statistics.repository.weekly.SubcategoryWeeklyStatisticsRepository; import until.the.eternity.statistics.repository.weekly.TopCategoryWeeklyStatisticsRepository; +import java.time.LocalDate; +import java.util.List; + @Slf4j @Service @RequiredArgsConstructor diff --git a/src/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java b/src/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java index 5f12b620..912ce386 100644 --- a/src/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java +++ b/src/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java @@ -1,11 +1,5 @@ package until.the.eternity.auctionhistory.application.service; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.Optional; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -27,6 +21,13 @@ import until.the.eternity.common.response.PageResponseDto; import until.the.eternity.config.CacheNames; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.*; + @ExtendWith(MockitoExtension.class) class AuctionHistoryServiceTest { diff --git a/src/test/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcherTest.java b/src/test/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcherTest.java index e6e76af4..d1187257 100644 --- a/src/test/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcherTest.java +++ b/src/test/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcherTest.java @@ -1,13 +1,5 @@ package until.the.eternity.auctionhistory.application.service.fetcher; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - -import java.time.Instant; -import java.util.List; -import java.util.OptionalInt; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -22,6 +14,15 @@ 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 static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + @ExtendWith(MockitoExtension.class) class AuctionHistoryFetcherTest { diff --git a/src/test/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersisterTest.java b/src/test/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersisterTest.java index 0d9b8d2d..7764a911 100644 --- a/src/test/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersisterTest.java +++ b/src/test/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersisterTest.java @@ -1,11 +1,5 @@ package until.the.eternity.auctionhistory.application.service.persister; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -19,6 +13,13 @@ import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + @ExtendWith(MockitoExtension.class) class AuctionHistoryPersisterTest { diff --git a/src/test/java/until/the/eternity/auctionhistory/domain/service/AuctionHistoryDuplicateCheckerTest.java b/src/test/java/until/the/eternity/auctionhistory/domain/service/AuctionHistoryDuplicateCheckerTest.java index e0018834..2591d675 100644 --- a/src/test/java/until/the/eternity/auctionhistory/domain/service/AuctionHistoryDuplicateCheckerTest.java +++ b/src/test/java/until/the/eternity/auctionhistory/domain/service/AuctionHistoryDuplicateCheckerTest.java @@ -1,13 +1,5 @@ package until.the.eternity.auctionhistory.domain.service; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.when; - -import java.time.Instant; -import java.util.List; -import java.util.Optional; -import java.util.OptionalInt; -import java.util.Set; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -20,6 +12,15 @@ 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.Optional; +import java.util.OptionalInt; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; + @ExtendWith(MockitoExtension.class) class AuctionHistoryDuplicateCheckerTest { diff --git a/src/test/java/until/the/eternity/auctionrealtime/application/service/AuctionRealtimeServiceTest.java b/src/test/java/until/the/eternity/auctionrealtime/application/service/AuctionRealtimeServiceTest.java index 692aa26b..c7e0ede3 100644 --- a/src/test/java/until/the/eternity/auctionrealtime/application/service/AuctionRealtimeServiceTest.java +++ b/src/test/java/until/the/eternity/auctionrealtime/application/service/AuctionRealtimeServiceTest.java @@ -1,11 +1,5 @@ package until.the.eternity.auctionrealtime.application.service; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.Optional; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -26,6 +20,13 @@ import until.the.eternity.auctionrealtime.interfaces.rest.dto.response.RealtimeItemOptionResponse; import until.the.eternity.common.response.PageResponseDto; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.*; + @ExtendWith(MockitoExtension.class) class AuctionRealtimeServiceTest { diff --git a/src/test/java/until/the/eternity/auctionrealtime/application/service/fetcher/AuctionRealtimeFetcherTest.java b/src/test/java/until/the/eternity/auctionrealtime/application/service/fetcher/AuctionRealtimeFetcherTest.java index cb22f7b3..e59f27ad 100644 --- a/src/test/java/until/the/eternity/auctionrealtime/application/service/fetcher/AuctionRealtimeFetcherTest.java +++ b/src/test/java/until/the/eternity/auctionrealtime/application/service/fetcher/AuctionRealtimeFetcherTest.java @@ -1,12 +1,5 @@ package until.the.eternity.auctionrealtime.application.service.fetcher; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - -import java.time.Instant; -import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -21,6 +14,14 @@ import until.the.eternity.auctionrealtime.interfaces.external.dto.OpenApiAuctionRealtimeResponse; import until.the.eternity.common.enums.ItemCategory; +import java.time.Instant; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + @ExtendWith(MockitoExtension.class) class AuctionRealtimeFetcherTest { diff --git a/src/test/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionServiceTest.java b/src/test/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionServiceTest.java index d92cf748..cbd42577 100644 --- a/src/test/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionServiceTest.java +++ b/src/test/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionServiceTest.java @@ -1,11 +1,6 @@ package until.the.eternity.auctionsearchoption.application.service; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; - import com.fasterxml.jackson.databind.ObjectMapper; -import java.util.List; -import java.util.Map; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -17,6 +12,12 @@ import until.the.eternity.auctionsearchoption.interfaces.rest.dto.response.FieldMetadata; import until.the.eternity.auctionsearchoption.interfaces.rest.dto.response.SearchOptionMetadataResponse; +import java.util.List; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + @ExtendWith(MockitoExtension.class) class AuctionSearchOptionServiceTest { diff --git a/src/test/java/until/the/eternity/common/util/SegongOptionParserTest.java b/src/test/java/until/the/eternity/common/util/SegongOptionParserTest.java index be0a18f5..8f0e956d 100644 --- a/src/test/java/until/the/eternity/common/util/SegongOptionParserTest.java +++ b/src/test/java/until/the/eternity/common/util/SegongOptionParserTest.java @@ -1,13 +1,13 @@ package until.the.eternity.common.util; -import static org.assertj.core.api.Assertions.assertThat; - import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import static org.assertj.core.api.Assertions.assertThat; + class SegongOptionParserTest { private static final String SEGONG = "세공 옵션"; diff --git a/src/test/java/until/the/eternity/iteminfo/application/service/ItemInfoServiceTest.java b/src/test/java/until/the/eternity/iteminfo/application/service/ItemInfoServiceTest.java index bd64c643..0c472953 100644 --- a/src/test/java/until/the/eternity/iteminfo/application/service/ItemInfoServiceTest.java +++ b/src/test/java/until/the/eternity/iteminfo/application/service/ItemInfoServiceTest.java @@ -1,10 +1,5 @@ package until.the.eternity.iteminfo.application.service; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; - -import java.util.ArrayList; -import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -22,6 +17,12 @@ 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.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + @ExtendWith(MockitoExtension.class) class ItemInfoServiceTest { diff --git a/src/test/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoServiceTest.java b/src/test/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoServiceTest.java index 4bd777ea..b357e1cf 100644 --- a/src/test/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoServiceTest.java +++ b/src/test/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoServiceTest.java @@ -1,9 +1,5 @@ package until.the.eternity.metalwareinfo.application.service; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; - -import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -14,6 +10,11 @@ import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoSyncResponse; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + @ExtendWith(MockitoExtension.class) class MetalwareInfoServiceTest { From 81a585efcfb9d7bd1743e9a6ea22329e33681442 Mon Sep 17 00:00:00 2001 From: dev-ant Date: Thu, 14 May 2026 08:21:57 +0900 Subject: [PATCH 3/3] =?UTF-8?q?chore:=20=EC=A1=B0=ED=9A=8C=20API=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=9A=A9=20K6=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=BD=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 +- k6/README.md | 89 ++++ k6/results/.gitkeep | 1 + k6/run-batch-readonly.sh | 143 ++++++ k6/scenarios/batch_readonly_portfolio.js | 553 +++++++++++++++++++++++ 5 files changed, 791 insertions(+), 1 deletion(-) create mode 100644 k6/README.md create mode 100644 k6/results/.gitkeep create mode 100755 k6/run-batch-readonly.sh create mode 100644 k6/scenarios/batch_readonly_portfolio.js diff --git a/.gitignore b/.gitignore index a34754a7..5dca0ee0 100644 --- a/.gitignore +++ b/.gitignore @@ -70,4 +70,8 @@ package-lock.json package.json ### temp directory ### -/temp/ \ No newline at end of file +/temp/ + +### K6 performance reports ### +k6/results/* +!k6/results/.gitkeep diff --git a/k6/README.md b/k6/README.md new file mode 100644 index 00000000..07ec9c0d --- /dev/null +++ b/k6/README.md @@ -0,0 +1,89 @@ +# DEVNOGI Batch 조회 API K6 실행 가이드 + +`batch_readonly_portfolio.js`는 BATCH 서버에 존재하는 조회 전용 API 20종을 운영 도메인과 로컬 도메인에서 같은 방식으로 측정하기 위한 K6 시나리오다. + +## 실행 스크립트 + +```bash +cd open-api-batch-server +./k6/run-batch-readonly.sh [target] [profile] +``` + +## Target + +| target | 기본 BASE_URL | TARGET_MODE | 설명 | +|---|---|---|---| +| `local` | `http://localhost:8090` | `local-batch` | batch 서버 직접 호출 | +| `prod` | `https://www.memonogi.com` | `proxy` | 운영 사용자 경로(`/api/*`) 호출 | +| `custom` | 환경 변수 `BASE_URL` 필수 | 기본 `local-batch` | 임의 도메인/포트 | + +## Profile + +| profile | RATE | DURATION | VU 설정 | 용도 | +|---|---:|---|---|---| +| `smoke` | 2 req/s | 20s | pre 3, max 6 | 조회 API 20종 상태 확인 | +| `portfolio` | 4 req/s | 2m | pre 5, max 10 | 포트폴리오 제출용 기본 측정 | +| `load` | 10 req/s | 5m | pre 15, max 30 | 로컬/개발 환경 부하 확인 | + +모든 값은 환경 변수로 덮어쓸 수 있다. + +```bash +RATE=6 DURATION=3m ./k6/run-batch-readonly.sh local portfolio +``` + +실제 API 호출 없이 저장 경로와 실행 설정만 확인하려면 `DRY_RUN=1`을 사용한다. + +```bash +DRY_RUN=1 ./k6/run-batch-readonly.sh prod portfolio +``` + +## 결과 저장 규칙 + +실행할 때마다 `yyyyMMdd_HHmmSS` 형식의 `RUN_ID`가 자동 생성된다. + +```text +k6/results/ + local/ + 20260514_081500/ + batch_readonly_local_portfolio_20260514_081500.md + batch_readonly_local_portfolio_20260514_081500.json + batch_readonly_local_portfolio_20260514_081500.log + batch_readonly_local_portfolio_20260514_081500.env + prod/ + 20260514_082000/ + batch_readonly_prod_portfolio_20260514_082000.md + batch_readonly_prod_portfolio_20260514_082000.json + batch_readonly_prod_portfolio_20260514_082000.log + batch_readonly_prod_portfolio_20260514_082000.env +``` + +| 파일 | 내용 | +|---|---| +| `.md` | 포트폴리오에 붙일 수 있는 Markdown 결과 리포트 | +| `.json` | K6 summary 원본과 endpoint별 상세 지표 | +| `.log` | K6 콘솔 출력 전체 | +| `.env` | 실행 당시 target/profile/부하 설정 | + +## 자주 쓰는 명령 + +```bash +# 로컬 batch 서버 직접 측정 +./k6/run-batch-readonly.sh local portfolio + +# 운영 도메인 사용자 경로 측정 +./k6/run-batch-readonly.sh prod portfolio + +# 로컬 smoke 테스트 +./k6/run-batch-readonly.sh local smoke + +# localhost:8092 같은 임의 포트 측정 +BASE_URL=http://localhost:8092 TARGET_MODE=local-batch \ + ./k6/run-batch-readonly.sh custom smoke +``` + +## 주의사항 + +- 시나리오는 GET 조회 API만 호출한다. +- 인증 필요 API, 관리자 API, batch sync/write API는 제외한다. +- 운영 도메인에서 `load` 프로필은 서비스 영향이 있을 수 있으므로 트래픽이 적은 시간대에만 사용한다. +- JMeter는 이 저장소에 별도 시나리오를 추가하지 않았다. 현재 표준 산출물은 K6 Markdown/JSON 리포트다. diff --git a/k6/results/.gitkeep b/k6/results/.gitkeep new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/k6/results/.gitkeep @@ -0,0 +1 @@ + diff --git a/k6/run-batch-readonly.sh b/k6/run-batch-readonly.sh new file mode 100755 index 00000000..ee173c44 --- /dev/null +++ b/k6/run-batch-readonly.sh @@ -0,0 +1,143 @@ +#!/usr/bin/env bash +# DEVNOGI batch read-only API K6 runner. +# +# Usage: +# cd open-api-batch-server +# ./k6/run-batch-readonly.sh local smoke +# ./k6/run-batch-readonly.sh local portfolio +# ./k6/run-batch-readonly.sh prod portfolio +# BASE_URL=http://localhost:8092 TARGET_MODE=local-batch ./k6/run-batch-readonly.sh custom smoke + +set -euo pipefail + +BATCH_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +SCRIPT_PATH="${BATCH_ROOT}/k6/scenarios/batch_readonly_portfolio.js" + +TARGET="${1:-local}" +PROFILE="${2:-portfolio}" +RUN_ID="${RUN_ID:-$(date +%Y%m%d_%H%M%S)}" +OUT_ROOT="${OUT_ROOT:-${BATCH_ROOT}/k6/results}" + +case "${TARGET}" in + local) + BASE_URL="${BASE_URL:-http://localhost:8090}" + TARGET_MODE="${TARGET_MODE:-local-batch}" + ;; + prod|production) + TARGET="prod" + BASE_URL="${BASE_URL:-https://www.memonogi.com}" + TARGET_MODE="${TARGET_MODE:-proxy}" + ;; + custom) + if [ -z "${BASE_URL:-}" ]; then + echo "[ERR] custom target requires BASE_URL." >&2 + exit 1 + fi + TARGET_MODE="${TARGET_MODE:-local-batch}" + ;; + *) + echo "[ERR] Unknown target: ${TARGET}" >&2 + echo " Use one of: local | prod | custom" >&2 + exit 1 + ;; +esac + +case "${PROFILE}" in + smoke) + RATE="${RATE:-2}" + DURATION="${DURATION:-20s}" + PRE_ALLOCATED_VUS="${PRE_ALLOCATED_VUS:-3}" + MAX_VUS="${MAX_VUS:-6}" + ;; + portfolio) + RATE="${RATE:-4}" + DURATION="${DURATION:-2m}" + PRE_ALLOCATED_VUS="${PRE_ALLOCATED_VUS:-5}" + MAX_VUS="${MAX_VUS:-10}" + ;; + load) + RATE="${RATE:-10}" + DURATION="${DURATION:-5m}" + PRE_ALLOCATED_VUS="${PRE_ALLOCATED_VUS:-15}" + MAX_VUS="${MAX_VUS:-30}" + ;; + *) + echo "[ERR] Unknown profile: ${PROFILE}" >&2 + echo " Use one of: smoke | portfolio | load" >&2 + exit 1 + ;; +esac + +if [ ! -f "${SCRIPT_PATH}" ]; then + echo "[ERR] K6 scenario not found: ${SCRIPT_PATH}" >&2 + exit 1 +fi + +RESULT_DIR="${OUT_ROOT}/${TARGET}/${RUN_ID}" +REPORT_BASENAME="batch_readonly_${TARGET}_${PROFILE}_${RUN_ID}" +REPORT_MD="${RESULT_DIR}/${REPORT_BASENAME}.md" +REPORT_JSON="${RESULT_DIR}/${REPORT_BASENAME}.json" +CONSOLE_LOG="${RESULT_DIR}/${REPORT_BASENAME}.log" +RUN_META="${RESULT_DIR}/${REPORT_BASENAME}.env" + +mkdir -p "${RESULT_DIR}" + +cat > "${RUN_META}" </dev/null 2>&1; then + echo "[ERR] k6 is not installed. Install with: brew install k6" >&2 + exit 1 +fi + +set +e +BASE_URL="${BASE_URL}" \ +TARGET_MODE="${TARGET_MODE}" \ +RATE="${RATE}" \ +DURATION="${DURATION}" \ +PRE_ALLOCATED_VUS="${PRE_ALLOCATED_VUS}" \ +MAX_VUS="${MAX_VUS}" \ +REPORT_MD="${REPORT_MD}" \ +REPORT_JSON="${REPORT_JSON}" \ +k6 run "${SCRIPT_PATH}" 2>&1 | tee "${CONSOLE_LOG}" +exit_code=${PIPESTATUS[0]} +set -e + +echo "[INFO] saved metadata: ${RUN_META}" + +if [ "${exit_code}" -eq 0 ]; then + echo "[OK] K6 test completed." +else + echo "[WARN] K6 test finished with exit code ${exit_code}." >&2 +fi + +exit "${exit_code}" diff --git a/k6/scenarios/batch_readonly_portfolio.js b/k6/scenarios/batch_readonly_portfolio.js new file mode 100644 index 00000000..76e21991 --- /dev/null +++ b/k6/scenarios/batch_readonly_portfolio.js @@ -0,0 +1,553 @@ +import http from 'k6/http'; +import { check } from 'k6'; +import { Counter, Rate, Trend } from 'k6/metrics'; + +const BASE_URL = __ENV.BASE_URL || 'https://www.memonogi.com'; +const DURATION = __ENV.DURATION || '2m'; +const RATE = parseInt(__ENV.RATE || '4', 10); +const PRE_ALLOCATED_VUS = parseInt(__ENV.PRE_ALLOCATED_VUS || '5', 10); +const MAX_VUS = parseInt(__ENV.MAX_VUS || '10', 10); +const REPORT_MD = __ENV.REPORT_MD || 'k6/results/manual/batch_read_api_performance_report.md'; +const REPORT_JSON = __ENV.REPORT_JSON || 'k6/results/manual/batch_read_api_performance_summary.json'; +const TARGET_MODE = __ENV.TARGET_MODE || 'proxy'; + +const TARGET_ENDPOINTS = [ + { + slug: 'auction_history_search', + group: 'Auction', + label: '경매 거래 내역 검색', + method: 'GET', + path: '/api/auction-history/search?page=1&size=20&sortBy=dateAuctionBuy&direction=desc', + localPath: '/auction-history/search?page=1&size=20&sortBy=dateAuctionBuy&direction=desc', + source: '/oab/auction-history/search', + cache: 's-maxage=300', + weight: 14, + }, + { + slug: 'auction_realtime_search', + group: 'Auction', + label: '실시간 경매 검색', + method: 'GET', + path: '/api/auction-realtime/search?page=1&size=20&sortBy=dateAuctionExpire&direction=desc', + localPath: '/auction-realtime/search?page=1&size=20&sortBy=dateAuctionExpire&direction=desc', + source: '/oab/auction-realtime/search', + cache: 's-maxage=60', + weight: 12, + }, + { + slug: 'horn_bugle', + group: 'Auction', + label: '뿔피리 메시지 조회', + method: 'GET', + path: '/api/horn-bugle?page=1&size=20', + localPath: '/horn-bugle?page=1&size=20', + source: '/oab/horn-bugle', + cache: 'revalidate=300', + weight: 8, + }, + { + slug: 'item_categories', + group: 'Metadata', + label: '아이템 카테고리', + method: 'GET', + path: '/api/item-infos/categories', + localPath: '/api/item-infos/categories', + source: '/oab/api/item-infos/categories', + cache: 'route proxy', + weight: 3, + }, + { + slug: 'search_option', + group: 'Metadata', + label: '검색 옵션 메타데이터', + method: 'GET', + path: '/api/search-option', + localPath: '/api/search-option', + source: '/oab/api/search-option', + cache: 's-maxage=1800', + weight: 3, + }, + { + slug: 'enchant_fullnames', + group: 'Metadata', + label: '인챈트 풀네임 목록', + method: 'GET', + path: '/api/enchant-infos/fullnames', + localPath: '/api/enchant-infos/fullnames', + source: '/oab/api/enchant-infos/fullnames', + cache: 'route proxy', + weight: 3, + }, + { + slug: 'metalware_infos', + group: 'Metadata', + label: '세공 메타데이터', + method: 'GET', + path: '/api/metalware-infos', + localPath: '/api/metalware-infos', + source: '/oab/api/metalware-infos', + cache: 'route proxy', + weight: 3, + }, + { + slug: 'item_option_infos', + group: 'Metadata', + label: '아이템 옵션 메타데이터', + method: 'GET', + path: '/api/item-option-infos', + localPath: '/api/v1/item-option-infos', + source: '/oab/api/v1/item-option-infos', + cache: 'route proxy', + weight: 3, + }, + { + slug: 'item_detail', + group: 'Metadata', + label: '아이템 상세', + method: 'GET', + path: '/api/item-infos/detail?itemName=%ED%96%A5%EA%B8%B0%EB%A1%9C%EC%9A%B4%20%EA%BF%80%20%EC%9A%B0%EC%9C%A0', + localPath: '/api/item-infos/detail?itemName=%ED%96%A5%EA%B8%B0%EB%A1%9C%EC%9A%B4%20%EA%BF%80%20%EC%9A%B0%EC%9C%A0', + source: '/oab/api/item-infos/detail', + cache: 's-maxage=300', + weight: 3, + }, + { + slug: 'rankings_price', + group: 'Rankings', + label: '가격 랭킹', + method: 'GET', + path: '/api/rankings/price?type=today-highest&limit=20', + localPath: '/rankings/price/today/highest?limit=20', + source: '/oab/rankings/price/today/highest', + cache: 'revalidate=300', + weight: 5, + }, + { + slug: 'rankings_volume', + group: 'Rankings', + label: '거래량 랭킹', + method: 'GET', + path: '/api/rankings/volume?type=today&limit=20', + localPath: '/rankings/volume/today/popular?limit=20', + source: '/oab/rankings/volume/today/popular', + cache: 'revalidate=300', + weight: 5, + }, + { + slug: 'rankings_price_change', + group: 'Rankings', + label: '가격 변동 랭킹', + method: 'GET', + path: '/api/rankings/price-change?type=surge&limit=20', + localPath: '/rankings/price-change/surge?limit=20', + source: '/oab/rankings/price-change/surge', + cache: 'revalidate=300', + weight: 5, + }, + { + slug: 'rankings_all_time', + group: 'Rankings', + label: '전체 기간 최고가 랭킹', + method: 'GET', + path: '/api/rankings/all-time?type=highest-price&limit=20', + localPath: '/rankings/all-time/highest-price?limit=20', + source: '/oab/rankings/all-time/highest-price', + cache: 'revalidate=300', + weight: 5, + }, + { + slug: 'rankings_category', + group: 'Rankings', + label: '카테고리 랭킹', + method: 'GET', + path: '/api/rankings/category?type=top-priced&topCategory=%EA%B8%B0%ED%83%80&subCategory=%EA%B8%B0%ED%83%80&limit=20', + localPath: '/rankings/category/top-priced?topCategory=%EA%B8%B0%ED%83%80&subCategory=%EA%B8%B0%ED%83%80&limit=20', + source: '/oab/rankings/category/top-priced', + cache: 'revalidate=300', + weight: 5, + }, + { + slug: 'statistics_daily_top_categories', + group: 'Statistics', + label: '일간 상위 카테고리 통계', + method: 'GET', + path: '/api/statistics/daily/top-categories?topCategory=%EA%B8%B0%ED%83%80', + localPath: '/statistics/daily/top-categories?topCategory=%EA%B8%B0%ED%83%80', + source: '/oab/statistics/daily/top-categories', + cache: 'revalidate=300', + weight: 4, + }, + { + slug: 'statistics_daily_subcategories', + group: 'Statistics', + label: '일간 서브카테고리 통계', + method: 'GET', + path: '/api/statistics/daily/subcategories?topCategory=%EA%B8%B0%ED%83%80&subCategory=%EA%B8%B0%ED%83%80', + localPath: '/statistics/daily/subcategories?topCategory=%EA%B8%B0%ED%83%80&subCategory=%EA%B8%B0%ED%83%80', + source: '/oab/statistics/daily/subcategories', + cache: 'revalidate=300', + weight: 4, + }, + { + slug: 'statistics_daily_items', + group: 'Statistics', + label: '일간 아이템 통계', + method: 'GET', + path: '/api/statistics/daily/items?topCategory=%EA%B8%B0%ED%83%80&subCategory=%EA%B8%B0%ED%83%80&itemName=%ED%96%A5%EA%B8%B0%EB%A1%9C%EC%9A%B4%20%EA%BF%80%20%EC%9A%B0%EC%9C%A0', + localPath: '/statistics/daily/items?topCategory=%EA%B8%B0%ED%83%80&subCategory=%EA%B8%B0%ED%83%80&itemName=%ED%96%A5%EA%B8%B0%EB%A1%9C%EC%9A%B4%20%EA%BF%80%20%EC%9A%B0%EC%9C%A0', + source: '/oab/statistics/daily/items', + cache: 'revalidate=300', + weight: 4, + }, + { + slug: 'statistics_weekly_top_categories', + group: 'Statistics', + label: '주간 상위 카테고리 통계', + method: 'GET', + path: '/api/statistics/weekly/top-categories?topCategory=%EA%B8%B0%ED%83%80', + localPath: '/statistics/weekly/top-categories?topCategory=%EA%B8%B0%ED%83%80', + source: '/oab/statistics/weekly/top-categories', + cache: 'revalidate=300', + weight: 4, + }, + { + slug: 'statistics_weekly_subcategories', + group: 'Statistics', + label: '주간 서브카테고리 통계', + method: 'GET', + path: '/api/statistics/weekly/subcategories?topCategory=%EA%B8%B0%ED%83%80&subCategory=%EA%B8%B0%ED%83%80', + localPath: '/statistics/weekly/subcategories?topCategory=%EA%B8%B0%ED%83%80&subCategory=%EA%B8%B0%ED%83%80', + source: '/oab/statistics/weekly/subcategories', + cache: 'revalidate=300', + weight: 4, + }, + { + slug: 'statistics_weekly_items', + group: 'Statistics', + label: '주간 아이템 통계', + method: 'GET', + path: '/api/statistics/weekly/items?topCategory=%EA%B8%B0%ED%83%80&subCategory=%EA%B8%B0%ED%83%80&itemName=%ED%96%A5%EA%B8%B0%EB%A1%9C%EC%9A%B4%20%EA%BF%80%20%EC%9A%B0%EC%9C%A0', + localPath: '/statistics/weekly/items?topCategory=%EA%B8%B0%ED%83%80&subCategory=%EA%B8%B0%ED%83%80&itemName=%ED%96%A5%EA%B8%B0%EB%A1%9C%EC%9A%B4%20%EA%BF%80%20%EC%9A%B0%EC%9C%A0', + source: '/oab/statistics/weekly/items', + cache: 'revalidate=300', + weight: 4, + }, +]; + +const weightedEndpoints = []; +for (const endpoint of TARGET_ENDPOINTS) { + for (let i = 0; i < endpoint.weight; i += 1) { + weightedEndpoints.push(endpoint); + } +} + +const endpointMetrics = {}; +for (const endpoint of TARGET_ENDPOINTS) { + endpointMetrics[endpoint.slug] = { + duration: new Trend(`endpoint_${endpoint.slug}_duration_ms`, true), + success: new Rate(`endpoint_${endpoint.slug}_success_rate`), + requests: new Counter(`endpoint_${endpoint.slug}_requests`), + status2xx: new Counter(`endpoint_${endpoint.slug}_status_2xx`), + status4xx: new Counter(`endpoint_${endpoint.slug}_status_4xx`), + status5xx: new Counter(`endpoint_${endpoint.slug}_status_5xx`), + statusOther: new Counter(`endpoint_${endpoint.slug}_status_other`), + }; +} + +export const options = { + scenarios: { + batch_readonly_portfolio: { + executor: 'constant-arrival-rate', + rate: RATE, + timeUnit: '1s', + duration: DURATION, + preAllocatedVUs: PRE_ALLOCATED_VUS, + maxVUs: MAX_VUS, + exec: 'readonlyBatchApi', + }, + }, + thresholds: { + http_req_failed: ['rate<0.01'], + checks: ['rate>0.99'], + http_req_duration: ['p(95)<2500', 'p(99)<4000'], + }, + summaryTrendStats: ['avg', 'min', 'med', 'max', 'p(90)', 'p(95)', 'p(99)'], + tags: { + test_type: 'portfolio_readonly', + target_domain: BASE_URL, + }, +}; + +function pickEndpoint() { + return weightedEndpoints[Math.floor(Math.random() * weightedEndpoints.length)]; +} + +function metricValue(data, name, stat, fallback = 0) { + const metric = data.metrics[name]; + const value = metric && metric.values ? metric.values[stat] : undefined; + return Number.isFinite(value) ? value : fallback; +} + +function fixed(value, digits = 1) { + return Number.isFinite(value) ? value.toFixed(digits) : '-'; +} + +function pct(value, digits = 2) { + return Number.isFinite(value) ? (value * 100).toFixed(digits) : '-'; +} + +function statusBucket(status) { + if (status >= 200 && status < 300) return 'status2xx'; + if (status >= 400 && status < 500) return 'status4xx'; + if (status >= 500 && status < 600) return 'status5xx'; + return 'statusOther'; +} + +function requestPath(endpoint) { + return TARGET_MODE === 'local-batch' ? endpoint.localPath : endpoint.path; +} + +function callRouteDescription() { + if (TARGET_MODE === 'local-batch') { + return `로컬 batch 직접 경로 기준: ${BASE_URL}/* -> batch 애플리케이션`; + } + return `운영 사용자 경로 기준: ${BASE_URL}/api/* -> gateway -> batch(/oab/*)`; +} + +function environmentNote() { + if (TARGET_MODE === 'local-batch') { + return `로컬 Docker batch 서버 대상 테스트이므로 ${RATE} RPS 수준의 동일한 보수적 부하로 측정했다. 운영 www 도메인의 Next.js API proxy/CDN/TLS 구간은 제외되고, 로컬 Docker 네트워크의 batch 애플리케이션/DB/Redis/Elasticsearch 구간이 포함된다.`; + } + return `운영 서버 대상 테스트이므로 서비스 영향도를 낮추기 위해 ${RATE} RPS 수준의 보수적 부하로 측정했다. 직접 batch 도메인이 아니라 실제 사용자 진입점인 www 도메인의 Next.js API proxy를 통해 측정했으므로 CDN/TLS/Next route handler/gateway/batch 구간이 함께 포함된다.`; +} + +function targetSummaryLabel() { + return TARGET_MODE === 'local-batch' ? '로컬 Docker batch 서버 기준' : '운영 도메인 기준'; +} + +function cacheCaution() { + if (TARGET_MODE === 'local-batch') { + return '- 운영 www 도메인의 Next.js route handler 캐시, CDN, TLS, gateway 구간은 포함하지 않은 batch 애플리케이션 직접 측정 결과다.'; + } + return '- Next.js route handler 캐시가 적용된 API가 포함되어 있어, 순수 batch 애플리케이션/DB 단독 처리시간과는 다를 수 있다.'; +} + +function kstTimestamp() { + const now = new Date(Date.now() + 9 * 60 * 60 * 1000); + return now.toISOString().replace('T', ' ').replace(/\.\d{3}Z$/, ' KST'); +} + +function buildEndpointRows(data) { + return TARGET_ENDPOINTS.map((endpoint) => { + const prefix = `endpoint_${endpoint.slug}`; + const requests = metricValue(data, `${prefix}_requests`, 'count'); + return { + ...endpoint, + requests, + successRate: requests > 0 ? metricValue(data, `${prefix}_success_rate`, 'rate') : null, + avg: metricValue(data, `${prefix}_duration_ms`, 'avg'), + med: metricValue(data, `${prefix}_duration_ms`, 'med'), + p90: metricValue(data, `${prefix}_duration_ms`, 'p(90)'), + p95: metricValue(data, `${prefix}_duration_ms`, 'p(95)'), + p99: metricValue(data, `${prefix}_duration_ms`, 'p(99)'), + min: metricValue(data, `${prefix}_duration_ms`, 'min'), + max: metricValue(data, `${prefix}_duration_ms`, 'max'), + status2xx: metricValue(data, `${prefix}_status_2xx`, 'count'), + status4xx: metricValue(data, `${prefix}_status_4xx`, 'count'), + status5xx: metricValue(data, `${prefix}_status_5xx`, 'count'), + statusOther: metricValue(data, `${prefix}_status_other`, 'count'), + }; + }); +} + +function buildGroupRows(endpointRows) { + const groups = {}; + for (const row of endpointRows) { + if (!groups[row.group]) { + groups[row.group] = { + group: row.group, + endpoints: 0, + requests: 0, + weightedAvgSum: 0, + p95Max: 0, + successCount: 0, + }; + } + groups[row.group].endpoints += 1; + groups[row.group].requests += row.requests; + groups[row.group].weightedAvgSum += row.avg * row.requests; + groups[row.group].p95Max = Math.max(groups[row.group].p95Max, row.p95); + groups[row.group].successCount += row.requests * (row.successRate || 0); + } + + return Object.values(groups).map((group) => ({ + ...group, + avg: group.requests > 0 ? group.weightedAvgSum / group.requests : 0, + successRate: group.requests > 0 ? group.successCount / group.requests : 0, + })); +} + +function buildMarkdown(data) { + const endpointRows = buildEndpointRows(data); + const groupRows = buildGroupRows(endpointRows); + const totalRequests = metricValue(data, 'http_reqs', 'count'); + const failedRate = metricValue(data, 'http_req_failed', 'rate'); + const checksRate = metricValue(data, 'checks', 'rate'); + const duration = data.metrics.http_req_duration.values; + const receivedBytes = metricValue(data, 'data_received', 'count'); + const sentBytes = metricValue(data, 'data_sent', 'count'); + const droppedIterations = metricValue(data, 'dropped_iterations', 'count'); + const testRunMs = data.state && data.state.testRunDurationMs ? data.state.testRunDurationMs : 0; + const measuredSeconds = testRunMs > 0 ? testRunMs / 1000 : null; + const achievedRps = measuredSeconds ? totalRequests / measuredSeconds : RATE; + const successfulRequests = Math.round(totalRequests * (1 - failedRate)); + const failedRequests = totalRequests - successfulRequests; + + const endpointTable = endpointRows + .map((row) => `| ${row.group} | ${row.label} | ${row.method} ${requestPath(row)} | ${row.requests} | ${pct(row.successRate)}% | ${fixed(row.avg)} | ${fixed(row.med)} | ${fixed(row.p90)} | ${fixed(row.p95)} | ${fixed(row.p99)} | ${fixed(row.max)} | ${row.status2xx}/${row.status4xx}/${row.status5xx}/${row.statusOther} |`) + .join('\n'); + + const groupTable = groupRows + .map((row) => `| ${row.group} | ${row.endpoints} | ${row.requests} | ${pct(row.successRate)}% | ${fixed(row.avg)} | ${fixed(row.p95Max)} |`) + .join('\n'); + + const targetTable = TARGET_ENDPOINTS + .map((endpoint) => `| ${endpoint.group} | ${endpoint.label} | ${endpoint.method} ${requestPath(endpoint)} | ${endpoint.source} | ${endpoint.cache} |`) + .join('\n'); + + return `# DEVNOGI Batch 조회 API 성능 테스트 결과 + +## 1. 테스트 개요 + +| 항목 | 내용 | +|---|---| +| 측정 일시 | ${kstTimestamp()} | +| 대상 도메인 | ${BASE_URL} | +| 측정 도구 | K6 v1.2.3 | +| 테스트 대상 | batch 서버 조회 API ${TARGET_ENDPOINTS.length}종 | +| 호출 경로 | ${callRouteDescription()} | +| 제외 범위 | 로그인/인증 필요 API, 관리자 API, POST/PUT/PATCH/DELETE, batch sync/write API | +| 실행 모델 | constant-arrival-rate | +| 목표 부하 | ${RATE} req/s, ${DURATION}, preAllocatedVUs=${PRE_ALLOCATED_VUS}, maxVUs=${MAX_VUS} | +| 실제 처리량 | ${fixed(achievedRps, 2)} req/s | +| 총 요청 수 | ${totalRequests}건 | +| Dropped iterations | ${droppedIterations}건 | +| 성공 요청 수 | ${successfulRequests}건 | +| 실패 요청 수 | ${failedRequests}건 | +| 응답 데이터 수신량 | ${(receivedBytes / 1024 / 1024).toFixed(2)} MiB | +| 요청 데이터 송신량 | ${(sentBytes / 1024 / 1024).toFixed(2)} MiB | + +> ${environmentNote()} + +## 2. 전체 결과 요약 + +| 지표 | 결과 | +|---|---:| +| HTTP 실패율 | ${pct(failedRate)}% | +| K6 check 성공률 | ${pct(checksRate)}% | +| 평균 응답시간 | ${fixed(duration.avg)} ms | +| 중앙값 응답시간 | ${fixed(duration.med)} ms | +| p90 응답시간 | ${fixed(duration['p(90)'])} ms | +| p95 응답시간 | ${fixed(duration['p(95)'])} ms | +| p99 응답시간 | ${fixed(duration['p(99)'])} ms | +| 최소 응답시간 | ${fixed(duration.min)} ms | +| 최대 응답시간 | ${fixed(duration.max)} ms | + +## 3. API 그룹별 결과 + +| 그룹 | API 수 | 요청 수 | 성공률 | 가중 평균 응답시간(ms) | 그룹 내 최대 p95(ms) | +|---|---:|---:|---:|---:|---:| +${groupTable} + +## 4. API별 상세 결과 + +| 그룹 | API | 경로 | 요청 수 | 성공률 | avg(ms) | med(ms) | p90(ms) | p95(ms) | p99(ms) | max(ms) | 상태코드 2xx/4xx/5xx/기타 | +|---|---|---|---:|---:|---:|---:|---:|---:|---:|---:|---:| +${endpointTable} + +## 5. 테스트 대상 API 목록 + +| 그룹 | 기능 | 호출 경로 | batch 원천 경로 | 캐시/비고 | +|---|---|---|---|---| +${targetTable} + +## 6. 포트폴리오 기재용 요약 + +- ${targetSummaryLabel()} batch 조회 API ${TARGET_ENDPOINTS.length}종에 대해 K6 성능 테스트를 수행했다. +- 테스트는 조회 전용 GET API만 대상으로 구성했고, 쓰기성 batch sync/API 및 인증 필요 API는 제외했다. +- ${DURATION} 동안 ${RATE} req/s의 고정 도착률로 총 ${totalRequests}건을 호출했으며, HTTP 성공률은 ${pct(1 - failedRate)}%, K6 check 성공률은 ${pct(checksRate)}%로 측정됐다. +- 전체 응답시간은 평균 ${fixed(duration.avg)}ms, p95 ${fixed(duration['p(95)'])}ms, p99 ${fixed(duration['p(99)'])}ms로 측정됐다. +- 카테고리/검색 옵션/랭킹/통계/경매 검색 등 실제 사용자 조회 흐름을 반영해 API 그룹별 응답시간과 tail latency를 분리 산출했다. + +## 7. 재현 명령 + +\`\`\`bash +BASE_URL=${BASE_URL} \\ +TARGET_MODE=${TARGET_MODE} \\ +RATE=${RATE} DURATION=${DURATION} \\ +PRE_ALLOCATED_VUS=${PRE_ALLOCATED_VUS} MAX_VUS=${MAX_VUS} \\ +REPORT_MD=${REPORT_MD} \\ +REPORT_JSON=${REPORT_JSON} \\ +k6 run performance/k6/scenarios/batch_readonly_portfolio.js +\`\`\` + +## 8. 해석 시 주의사항 + +- 본 결과는 ${kstTimestamp().slice(0, 10)} KST에 로컬 Mac에서 ${BASE_URL} 대상으로 측정한 값이다. +- 서버 내부 CPU, 메모리, DB connection pool, Redis hit ratio, JVM GC, DB slow query 같은 내부 지표는 포함하지 않았다. +${cacheCaution()} +- JMeter는 로컬에 설치되어 있지 않아 이번 산출물은 K6 기준으로 작성했다. +`; +} + +export function readonlyBatchApi() { + const endpoint = pickEndpoint(); + const metrics = endpointMetrics[endpoint.slug]; + const url = `${BASE_URL}${requestPath(endpoint)}`; + const res = http.get(url, { + headers: { + Accept: 'application/json', + 'User-Agent': 'k6-devnogi-portfolio-readonly/1.0', + }, + tags: { + api_group: endpoint.group, + endpoint_slug: endpoint.slug, + name: endpoint.label, + }, + }); + + const ok = check(res, { + [`${endpoint.slug} status is 200`]: (r) => r.status === 200, + [`${endpoint.slug} body is not empty`]: (r) => !!r.body && r.body.length > 0, + }); + + metrics.duration.add(res.timings.duration); + metrics.success.add(ok); + metrics.requests.add(1); + metrics[statusBucket(res.status)].add(1); +} + +export function handleSummary(data) { + const markdown = buildMarkdown(data); + const endpointRows = buildEndpointRows(data); + const json = JSON.stringify( + { + generatedAtKst: kstTimestamp(), + baseUrl: BASE_URL, + targetMode: TARGET_MODE, + duration: DURATION, + rate: RATE, + targetEndpointCount: TARGET_ENDPOINTS.length, + endpoints: endpointRows, + summaryMetrics: data.metrics, + }, + null, + 2, + ); + + return { + stdout: markdown, + [REPORT_MD]: markdown, + [REPORT_JSON]: json, + }; +}