From 963e686fdd6811db7229dca232be9430d61ffb06 Mon Sep 17 00:00:00 2001 From: dev-ant Date: Wed, 21 Jan 2026 20:36:54 +0900 Subject: [PATCH 01/10] =?UTF-8?q?feat:=20hornbungle=20=EC=BB=AC=EB=9F=BC?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20flyway=20script=20=EC=9E=91=EC=84=B1=20?= =?UTF-8?q?=EB=B0=8F=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduler/AuctionHistoryScheduler.java | 9 +++--- .../service/AuctionHistoryService.java | 3 +- .../fetcher/AuctionHistoryFetcher.java | 5 ++- .../persister/AuctionHistoryPersister.java | 3 +- .../domain/entity/AuctionHistory.java | 5 ++- .../event/AuctionHistorySavedEvent.java | 8 ++--- .../domain/mapper/AuctionHistoryMapper.java | 3 +- .../mapper/OpenApiAuctionHistoryMapper.java | 12 +++---- .../AuctionHistoryRepositoryPort.java | 7 ++--- .../AuctionHistoryDuplicateChecker.java | 5 ++- .../fetcher/AuctionHistoryFetcherPort.java | 3 +- .../AuctionHistoryPersisterPort.java | 3 +- .../AuctionHistoryJpaRepository.java | 7 ++--- .../AuctionHistoryQueryDslRepository.java | 11 +++---- .../AuctionHistoryRepositoryPortImpl.java | 7 ++--- .../OpenApiAuctionHistoryListResponse.java | 1 - .../dto/OpenApiAuctionHistoryResponse.java | 3 +- .../rest/dto/enums/SearchStandard.java | 1 - .../rest/dto/enums/SortDirection.java | 1 - .../AuctionHistoryDetailResponse.java | 1 - .../domain/entity/AuctionItem.java | 5 ++- .../domain/entity/AuctionItemOption.java | 3 +- .../service/AuctionSearchOptionService.java | 5 ++- .../entity/AuctionSearchOptionMetadata.java | 3 +- .../AuctionSearchOptionRepositoryPort.java | 3 +- .../AuctionSearchOptionJpaRepository.java | 3 +- ...AuctionSearchOptionRepositoryPortImpl.java | 3 +- .../rest/AuctionSearchOptionController.java | 3 +- .../rest/dto/response/FieldMetadata.java | 1 - .../SearchOptionMetadataResponse.java | 1 - .../eternity/common/enums/ItemCategory.java | 5 ++- .../eternity/common/enums/SortDirection.java | 3 +- .../the/eternity/common/enums/SortField.java | 1 - .../common/exception/GlobalExceptionCode.java | 4 +-- .../exception/GlobalExceptionHandler.java | 4 +-- .../common/filter/GatewayAuthFilter.java | 7 ++--- .../eternity/common/response/ApiResponse.java | 3 +- .../common/response/PageResponseDto.java | 1 - .../config/openapi/OpenApiFilters.java | 3 +- .../config/openapi/OpenApiRetryPolicy.java | 3 +- .../openapi/OpenApiWebClientProperties.java | 3 +- .../domain/entity/HornBugleWorldHistory.java | 31 +++++++++++++------ .../domain/enums/HornBugleServer.java | 30 ++++++++++++++++++ .../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 | 3 +- .../dto/response/ItemCategoryResponse.java | 7 ++--- .../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 | 3 +- .../ItemOptionInfoRepositoryPortImpl.java | 3 +- .../controller/ItemOptionInfoController.java | 5 ++- .../service/MetalwareInfoService.java | 3 +- .../MetalwareInfoJpaRepository.java | 3 +- .../MetalwareInfoRepositoryPortImpl.java | 3 +- .../controller/MetalwareInfoController.java | 3 +- .../dto/response/MetalwareInfoResponse.java | 3 +- .../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 +- .../ItemDailyStatisticsController.java | 5 +-- .../ItemWeeklyStatisticsController.java | 6 ++-- .../SubcategoryDailyStatisticsController.java | 6 ++-- ...SubcategoryWeeklyStatisticsController.java | 6 ++-- .../TopCategoryDailyStatisticsController.java | 11 ++++--- ...TopCategoryWeeklyStatisticsController.java | 11 ++++--- .../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 | 12 +++---- .../SubcategoryDailyStatisticsRepository.java | 12 +++---- .../TopCategoryDailyStatisticsRepository.java | 13 ++++---- .../ItemWeeklyStatisticsRepository.java | 3 +- ...SubcategoryWeeklyStatisticsRepository.java | 3 +- ...TopCategoryWeeklyStatisticsRepository.java | 3 +- .../service/DailyStatisticsScheduler.java | 5 +-- .../service/DailyStatisticsService.java | 22 +++++-------- .../PreviousDayStatisticsScheduler.java | 5 ++- .../statistics/util/DateRangeValidator.java | 3 +- ...e_register_to_horn_bugle_world_history.sql | 15 +++++++++ .../service/AuctionHistoryServiceTest.java | 13 ++++---- .../fetcher/AuctionHistoryFetcherTest.java | 15 +++++---- .../AuctionHistoryPersisterTest.java | 13 ++++---- .../AuctionSearchOptionServiceTest.java | 11 +++---- .../service/ItemInfoServiceTest.java | 13 ++++---- .../service/MetalwareInfoServiceTest.java | 11 +++---- 107 files changed, 262 insertions(+), 311 deletions(-) create mode 100644 src/main/java/until/the/eternity/hornBugle/domain/enums/HornBugleServer.java create mode 100644 src/main/resources/db/migration/V14__add_server_name_and_date_register_to_horn_bugle_world_history.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 50eb72b..3d29417 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; @@ -14,9 +16,6 @@ import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; -import java.util.*; -import java.util.stream.Collectors; - @Slf4j @Component @RequiredArgsConstructor @@ -113,7 +112,9 @@ public void fetchAndSaveAuctionHistoryAll() { totalSavedCount); // 통계 업데이트를 위한 이벤트 발행 - log.debug("> [SCHEDULE] Publishing AuctionHistorySavedEvent with {} records", totalSavedCount); + log.debug( + "> [SCHEDULE] Publishing AuctionHistorySavedEvent with {} records", + totalSavedCount); eventPublisher.publishEvent(new AuctionHistorySavedEvent(totalSavedCount)); } } 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 07a7ed6..cc15bfd 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.data.domain.Page; @@ -15,8 +16,6 @@ import until.the.eternity.common.request.PageRequestDto; import until.the.eternity.common.response.PageResponseDto; -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 c0774da..a790ec4 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,7 @@ package until.the.eternity.auctionhistory.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.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; -import java.util.ArrayList; -import java.util.List; - @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 9eefb68..486008b 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 201e09a..a001839 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,10 @@ package until.the.eternity.auctionhistory.domain.entity; import jakarta.persistence.*; -import lombok.*; -import until.the.eternity.auctionitemoption.domain.entity.AuctionItemOption; - import java.time.Instant; import java.util.List; +import lombok.*; +import until.the.eternity.auctionitemoption.domain.entity.AuctionItemOption; @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 bb3c181..213706e 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,13 +1,9 @@ package until.the.eternity.auctionhistory.domain.event; -import lombok.Getter; - import java.time.LocalDateTime; +import lombok.Getter; -/** - * 경매장 거래 내역 저장 완료 이벤트 - * AuctionHistoryScheduler가 거래 내역을 성공적으로 저장한 후 발행됩니다. - */ +/** 경매장 거래 내역 저장 완료 이벤트 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 2fd9fb2..aa5d69a 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.AuctionItemOption; -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 e667d5f..669e486 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,22 +1,18 @@ package until.the.eternity.auctionhistory.domain.mapper; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +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.time.temporal.ChronoUnit; -import java.util.List; - @Mapper(componentModel = "spring", uses = OpenApiItemOptionMapper.class) public interface OpenApiAuctionHistoryMapper { @Named("toEntity(OpenApiAuctionHistoryResponse, ItemCategory)") - @Mapping( - source = "dateAuctionBuy", - target = "dateAuctionBuy", - qualifiedByName = "utcToKst") + @Mapping(source = "dateAuctionBuy", target = "dateAuctionBuy", qualifiedByName = "utcToKst") @Mapping(source = "openApiAuctionItemOptionResponse", target = "auctionItemOptions") @Mapping( target = "itemTopCategory", 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 b94ec7a..435c970 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,15 +1,14 @@ package until.the.eternity.auctionhistory.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.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; - /** 경매장 거래 내역 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 5eac2b0..4db1cc3 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,7 @@ package until.the.eternity.auctionhistory.domain.service; +import java.time.Instant; +import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -7,9 +9,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; - @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 cf00412..5b649be 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 44f5920..636f4c2 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 50fddea..b30599b 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 adc69bb..d617d57 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.Page; import org.springframework.data.domain.PageImpl; @@ -23,12 +28,6 @@ import until.the.eternity.auctionhistory.interfaces.rest.dto.request.PriceSearchRequest; import until.the.eternity.auctionitemoption.domain.entity.QAuctionItemOption; -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 8e8882a..b020427 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,9 @@ package until.the.eternity.auctionhistory.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; @@ -12,10 +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.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 c49a6b2..e194aeb 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 65b73ca..f41eb46 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 feb2c35..ef00567 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 e6aacf9..8266606 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/response/AuctionHistoryDetailResponse.java b/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/response/AuctionHistoryDetailResponse.java index d694c60..082c562 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/AuctionItem.java b/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionItem.java index 2e9264d..8af14a4 100644 --- a/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionItem.java +++ b/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionItem.java @@ -1,11 +1,10 @@ package until.the.eternity.auctionitem.domain.entity; import jakarta.persistence.*; -import lombok.*; -import until.the.eternity.auctionitemoption.domain.entity.AuctionItemOption; - import java.time.LocalDateTime; import java.util.List; +import lombok.*; +import until.the.eternity.auctionitemoption.domain.entity.AuctionItemOption; @Entity @Table(name = "auction_item") diff --git a/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java b/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java index 34a42de..7146859 100644 --- a/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java +++ b/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java @@ -1,6 +1,7 @@ package until.the.eternity.auctionitemoption.domain.entity; import jakarta.persistence.*; +import java.util.UUID; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -8,8 +9,6 @@ import until.the.eternity.auctionhistory.domain.entity.AuctionHistory; import until.the.eternity.auctionitem.domain.entity.AuctionItem; -import java.util.UUID; - @Entity @Table(name = "auction_item_option") @Getter 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 28e70a2..aec4e46 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.stereotype.Service; @@ -11,9 +13,6 @@ 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; - @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 5356db7..21a9e82 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") @Getter 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 fe4e89b..971be29 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 c18fd9e..e707457 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 2440e82..850f43f 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 0231a36..8ad6484 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,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -11,8 +12,6 @@ import until.the.eternity.auctionsearchoption.interfaces.rest.dto.response.SearchOptionMetadataResponse; import until.the.eternity.common.response.ApiResponse; -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 43e5d91..8b8b6ca 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 02c318f..04581ef 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/common/enums/ItemCategory.java b/src/main/java/until/the/eternity/common/enums/ItemCategory.java index ca9ee31..6b8ab07 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 4a79755..5e688da 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 3c26de2..704d79d 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/exception/GlobalExceptionCode.java b/src/main/java/until/the/eternity/common/exception/GlobalExceptionCode.java index 1169e93..21c217b 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 bc069d0..4cf5af1 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 ef255e9..b293dc4 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; @@ -16,10 +19,6 @@ import until.the.eternity.common.entity.CustomWebAuthenticationDetails; 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 c7b99b0..c7f83b1 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/PageResponseDto.java b/src/main/java/until/the/eternity/common/response/PageResponseDto.java index 0919ce2..c142faa 100644 --- a/src/main/java/until/the/eternity/common/response/PageResponseDto.java +++ b/src/main/java/until/the/eternity/common/response/PageResponseDto.java @@ -1,7 +1,6 @@ package until.the.eternity.common.response; import io.swagger.v3.oas.annotations.media.Schema; - import java.util.List; @Schema(description = "페이지 응답 객체") diff --git a/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java b/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java index 29ca38f..af0147a 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 a419df7..8c9d0cf 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 f8d7904..9d51746 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/hornBugle/domain/entity/HornBugleWorldHistory.java b/src/main/java/until/the/eternity/hornBugle/domain/entity/HornBugleWorldHistory.java index ca38a0e..482c857 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,15 +1,20 @@ package until.the.eternity.hornBugle.domain.entity; import jakarta.persistence.*; +import java.time.Instant; import lombok.*; -import java.time.LocalDateTime; - @Entity -@Table(name = "horn_bugle_world_history") +@Table( + name = "horn_bugle_world_history", + indexes = { + @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") + }) @Getter -@Setter -@NoArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor @Builder public class HornBugleWorldHistory { @@ -17,14 +22,20 @@ public class HornBugleWorldHistory { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") - private Long id; // 고유 식별자 + private Long id; + + @Column(name = "server_name", nullable = false, length = 20) + private String serverName; @Column(name = "character_name", nullable = false, length = 100) - private String characterName; // 발화한 유저의 캐릭터명 + private String characterName; - @Column(name = "message", nullable = false) - private String message; // 발화한 거대한 외침의 뿔피리 내용 + @Column(name = "message", nullable = false, columnDefinition = "TEXT") + private String message; @Column(name = "date_send", nullable = false) - private LocalDateTime dateSend; // 발화한 시각 (UTC0) + private Instant dateSend; + + @Column(name = "date_register", nullable = false) + private Instant dateRegister; } 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 new file mode 100644 index 0000000..fe361d0 --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/domain/enums/HornBugleServer.java @@ -0,0 +1,30 @@ +package until.the.eternity.hornBugle.domain.enums; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum HornBugleServer { + LUTE("류트"), + MANDOLIN("만돌린"), + HARP("하프"), + WOLF("울프"); + + private final String serverName; + + public String getEncodedServerName() { + return URLEncoder.encode(serverName, StandardCharsets.UTF_8); + } + + public static HornBugleServer fromServerName(String serverName) { + return Arrays.stream(values()) + .filter(server -> server.serverName.equals(serverName)) + .findFirst() + .orElseThrow( + () -> new IllegalArgumentException("Unknown server name: " + serverName)); + } +} 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 75ba658..1c80a41 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.data.domain.Page; @@ -18,11 +22,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 6293e4e..d53cd3b 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 f870031..a7ffd4c 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 c9f85ea..b540fc6 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 c683846..2be9873 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 e13e45f..266b230 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 497ad7d..66481ca 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 ddb1c49..755b5a2 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,7 @@ import io.swagger.v3.oas.annotations.Parameter; 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; @@ -18,8 +19,6 @@ import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSummaryResponse; import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSyncResponse; -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 0b1e681..065d209 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 lombok.Builder; -import lombok.Getter; -import until.the.eternity.common.enums.ItemCategory; - import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import lombok.Builder; +import lombok.Getter; +import until.the.eternity.common.enums.ItemCategory; @Getter @Builder 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 7089779..be9d890 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 4b9da91..98e5cfd 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 02016f5..e98fce3 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 fb86c03..e199d4b 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,13 +1,12 @@ 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; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; 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 5bbcdaf..1763446 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 01e4934..86bb898 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,8 +1,7 @@ package until.the.eternity.itemoptioninfo.domain.repository; -import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; - import java.util.List; +import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; 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 b523642..d01cc9e 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,12 +1,11 @@ package until.the.eternity.itemoptioninfo.infrastructure.persistence; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; import until.the.eternity.itemoptioninfo.domain.repository.ItemOptionInfoRepositoryPort; -import java.util.List; - @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 97bafca..d74ab49 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 @@ -2,6 +2,8 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -10,9 +12,6 @@ import until.the.eternity.itemoptioninfo.domain.mapper.ItemOptionInfoMapper; 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 8135be6..499de1a 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,13 +1,12 @@ package until.the.eternity.metalwareinfo.application.service; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import until.the.eternity.metalwareinfo.domain.repository.MetalwareInfoRepositoryPort; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; -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 202802f..61481a2 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,9 @@ package until.the.eternity.metalwareinfo.infrastructure.persistence; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; -import java.util.List; - public interface MetalwareInfoJpaRepository extends JpaRepository { @Query("SELECT m.metalware FROM MetalwareInfoEntity m") 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 3ee9a1a..9121dd1 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 271a7e3..fa26459 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 @@ -2,6 +2,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -9,8 +10,6 @@ import until.the.eternity.metalwareinfo.application.service.MetalwareInfoService; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; -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 4e8d9d1..a312271 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/statistics/domain/entity/daily/ItemDailyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java index f6217f4..361df9c 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 887807d..66e5382 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 bfcb536..fb3ab7a 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 44c2038..6970f18 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 a05c528..5756b09 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 22e4406..9201faa 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/controller/ItemDailyStatisticsController.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/ItemDailyStatisticsController.java index d6f5f8d..a8fcbdb 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/ItemDailyStatisticsController.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/ItemDailyStatisticsController.java @@ -27,10 +27,7 @@ public class ItemDailyStatisticsController { summary = "아이템별 일간 통계 조회", description = "아이템 이름, 서브 카테고리, 탑 카테고리로 일간 통계를 조회합니다. 최대 30일까지 조회 가능합니다.") public ResponseEntity> searchItemDailyStatistics( - @ParameterObject @ModelAttribute - @Valid - ItemDailyStatisticsSearchRequest - request) { + @ParameterObject @ModelAttribute @Valid ItemDailyStatisticsSearchRequest request) { java.util.List results = service.search( request.itemName(), diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/ItemWeeklyStatisticsController.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/ItemWeeklyStatisticsController.java index a85cfa5..9e71788 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/ItemWeeklyStatisticsController.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/ItemWeeklyStatisticsController.java @@ -25,9 +25,9 @@ public class ItemWeeklyStatisticsController { summary = "아이템별 주간 통계 조회", description = "아이템 이름, 서브 카테고리, 탑 카테고리로 주간 통계를 조회합니다. 최대 4개월까지 조회 가능합니다.") public ResponseEntity> searchItemWeeklyStatistics( - @ParameterObject @ModelAttribute - @jakarta.validation.Valid - until.the.eternity.statistics.interfaces.rest.dto.request.ItemWeeklyStatisticsSearchRequest + @ParameterObject @ModelAttribute @jakarta.validation.Valid + until.the.eternity.statistics.interfaces.rest.dto.request + .ItemWeeklyStatisticsSearchRequest request) { java.util.List results = service.search( diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/SubcategoryDailyStatisticsController.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/SubcategoryDailyStatisticsController.java index 668ff6e..0db8030 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/SubcategoryDailyStatisticsController.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/SubcategoryDailyStatisticsController.java @@ -26,9 +26,9 @@ public class SubcategoryDailyStatisticsController { description = "탑 카테고리와 서브 카테고리로 일간 통계를 조회합니다. 최대 30일까지 조회 가능합니다.") public ResponseEntity> searchSubcategoryDailyStatistics( - @ParameterObject @ModelAttribute - @jakarta.validation.Valid - until.the.eternity.statistics.interfaces.rest.dto.request.SubcategoryDailyStatisticsSearchRequest + @ParameterObject @ModelAttribute @jakarta.validation.Valid + until.the.eternity.statistics.interfaces.rest.dto.request + .SubcategoryDailyStatisticsSearchRequest request) { java.util.List results = service.search( diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/SubcategoryWeeklyStatisticsController.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/SubcategoryWeeklyStatisticsController.java index 63db0bf..28ba5a6 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/SubcategoryWeeklyStatisticsController.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/SubcategoryWeeklyStatisticsController.java @@ -26,9 +26,9 @@ public class SubcategoryWeeklyStatisticsController { description = "탑 카테고리와 서브 카테고리로 주간 통계를 조회합니다. 최대 4개월까지 조회 가능합니다.") public ResponseEntity> searchSubcategoryWeeklyStatistics( - @ParameterObject @ModelAttribute - @jakarta.validation.Valid - until.the.eternity.statistics.interfaces.rest.dto.request.SubcategoryWeeklyStatisticsSearchRequest + @ParameterObject @ModelAttribute @jakarta.validation.Valid + until.the.eternity.statistics.interfaces.rest.dto.request + .SubcategoryWeeklyStatisticsSearchRequest request) { java.util.List results = service.search( diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/TopCategoryDailyStatisticsController.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/TopCategoryDailyStatisticsController.java index eeb3faf..b224656 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/TopCategoryDailyStatisticsController.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/TopCategoryDailyStatisticsController.java @@ -26,12 +26,15 @@ public class TopCategoryDailyStatisticsController { description = "탑 카테고리로 일간 통계를 조회합니다. 최대 30일까지 조회 가능합니다.") public ResponseEntity> searchTopCategoryDailyStatistics( - @ParameterObject @ModelAttribute - @jakarta.validation.Valid - until.the.eternity.statistics.interfaces.rest.dto.request.TopCategoryDailyStatisticsSearchRequest + @ParameterObject @ModelAttribute @jakarta.validation.Valid + until.the.eternity.statistics.interfaces.rest.dto.request + .TopCategoryDailyStatisticsSearchRequest request) { java.util.List results = - service.search(request.topCategory(), request.getStartDateWithDefault(), request.getEndDateWithDefault()); + service.search( + request.topCategory(), + request.getStartDateWithDefault(), + request.getEndDateWithDefault()); return ResponseEntity.ok(results); } } diff --git a/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/TopCategoryWeeklyStatisticsController.java b/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/TopCategoryWeeklyStatisticsController.java index 732f150..b35b797 100644 --- a/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/TopCategoryWeeklyStatisticsController.java +++ b/src/main/java/until/the/eternity/statistics/interfaces/rest/controller/TopCategoryWeeklyStatisticsController.java @@ -26,12 +26,15 @@ public class TopCategoryWeeklyStatisticsController { description = "탑 카테고리로 주간 통계를 조회합니다. 최대 4개월까지 조회 가능합니다.") public ResponseEntity> searchTopCategoryWeeklyStatistics( - @ParameterObject @ModelAttribute - @jakarta.validation.Valid - until.the.eternity.statistics.interfaces.rest.dto.request.TopCategoryWeeklyStatisticsSearchRequest + @ParameterObject @ModelAttribute @jakarta.validation.Valid + until.the.eternity.statistics.interfaces.rest.dto.request + .TopCategoryWeeklyStatisticsSearchRequest request) { java.util.List results = - service.search(request.topCategory(), request.getStartDateWithDefault(), request.getEndDateWithDefault()); + service.search( + request.topCategory(), + request.getStartDateWithDefault(), + request.getEndDateWithDefault()); return ResponseEntity.ok(results); } } 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 59954a6..7908da4 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 46b2cf7..f6f9152 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 d132153..1360de1 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 4ff95e0..47c2c96 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 e024787..9d7bc71 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 382bfef..4b8e25d 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 2986275..ad1c6b4 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 e2485f4..a961101 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 7d499d8..05e86f7 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 b167b92..e27f7f3 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 5f67f69..bb82686 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 df6c9f8..fd49c2f 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 01782f0..ad81f76 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 ee22aac..447c242 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; @@ -7,9 +9,6 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.daily.ItemDailyStatistics; -import java.time.LocalDate; -import java.util.List; - public interface ItemDailyStatisticsRepository extends JpaRepository { /** @@ -35,8 +34,8 @@ List findByItemAndDateRange( @Param("endDate") LocalDate endDate); /** - * 당일 거래된 각 아이템의 통계를 item_daily_statistics 테이블에 upsert - * AuctionHistoryScheduler가 실행될 때마다 당일 통계만 업데이트 + * 당일 거래된 각 아이템의 통계를 item_daily_statistics 테이블에 upsert AuctionHistoryScheduler가 실행될 때마다 당일 통계만 + * 업데이트 */ @Modifying(clearAutomatically = true, flushAutomatically = true) @Transactional @@ -83,8 +82,7 @@ GROUP BY ah.item_name, ah.item_top_category, ah.item_sub_category, DATE(ah.date_ void upsertCurrentDayStatistics(); /** - * 전날 거래된 각 아이템의 통계를 item_daily_statistics 테이블에 최종 확정 - * 매일 새벽에 한 번 실행되어 전날 23시대 거래 내역까지 포함한 통계를 완성 + * 전날 거래된 각 아이템의 통계를 item_daily_statistics 테이블에 최종 확정 매일 새벽에 한 번 실행되어 전날 23시대 거래 내역까지 포함한 통계를 완성 */ @Modifying(clearAutomatically = true, flushAutomatically = true) @Transactional 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 ed0ff44..3bed0b1 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 { @@ -31,8 +30,8 @@ List findBySubcategoryAndDateRange( @Param("endDate") LocalDate endDate); /** - * 당일의 ItemDailyStatistics 데이터를 기반으로 서브카테고리별 통계를 집계하여 upsert - * item_daily_statistics 테이블만 사용하여 효율적으로 집계 + * 당일의 ItemDailyStatistics 데이터를 기반으로 서브카테고리별 통계를 집계하여 upsert item_daily_statistics 테이블만 사용하여 + * 효율적으로 집계 */ @Modifying(clearAutomatically = true, flushAutomatically = true) @Transactional @@ -75,8 +74,7 @@ INSERT INTO subcategory_daily_statistics ( void upsertCurrentDayStatistics(); /** - * 전날의 ItemDailyStatistics 데이터를 기반으로 서브카테고리별 통계를 최종 확정 - * item_daily_statistics 테이블만 사용하여 효율적으로 집계 + * 전날의 ItemDailyStatistics 데이터를 기반으로 서브카테고리별 통계를 최종 확정 item_daily_statistics 테이블만 사용하여 효율적으로 집계 */ @Modifying(clearAutomatically = true, flushAutomatically = true) @Transactional 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 a4bf3a0..3174948 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; @@ -7,9 +9,6 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.daily.TopCategoryDailyStatistics; -import java.time.LocalDate; -import java.util.List; - public interface TopCategoryDailyStatisticsRepository extends JpaRepository { @@ -31,8 +30,8 @@ List findByTopCategoryAndDateRange( @Param("endDate") LocalDate endDate); /** - * 당일의 SubcategoryDailyStatistics 데이터를 기반으로 탑카테고리별 통계를 집계하여 upsert - * item_daily_statistics 테이블을 사용하여 top_category 정보를 가져옴 + * 당일의 SubcategoryDailyStatistics 데이터를 기반으로 탑카테고리별 통계를 집계하여 upsert item_daily_statistics 테이블을 + * 사용하여 top_category 정보를 가져옴 */ @Modifying(clearAutomatically = true, flushAutomatically = true) @Transactional @@ -77,8 +76,8 @@ INSERT INTO top_category_daily_statistics ( void upsertCurrentDayStatistics(); /** - * 전날의 SubcategoryDailyStatistics 데이터를 기반으로 탑카테고리별 통계를 최종 확정 - * item_daily_statistics 테이블을 사용하여 top_category 정보를 가져옴 + * 전날의 SubcategoryDailyStatistics 데이터를 기반으로 탑카테고리별 통계를 최종 확정 item_daily_statistics 테이블을 사용하여 + * top_category 정보를 가져옴 */ @Modifying(clearAutomatically = true, flushAutomatically = true) @Transactional 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 24f37b0..dc7a301 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; @@ -7,8 +8,6 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.weekly.ItemWeeklyStatistics; -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 ea3542c..fb0986a 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 c2140d5..45a1dad 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/DailyStatisticsScheduler.java b/src/main/java/until/the/eternity/statistics/service/DailyStatisticsScheduler.java index 4b2f5a0..ceeed96 100644 --- a/src/main/java/until/the/eternity/statistics/service/DailyStatisticsScheduler.java +++ b/src/main/java/until/the/eternity/statistics/service/DailyStatisticsScheduler.java @@ -13,10 +13,7 @@ public class DailyStatisticsScheduler { private final DailyStatisticsService dailyStatisticsService; - /** - * AuctionHistory 저장 완료 이벤트 수신 시 당일 통계 업데이트 - * AuctionHistoryScheduler가 실행될 때마다 자동으로 호출됨 - */ + /** AuctionHistory 저장 완료 이벤트 수신 시 당일 통계 업데이트 AuctionHistoryScheduler가 실행될 때마다 자동으로 호출됨 */ @EventListener public void onAuctionHistorySaved(AuctionHistorySavedEvent event) { log.info( 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 5ed3562..6f09dff 100644 --- a/src/main/java/until/the/eternity/statistics/service/DailyStatisticsService.java +++ b/src/main/java/until/the/eternity/statistics/service/DailyStatisticsService.java @@ -18,9 +18,8 @@ public class DailyStatisticsService { private final TopCategoryDailyStatisticsRepository topCategoryDailyStatisticsRepository; /** - * 당일의 경매 거래 내역을 기반으로 일간 통계를 업데이트 - * AuctionHistoryScheduler가 실행될 때마다 호출되어 당일 통계만 갱신 - * 순서: auction_history → ItemDaily → SubcategoryDaily → TopCategoryDaily + * 당일의 경매 거래 내역을 기반으로 일간 통계를 업데이트 AuctionHistoryScheduler가 실행될 때마다 호출되어 당일 통계만 갱신 순서: + * auction_history → ItemDaily → SubcategoryDaily → TopCategoryDaily */ @Transactional public void calculateAndSaveCurrentDayStatistics() { @@ -36,8 +35,7 @@ public void calculateAndSaveCurrentDayStatistics() { System.currentTimeMillis() - start); // 2. ItemDailyStatistics → SubcategoryDailyStatistics (당일) - log.info( - "[Current Day Statistics] Step 2/3: Calculating subcategory daily statistics..."); + log.info("[Current Day Statistics] Step 2/3: Calculating subcategory daily statistics..."); long step2Start = System.currentTimeMillis(); subcategoryDailyStatisticsRepository.upsertCurrentDayStatistics(); log.info( @@ -45,8 +43,7 @@ public void calculateAndSaveCurrentDayStatistics() { System.currentTimeMillis() - step2Start); // 3. SubcategoryDailyStatistics → TopCategoryDailyStatistics (당일) - log.info( - "[Current Day Statistics] Step 3/3: Calculating top category daily statistics..."); + log.info("[Current Day Statistics] Step 3/3: Calculating top category daily statistics..."); long step3Start = System.currentTimeMillis(); topCategoryDailyStatisticsRepository.upsertCurrentDayStatistics(); log.info( @@ -59,9 +56,8 @@ public void calculateAndSaveCurrentDayStatistics() { } /** - * 전날의 경매 거래 내역을 기반으로 일간 통계를 최종 확정 - * 매일 새벽 한 번 실행되어 전날 23시대 거래까지 포함한 통계를 완성 - * 순서: auction_history → ItemDaily → SubcategoryDaily → TopCategoryDaily + * 전날의 경매 거래 내역을 기반으로 일간 통계를 최종 확정 매일 새벽 한 번 실행되어 전날 23시대 거래까지 포함한 통계를 완성 순서: auction_history → + * ItemDaily → SubcategoryDaily → TopCategoryDaily */ @Transactional public void calculateAndSavePreviousDayStatistics() { @@ -77,8 +73,7 @@ public void calculateAndSavePreviousDayStatistics() { System.currentTimeMillis() - start); // 2. ItemDailyStatistics → SubcategoryDailyStatistics (전날) - log.info( - "[Previous Day Statistics] Step 2/3: Finalizing subcategory daily statistics..."); + log.info("[Previous Day Statistics] Step 2/3: Finalizing subcategory daily statistics..."); long step2Start = System.currentTimeMillis(); subcategoryDailyStatisticsRepository.upsertPreviousDayStatistics(); log.info( @@ -86,8 +81,7 @@ public void calculateAndSavePreviousDayStatistics() { System.currentTimeMillis() - step2Start); // 3. SubcategoryDailyStatistics → TopCategoryDailyStatistics (전날) - log.info( - "[Previous Day Statistics] Step 3/3: Finalizing top category daily statistics..."); + log.info("[Previous Day Statistics] Step 3/3: Finalizing top category daily statistics..."); long step3Start = System.currentTimeMillis(); topCategoryDailyStatisticsRepository.upsertPreviousDayStatistics(); log.info( diff --git a/src/main/java/until/the/eternity/statistics/service/PreviousDayStatisticsScheduler.java b/src/main/java/until/the/eternity/statistics/service/PreviousDayStatisticsScheduler.java index 81b5f03..21ca850 100644 --- a/src/main/java/until/the/eternity/statistics/service/PreviousDayStatisticsScheduler.java +++ b/src/main/java/until/the/eternity/statistics/service/PreviousDayStatisticsScheduler.java @@ -13,9 +13,8 @@ public class PreviousDayStatisticsScheduler { private final DailyStatisticsService dailyStatisticsService; /** - * 매일 새벽 전날 통계 최종 확정 - * 기본 cron: 매일 새벽 0시 10분 (AuctionHistoryScheduler 0시 5분 실행 이후) - * 전날 23시대 거래 내역까지 모두 포함된 최종 통계를 저장 + * 매일 새벽 전날 통계 최종 확정 기본 cron: 매일 새벽 0시 10분 (AuctionHistoryScheduler 0시 5분 실행 이후) 전날 23시대 거래 내역까지 + * 모두 포함된 최종 통계를 저장 */ @Scheduled(cron = "${statistics.previous-day.cron:0 10 0 * * *}", zone = "Asia/Seoul") public void schedulePreviousDayStatistics() { diff --git a/src/main/java/until/the/eternity/statistics/util/DateRangeValidator.java b/src/main/java/until/the/eternity/statistics/util/DateRangeValidator.java index 4aa75f7..540480c 100644 --- a/src/main/java/until/the/eternity/statistics/util/DateRangeValidator.java +++ b/src/main/java/until/the/eternity/statistics/util/DateRangeValidator.java @@ -22,8 +22,7 @@ public static void validateDailyDateRange(LocalDate startDate, LocalDate endDate if (daysBetween > DAILY_MAX_DAYS) { throw new IllegalArgumentException( String.format( - "일간 통계 조회는 최대 %d일까지만 가능합니다. 요청 기간: %d일", - DAILY_MAX_DAYS, daysBetween)); + "일간 통계 조회는 최대 %d일까지만 가능합니다. 요청 기간: %d일", DAILY_MAX_DAYS, daysBetween)); } } diff --git a/src/main/resources/db/migration/V14__add_server_name_and_date_register_to_horn_bugle_world_history.sql b/src/main/resources/db/migration/V14__add_server_name_and_date_register_to_horn_bugle_world_history.sql new file mode 100644 index 0000000..8b69e23 --- /dev/null +++ b/src/main/resources/db/migration/V14__add_server_name_and_date_register_to_horn_bugle_world_history.sql @@ -0,0 +1,15 @@ +-- horn_bugle_world_history 테이블에 server_name, date_register 컬럼 추가 및 인덱스 생성 + +-- 1. server_name 컬럼 추가 (서버 구분용) +ALTER TABLE horn_bugle_world_history + ADD COLUMN server_name VARCHAR(20) NOT NULL DEFAULT '' COMMENT '서버 이름 (류트, 만돌린, 하프, 울프)'; + +-- 2. date_register 컬럼 추가 (수집 시각) +ALTER TABLE horn_bugle_world_history + ADD COLUMN date_register DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '해당 뿔피리 내역을 수집한 시각'; + +-- 3. 복합 인덱스 생성 (server_name, date_send desc) - 서버별 최신 조회 최적화 +CREATE INDEX idx_horn_bugle_server_date_send ON horn_bugle_world_history (server_name, date_send DESC); + +-- 4. 단일 인덱스 생성 (date_send desc) - 전체 최신 조회 최적화 +CREATE INDEX idx_horn_bugle_date_send ON horn_bugle_world_history (date_send DESC); 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 7ae6dd9..ed2fea8 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,5 +1,11 @@ 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; @@ -21,13 +27,6 @@ import until.the.eternity.common.request.PageRequestDto; 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 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 87dbdbc..a5b89c0 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,5 +1,12 @@ 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 org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -14,14 +21,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 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 63edf84..0501bc5 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,5 +1,11 @@ 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; @@ -13,13 +19,6 @@ 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/auctionsearchoption/application/service/AuctionSearchOptionServiceTest.java b/src/test/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionServiceTest.java index cbd4257..d92cf74 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,6 +1,11 @@ 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; @@ -12,12 +17,6 @@ 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/iteminfo/application/service/ItemInfoServiceTest.java b/src/test/java/until/the/eternity/iteminfo/application/service/ItemInfoServiceTest.java index 6e66a73..15a7a7d 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,5 +1,11 @@ package until.the.eternity.iteminfo.application.service; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +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; @@ -19,13 +25,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.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -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 6c56c0d..7de499a 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,5 +1,10 @@ package until.the.eternity.metalwareinfo.application.service; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -9,12 +14,6 @@ import until.the.eternity.metalwareinfo.domain.repository.MetalwareInfoRepositoryPort; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @ExtendWith(MockitoExtension.class) class MetalwareInfoServiceTest { From ec9f9098dd8b53cb3e9737351f6daa2a9a94c817 Mon Sep 17 00:00:00 2001 From: dev-ant Date: Wed, 21 Jan 2026 20:58:08 +0900 Subject: [PATCH 02/10] =?UTF-8?q?feat:=20hornbugle=20repository=20?= =?UTF-8?q?=EB=B0=8F=20scheduler=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/service/HornBugleService.java | 89 ++++++++++++++ .../domain/mapper/HornBugleMapper.java | 24 ++++ .../repository/HornBugleRepositoryPort.java | 21 ++++ .../service/HornBugleDuplicateChecker.java | 114 ++++++++++++++++++ .../client/HornBugleClient.java | 49 ++++++++ .../persistence/HornBugleJpaRepository.java | 28 +++++ .../HornBugleRepositoryPortImpl.java | 62 ++++++++++ .../OpenApiHornBugleHistoryListResponse.java | 8 ++ .../dto/OpenApiHornBugleHistoryResponse.java | 14 +++ .../dto/request/HornBuglePageRequestDto.java | 35 ++++++ .../response/HornBugleHistoryResponse.java | 18 +++ 11 files changed, 462 insertions(+) create mode 100644 src/main/java/until/the/eternity/hornBugle/application/service/HornBugleService.java create mode 100644 src/main/java/until/the/eternity/hornBugle/domain/mapper/HornBugleMapper.java create mode 100644 src/main/java/until/the/eternity/hornBugle/domain/repository/HornBugleRepositoryPort.java create mode 100644 src/main/java/until/the/eternity/hornBugle/domain/service/HornBugleDuplicateChecker.java create mode 100644 src/main/java/until/the/eternity/hornBugle/infrastructure/client/HornBugleClient.java create mode 100644 src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java create mode 100644 src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java create mode 100644 src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryListResponse.java create mode 100644 src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryResponse.java create mode 100644 src/main/java/until/the/eternity/hornBugle/interfaces/rest/dto/request/HornBuglePageRequestDto.java create mode 100644 src/main/java/until/the/eternity/hornBugle/interfaces/rest/dto/response/HornBugleHistoryResponse.java 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 new file mode 100644 index 0000000..7253b46 --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/application/service/HornBugleService.java @@ -0,0 +1,89 @@ +package until.the.eternity.hornBugle.application.service; + +import java.time.Instant; +import java.util.List; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import until.the.eternity.common.response.PageResponseDto; +import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; +import until.the.eternity.hornBugle.domain.enums.HornBugleServer; +import until.the.eternity.hornBugle.domain.mapper.HornBugleMapper; +import until.the.eternity.hornBugle.domain.repository.HornBugleRepositoryPort; +import until.the.eternity.hornBugle.domain.service.HornBugleDuplicateChecker; +import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryResponse; +import until.the.eternity.hornBugle.interfaces.rest.dto.request.HornBuglePageRequestDto; +import until.the.eternity.hornBugle.interfaces.rest.dto.response.HornBugleHistoryResponse; + +@Slf4j +@Service +@RequiredArgsConstructor +public class HornBugleService { + + private final HornBugleRepositoryPort repository; + private final HornBugleDuplicateChecker duplicateChecker; + private final HornBugleMapper mapper; + + /** + * API 응답 데이터를 중복 제거 후 저장한다. + * + * @param server 서버 정보 + * @param responses API 응답 데이터 + * @return 저장된 건수 + */ + @Transactional + public int saveAll(HornBugleServer server, List responses) { + if (responses == null || responses.isEmpty()) { + log.debug("[HornBugle] [{}] No data to save.", server.getServerName()); + return 0; + } + + // 중복 제거 + List filtered = + duplicateChecker.filterDuplicates(server, responses); + + if (filtered.isEmpty()) { + log.debug( + "[HornBugle] [{}] All data is duplicated. Nothing to save.", + server.getServerName()); + return 0; + } + + // Entity 변환 및 저장 + Instant registerTime = Instant.now(); + List entities = + filtered.stream().map(dto -> mapper.toEntity(dto, server, registerTime)).toList(); + + repository.saveAll(entities); + + log.info("[HornBugle] [{}] Saved {} new records.", server.getServerName(), entities.size()); + + return entities.size(); + } + + /** + * 서버별 최신 N건 조회 (페이징) + * + * @param serverName 서버 이름 (선택 사항, null이면 전체 조회) + * @param pageRequest 페이지 요청 정보 + * @return 페이징 응답 + */ + @Transactional(readOnly = true) + public PageResponseDto search( + String serverName, HornBuglePageRequestDto pageRequest) { + + Page page; + + if (serverName != null && !serverName.isBlank()) { + page = repository.findByServerName(serverName, pageRequest.toPageable()); + } else { + page = repository.findAll(pageRequest.toPageable()); + } + + Page responsePage = page.map(mapper::toResponse); + + return PageResponseDto.of(responsePage); + } +} 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 new file mode 100644 index 0000000..9dc47df --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/domain/mapper/HornBugleMapper.java @@ -0,0 +1,24 @@ +package until.the.eternity.hornBugle.domain.mapper; + +import java.time.Instant; +import org.mapstruct.Context; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; +import until.the.eternity.hornBugle.domain.enums.HornBugleServer; +import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryResponse; +import until.the.eternity.hornBugle.interfaces.rest.dto.response.HornBugleHistoryResponse; + +@Mapper(componentModel = "spring") +public interface HornBugleMapper { + + @Mapping(target = "id", ignore = true) + @Mapping(target = "serverName", expression = "java(server.getServerName())") + @Mapping(target = "dateRegister", expression = "java(registerTime)") + HornBugleWorldHistory toEntity( + OpenApiHornBugleHistoryResponse dto, + @Context HornBugleServer server, + @Context Instant registerTime); + + HornBugleHistoryResponse toResponse(HornBugleWorldHistory entity); +} 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 new file mode 100644 index 0000000..3366706 --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/domain/repository/HornBugleRepositoryPort.java @@ -0,0 +1,21 @@ +package until.the.eternity.hornBugle.domain.repository; + +import java.time.Instant; +import java.util.List; +import java.util.Optional; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; + +public interface HornBugleRepositoryPort { + + void saveAll(List entities); + + Optional findLatestByServerName(String serverName); + + Page findByServerName(String serverName, Pageable pageable); + + Page findAll(Pageable pageable); + + List findByServerNameAndDateSend(String serverName, Instant dateSend); +} 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 new file mode 100644 index 0000000..011986c --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/domain/service/HornBugleDuplicateChecker.java @@ -0,0 +1,114 @@ +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; +import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; +import until.the.eternity.hornBugle.domain.enums.HornBugleServer; +import until.the.eternity.hornBugle.domain.repository.HornBugleRepositoryPort; +import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryResponse; + +@Slf4j +@Component +@RequiredArgsConstructor +public class HornBugleDuplicateChecker { + + private final HornBugleRepositoryPort repository; + + /** + * API 응답 데이터에서 중복을 제거하고 신규 데이터만 반환한다. + * + *

중복 제거 로직: 1. DB에서 해당 서버의 가장 최근 date_send를 조회 2. API 응답 데이터 중 DB의 최신 date_send 이전인 데이터는 모두 + * 제거 3. date_send가 DB의 최신 date_send와 동일한 경우: server_name + character_name + message 기준으로 중복 검증 + * 4. DB 최신 date_send 이후의 데이터는 모두 신규 데이터로 간주 + * + * @param server 서버 정보 + * @param responses API 응답 데이터 (date_send desc 정렬) + * @return 중복이 제거된 신규 데이터 목록 + */ + public List filterDuplicates( + HornBugleServer server, List responses) { + + if (responses == null || responses.isEmpty()) { + return List.of(); + } + + String serverName = server.getServerName(); + Optional latestRecordOpt = + repository.findLatestByServerName(serverName); + + if (latestRecordOpt.isEmpty()) { + log.debug( + "[HornBugle] [{}] No existing data found. All {} responses are new.", + serverName, + responses.size()); + return responses; + } + + Instant latestDateSend = latestRecordOpt.get().getDateSend(); + log.debug("[HornBugle] [{}] Latest date_send in DB: {}", serverName, latestDateSend); + + // 동일한 date_send를 가진 기존 데이터들의 (character_name + message) 조합을 조회 + Set existingKeys = buildExistingKeysForDateSend(serverName, latestDateSend); + + List filtered = + responses.stream() + .filter( + response -> { + Instant responseDateSend = response.dateSend(); + + // 최신 date_send보다 이전인 데이터는 제거 + if (responseDateSend.isBefore(latestDateSend)) { + return false; + } + + // date_send가 동일한 경우: 중복 키 체크 + if (responseDateSend.equals(latestDateSend)) { + String key = + buildDuplicateKey( + response.characterName(), + response.message()); + return !existingKeys.contains(key); + } + + // 최신 date_send보다 이후인 데이터는 신규 + return true; + }) + .toList(); + + log.info( + "[HornBugle] [{}] Filtered {} duplicates. {} new records to save.", + serverName, + responses.size() - filtered.size(), + filtered.size()); + + return filtered; + } + + private Set buildExistingKeysForDateSend(String serverName, Instant dateSend) { + List existingRecords = + repository.findByServerNameAndDateSend(serverName, dateSend); + + Set keys = new HashSet<>(); + for (HornBugleWorldHistory record : existingRecords) { + keys.add(buildDuplicateKey(record.getCharacterName(), record.getMessage())); + } + + log.debug( + "[HornBugle] [{}] Found {} existing records with date_send={}", + serverName, + keys.size(), + dateSend); + + return keys; + } + + private String buildDuplicateKey(String characterName, String message) { + return characterName + "|" + message; + } +} diff --git a/src/main/java/until/the/eternity/hornBugle/infrastructure/client/HornBugleClient.java b/src/main/java/until/the/eternity/hornBugle/infrastructure/client/HornBugleClient.java new file mode 100644 index 0000000..0a05072 --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/client/HornBugleClient.java @@ -0,0 +1,49 @@ +package until.the.eternity.hornBugle.infrastructure.client; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; +import until.the.eternity.hornBugle.domain.enums.HornBugleServer; +import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryListResponse; + +@Slf4j +@Component +@RequiredArgsConstructor +public class HornBugleClient { + + private final WebClient openApiWebClient; + + /** + * 서버별 뿔피리 히스토리 조회. + * + * @param server 조회할 서버 + * @return 응답 DTO를 담은 Mono, 호출 실패 시 Mono.empty() + */ + public Mono fetchHornBugleHistory(HornBugleServer server) { + log.info( + "[SCHEDULE] [HornBugle] Calling Nexon Open API Horn Bugle History API for server='{}'", + server.getServerName()); + + return openApiWebClient + .get() + .uri( + uriBuilder -> + uriBuilder + .path("/horn-bugle-world/history") + .queryParam("server_name", server.getEncodedServerName()) + .build()) + .retrieve() + .bodyToMono(OpenApiHornBugleHistoryListResponse.class) + .onErrorResume( + throwable -> { + log.warn( + "[SCHEDULE] [HornBugle] Failed to fetch Nexon Open API Horn Bugle History API for server='{}': error='{}', message='{}'", + server.getServerName(), + throwable.toString(), + throwable.getMessage()); + return Mono.empty(); + }); + } +} 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 new file mode 100644 index 0000000..65585cf --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java @@ -0,0 +1,28 @@ +package until.the.eternity.hornBugle.infrastructure.persistence; + +import java.time.Instant; +import java.util.List; +import java.util.Optional; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; +import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; + +@Repository +public interface HornBugleJpaRepository extends JpaRepository { + + @Query( + """ + SELECT h FROM HornBugleWorldHistory h + WHERE h.serverName = :serverName + ORDER BY h.dateSend DESC + LIMIT 1 + """) + Optional findLatestByServerName(String serverName); + + Page findByServerName(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 new file mode 100644 index 0000000..8f7319f --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java @@ -0,0 +1,62 @@ +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.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; +import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; +import until.the.eternity.hornBugle.domain.repository.HornBugleRepositoryPort; + +@Repository +@RequiredArgsConstructor +public class HornBugleRepositoryPortImpl implements HornBugleRepositoryPort { + + private final HornBugleJpaRepository jpaRepository; + private final EntityManager em; + + @Value("${spring.jpa.properties.hibernate.jdbc.batch_size:500}") + private int batchSize; + + @Override + @Transactional + public void saveAll(List entities) { + if (entities.isEmpty()) { + return; + } + + for (int i = 0; i < entities.size(); i += batchSize) { + int toIndex = Math.min(i + batchSize, entities.size()); + List subList = entities.subList(i, toIndex); + jpaRepository.saveAll(subList); + em.flush(); + em.clear(); + } + } + + @Override + public Optional findLatestByServerName(String serverName) { + return jpaRepository.findLatestByServerName(serverName); + } + + @Override + public Page findByServerName(String serverName, Pageable pageable) { + return jpaRepository.findByServerName(serverName, pageable); + } + + @Override + public Page findAll(Pageable pageable) { + return jpaRepository.findAll(pageable); + } + + @Override + public List findByServerNameAndDateSend( + String serverName, Instant dateSend) { + return jpaRepository.findByServerNameAndDateSend(serverName, 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 new file mode 100644 index 0000000..4090a2d --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryListResponse.java @@ -0,0 +1,8 @@ +package until.the.eternity.hornBugle.interfaces.external.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; + +public record OpenApiHornBugleHistoryListResponse( + @JsonProperty("horn_bugle_world_history") + List hornBugleWorldHistory) {} 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 new file mode 100644 index 0000000..1d3af2c --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryResponse.java @@ -0,0 +1,14 @@ +package until.the.eternity.hornBugle.interfaces.external.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.time.Instant; + +public record OpenApiHornBugleHistoryResponse( + @JsonProperty("character_name") String characterName, + @JsonProperty("message") String message, + @JsonProperty("date_send") + @JsonFormat( + shape = JsonFormat.Shape.STRING, + pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") + Instant dateSend) {} diff --git a/src/main/java/until/the/eternity/hornBugle/interfaces/rest/dto/request/HornBuglePageRequestDto.java b/src/main/java/until/the/eternity/hornBugle/interfaces/rest/dto/request/HornBuglePageRequestDto.java new file mode 100644 index 0000000..06adcf3 --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/interfaces/rest/dto/request/HornBuglePageRequestDto.java @@ -0,0 +1,35 @@ +package until.the.eternity.hornBugle.interfaces.rest.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; + +@Schema(description = "뿔피리 히스토리 페이지 요청 파라미터") +public record HornBuglePageRequestDto( + @Schema(description = "요청할 페이지 번호 (1부터 시작)", example = "1") @Min(1) Integer page, + @Schema(description = "페이지당 항목 수 (최소 1, 최대 50)", example = "20") @Min(1) @Max(50) + Integer size) { + + private static final int DEFAULT_PAGE = 1; + private static final int DEFAULT_SIZE = 20; + private static final String SORT_BY_DATE_SEND = "dateSend"; + + public Pageable toPageable() { + int resolvedPage = this.page != null ? this.page - 1 : DEFAULT_PAGE - 1; + int resolvedSize = this.size != null ? this.size : DEFAULT_SIZE; + + return PageRequest.of( + resolvedPage, resolvedSize, Sort.by(Sort.Direction.DESC, SORT_BY_DATE_SEND)); + } + + public int getResolvedPage() { + return this.page != null ? this.page : DEFAULT_PAGE; + } + + public int getResolvedSize() { + return this.size != null ? this.size : DEFAULT_SIZE; + } +} 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 new file mode 100644 index 0000000..cd47b1c --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/interfaces/rest/dto/response/HornBugleHistoryResponse.java @@ -0,0 +1,18 @@ +package until.the.eternity.hornBugle.interfaces.rest.dto.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.Instant; + +@Schema(description = "뿔피리 히스토리 응답") +public record HornBugleHistoryResponse( + @Schema(description = "고유 식별자", example = "1") Long id, + @Schema(description = "서버 이름", example = "류트") String serverName, + @Schema(description = "캐릭터 이름", example = "홍길동") String characterName, + @Schema(description = "메시지 내용", example = "안녕하세요") String message, + @Schema(description = "발화 시각 (UTC)", example = "2026-01-21T11:25:43.000Z") + @JsonFormat(shape = JsonFormat.Shape.STRING) + Instant dateSend, + @Schema(description = "수집 시각 (UTC)", example = "2026-01-21T11:30:00.000Z") + @JsonFormat(shape = JsonFormat.Shape.STRING) + Instant dateRegister) {} From 31ae8429bf7eb11977e287cc37d220cb1b65dc86 Mon Sep 17 00:00:00 2001 From: dev-ant Date: Wed, 21 Jan 2026 21:11:29 +0900 Subject: [PATCH 03/10] =?UTF-8?q?feat:=20hornbugle=20controller=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduler/HornBugleScheduler.java | 175 ++++++++++++++++++ .../rest/controller/HornBugleController.java | 43 +++++ src/main/resources/application.yml | 4 + 3 files changed, 222 insertions(+) create mode 100644 src/main/java/until/the/eternity/hornBugle/application/scheduler/HornBugleScheduler.java create mode 100644 src/main/java/until/the/eternity/hornBugle/interfaces/rest/controller/HornBugleController.java 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 new file mode 100644 index 0000000..bc50e1d --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/application/scheduler/HornBugleScheduler.java @@ -0,0 +1,175 @@ +package until.the.eternity.hornBugle.application.scheduler; + +import java.util.ArrayList; +import java.util.List; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import until.the.eternity.hornBugle.application.service.HornBugleService; +import until.the.eternity.hornBugle.domain.enums.HornBugleServer; +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; + +@Slf4j +@Component +@RequiredArgsConstructor +public class HornBugleScheduler { + + private final HornBugleClient client; + private final HornBugleService service; + + private static final long RATE_LIMIT_DELAY_MS = 1000L; + + @Value("${openapi.horn-bugle.max-retries:3}") + private int maxRetries; + + @Value("${openapi.horn-bugle.retry-delay-ms:2000}") + private long retryDelayMs; + + @Scheduled(cron = "${openapi.horn-bugle.cron:0 */5 * * * *}", zone = "Asia/Seoul") + public void fetchAndSaveHornBugleHistoryAll() { + log.info("[HornBugle] Starting Horn Bugle World History scheduler"); + + HornBugleServer[] servers = HornBugleServer.values(); + int totalSavedCount = 0; + List failedServers = new ArrayList<>(); + + for (int i = 0; i < servers.length; i++) { + HornBugleServer server = servers[i]; + int savedCount = fetchAndSaveForServer(server); + + if (savedCount < 0) { + failedServers.add(server); + } else { + totalSavedCount += savedCount; + } + + // Rate Limit: 마지막 서버가 아니면 1초 대기 + if (i < servers.length - 1) { + waitForRateLimit(); + } + } + + // 실패한 서버들 재시도 + if (!failedServers.isEmpty()) { + log.info( + "[HornBugle] Retrying {} failed servers: {}", + failedServers.size(), + failedServers); + totalSavedCount += retryFailedServers(failedServers); + } + + log.info( + "[HornBugle] Horn Bugle World History scheduler completed. Total saved: {}", + totalSavedCount); + } + + /** + * 서버별 API 호출 및 저장 + * + * @param server 서버 + * @return 저장된 건수 (-1: 실패) + */ + private int fetchAndSaveForServer(HornBugleServer server) { + try { + OpenApiHornBugleHistoryListResponse response = + client.fetchHornBugleHistory(server).block(); + + if (response == null || response.hornBugleWorldHistory() == null) { + log.warn("[HornBugle] [{}] Empty response from API", server.getServerName()); + return 0; + } + + List histories = response.hornBugleWorldHistory(); + int savedCount = service.saveAll(server, histories); + + log.info( + "[HornBugle] [{}] Fetched {} records, saved {} new records", + server.getServerName(), + histories.size(), + savedCount); + + return savedCount; + } catch (Exception e) { + log.error( + "[HornBugle] [{}] Failed to fetch and save: {}", + server.getServerName(), + e.getMessage(), + e); + return -1; + } + } + + /** + * 실패한 서버들 재시도 + * + * @param failedServers 실패한 서버 목록 + * @return 재시도로 저장된 총 건수 + */ + private int retryFailedServers(List failedServers) { + int totalSavedCount = 0; + + for (HornBugleServer server : failedServers) { + int savedCount = retryForServer(server); + if (savedCount >= 0) { + totalSavedCount += savedCount; + } + } + + return totalSavedCount; + } + + /** + * 단일 서버 재시도 (지수 백오프) + * + * @param server 서버 + * @return 저장된 건수 (-1: 최종 실패) + */ + private int retryForServer(HornBugleServer server) { + for (int attempt = 1; attempt <= maxRetries; attempt++) { + try { + long delay = retryDelayMs * (long) Math.pow(2, attempt - 1); + log.info( + "[HornBugle] [{}] Retry attempt {}/{}, waiting {}ms", + server.getServerName(), + attempt, + maxRetries, + delay); + + Thread.sleep(delay); + + int savedCount = fetchAndSaveForServer(server); + if (savedCount >= 0) { + log.info( + "[HornBugle] [{}] Retry successful on attempt {}", + server.getServerName(), + attempt); + return savedCount; + } + } catch (InterruptedException e) { + log.error("[HornBugle] [{}] Retry interrupted", server.getServerName(), e); + Thread.currentThread().interrupt(); + return -1; + } + } + + log.error( + "[HornBugle] [{}] All {} retry attempts failed", + server.getServerName(), + maxRetries); + return -1; + } + + private void waitForRateLimit() { + try { + log.debug("[HornBugle] Waiting {}ms for rate limit", RATE_LIMIT_DELAY_MS); + Thread.sleep(RATE_LIMIT_DELAY_MS); + } catch (InterruptedException e) { + log.error("[HornBugle] Rate limit wait interrupted", e); + Thread.currentThread().interrupt(); + } + } +} diff --git a/src/main/java/until/the/eternity/hornBugle/interfaces/rest/controller/HornBugleController.java b/src/main/java/until/the/eternity/hornBugle/interfaces/rest/controller/HornBugleController.java new file mode 100644 index 0000000..1d762c2 --- /dev/null +++ b/src/main/java/until/the/eternity/hornBugle/interfaces/rest/controller/HornBugleController.java @@ -0,0 +1,43 @@ +package until.the.eternity.hornBugle.interfaces.rest.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import until.the.eternity.common.response.PageResponseDto; +import until.the.eternity.hornBugle.application.scheduler.HornBugleScheduler; +import until.the.eternity.hornBugle.application.service.HornBugleService; +import until.the.eternity.hornBugle.interfaces.rest.dto.request.HornBuglePageRequestDto; +import until.the.eternity.hornBugle.interfaces.rest.dto.response.HornBugleHistoryResponse; + +@RequestMapping("/horn-bugle") +@RestController +@RequiredArgsConstructor +@Tag(name = "뿔피리 히스토리 API", description = "거대한 외침의 뿔피리 내역 API") +public class HornBugleController { + + private final HornBugleService service; + private final HornBugleScheduler scheduler; + + @GetMapping + @Operation(summary = "뿔피리 히스토리 조회", description = "거대한 외침의 뿔피리 내역을 조회합니다. 서버별 또는 전체 조회가 가능합니다.") + public ResponseEntity> search( + @Parameter(description = "서버 이름 (류트, 만돌린, 하프, 울프). 미입력시 전체 조회") + @RequestParam(required = false) + String serverName, + @ParameterObject @ModelAttribute @Valid HornBuglePageRequestDto pageRequest) { + PageResponseDto result = service.search(serverName, pageRequest); + return ResponseEntity.ok(result); + } + + @PostMapping("/batch") + @Operation(summary = "뿔피리 히스토리 배치 실행", description = "모든 서버의 거대한 외침의 뿔피리 내역을 수집하여 저장합니다.") + public ResponseEntity triggerBatch() { + scheduler.fetchAndSaveHornBugleHistoryAll(); + return ResponseEntity.ok().build(); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 976d59a..5892cbf 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -89,6 +89,10 @@ openapi: cron: ${AUCTION_HISTORY_CRON} min-price: cron: ${AUCTION_HISTORY_MIN_PRICE_CRON} + horn-bugle: + cron: ${HORN_BUGLE_CRON:0 */5 * * * *} + max-retries: ${HORN_BUGLE_MAX_RETRIES:3} + retry-delay-ms: ${HORN_BUGLE_RETRY_DELAY_MS:2000} statistics: previous-day: From eb7dec84290d1dfa6b9c67ebb1d9510f54d4d2b9 Mon Sep 17 00:00:00 2001 From: dev-ant Date: Wed, 21 Jan 2026 21:38:04 +0900 Subject: [PATCH 04/10] =?UTF-8?q?fix:=20hornbugle=20expression=EC=97=90?= =?UTF-8?q?=EC=84=9C=20mapstrcut=20context=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/until/the/eternity/config/SecurityConfig.java | 5 ++++- .../eternity/hornBugle/domain/mapper/HornBugleMapper.java | 7 ++----- .../hornBugle/infrastructure/client/HornBugleClient.java | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/until/the/eternity/config/SecurityConfig.java b/src/main/java/until/the/eternity/config/SecurityConfig.java index 62c0af1..52f6b9b 100644 --- a/src/main/java/until/the/eternity/config/SecurityConfig.java +++ b/src/main/java/until/the/eternity/config/SecurityConfig.java @@ -42,7 +42,10 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti // TODO: API endpoint 정리 후 matcher 수정 // TODO: 권한 관련 기능 개발 완료 후 hasRole 추가 .requestMatchers( - "/api/**", "/auction-history/**", "/statistics/**") + "/api/**", + "/auction-history/**", + "/statistics/**", + "/horn-bugle/**") .permitAll() // 나머지 요청은 인증 필요 .anyRequest() 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 9dc47df..ba0c56e 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,7 +1,6 @@ package until.the.eternity.hornBugle.domain.mapper; import java.time.Instant; -import org.mapstruct.Context; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; @@ -14,11 +13,9 @@ public interface HornBugleMapper { @Mapping(target = "id", ignore = true) @Mapping(target = "serverName", expression = "java(server.getServerName())") - @Mapping(target = "dateRegister", expression = "java(registerTime)") + @Mapping(target = "dateRegister", source = "registerTime") HornBugleWorldHistory toEntity( - OpenApiHornBugleHistoryResponse dto, - @Context HornBugleServer server, - @Context Instant registerTime); + OpenApiHornBugleHistoryResponse dto, HornBugleServer server, Instant registerTime); HornBugleHistoryResponse toResponse(HornBugleWorldHistory entity); } diff --git a/src/main/java/until/the/eternity/hornBugle/infrastructure/client/HornBugleClient.java b/src/main/java/until/the/eternity/hornBugle/infrastructure/client/HornBugleClient.java index 0a05072..33d9fae 100644 --- a/src/main/java/until/the/eternity/hornBugle/infrastructure/client/HornBugleClient.java +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/client/HornBugleClient.java @@ -32,7 +32,7 @@ public Mono fetchHornBugleHistory(HornBugle uriBuilder -> uriBuilder .path("/horn-bugle-world/history") - .queryParam("server_name", server.getEncodedServerName()) + .queryParam("server_name", server.getServerName()) .build()) .retrieve() .bodyToMono(OpenApiHornBugleHistoryListResponse.class) From 6984b62c636a26c6f5dcdf21cfbae369f5982f91 Mon Sep 17 00:00:00 2001 From: Sanghyun Yi Date: Wed, 21 Jan 2026 23:49:55 +0900 Subject: [PATCH 05/10] =?UTF-8?q?feat:=20logging=20xml=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EC=97=90=20spring=20local=20profile=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose-local.yml | 16 ++++++++-------- .../client/HornBugleClient.java | 19 ++++++++++++++----- .../rest/controller/HornBugleController.java | 11 ++++++++++- .../resources/logback/logback-display.xml | 3 +++ 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/docker-compose-local.yml b/docker-compose-local.yml index 4c99268..a79cadb 100644 --- a/docker-compose-local.yml +++ b/docker-compose-local.yml @@ -50,15 +50,15 @@ services: # === JVM Configuration (Local - 경량 개발용) === # Heap: 256m~512m, Non-Heap: 256m, Total: ~768m JAVA_OPTS: >- - -Xms${JAVA_OPTS_XMS:-256m} - -Xmx${JAVA_OPTS_XMX:-512m} - -XX:MaxMetaspaceSize=${JAVA_OPTS_MAX_METASPACE_SIZE:-150m} - -XX:ReservedCodeCacheSize=${JAVA_OPTS_RESERVED_CODE_CACHE_SIZE:-48m} - -XX:MaxDirectMemorySize=${JAVA_OPTS_MAX_DIRECT_MEMORY_SIZE:-64m} - -Xss${JAVA_OPTS_XSS:-512k} + -Xms${JAVA_OPTS_XMS:-512m} + -Xmx${JAVA_OPTS_XMX:-1024m} + -XX:MaxMetaspaceSize=${JAVA_OPTS_MAX_METASPACE_SIZE:-300m} + -XX:ReservedCodeCacheSize=${JAVA_OPTS_RESERVED_CODE_CACHE_SIZE:-96m} + -XX:MaxDirectMemorySize=${JAVA_OPTS_MAX_DIRECT_MEMORY_SIZE:-128m} + -Xss${JAVA_OPTS_XSS:-1024k} -XX:+UseG1GC - -XX:MaxGCPauseMillis=${JAVA_OPTS_MAX_GC_PAUSE_MILLIS:-200} - -XX:G1HeapRegionSize=${JAVA_OPTS_G1_HEAP_REGION_SIZE:-2m} + -XX:MaxGCPauseMillis=${JAVA_OPTS_MAX_GC_PAUSE_MILLIS:-400} + -XX:G1HeapRegionSize=${JAVA_OPTS_G1_HEAP_REGION_SIZE:-4m} -XX:InitiatingHeapOccupancyPercent=${JAVA_OPTS_INITIATING_HEAP_OCCUPANCY_PERCENT:-45} -XX:+TieredCompilation -XX:TieredStopAtLevel=${JAVA_OPTS_TIERED_STOP_AT_LEVEL:-2} diff --git a/src/main/java/until/the/eternity/hornBugle/infrastructure/client/HornBugleClient.java b/src/main/java/until/the/eternity/hornBugle/infrastructure/client/HornBugleClient.java index 33d9fae..579793b 100644 --- a/src/main/java/until/the/eternity/hornBugle/infrastructure/client/HornBugleClient.java +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/client/HornBugleClient.java @@ -23,7 +23,7 @@ public class HornBugleClient { */ public Mono fetchHornBugleHistory(HornBugleServer server) { log.info( - "[SCHEDULE] [HornBugle] Calling Nexon Open API Horn Bugle History API for server='{}'", + "[HornBugle] Calling Nexon Open API Horn Bugle History API for server='{}'", server.getServerName()); return openApiWebClient @@ -36,13 +36,22 @@ public Mono fetchHornBugleHistory(HornBugle .build()) .retrieve() .bodyToMono(OpenApiHornBugleHistoryListResponse.class) + .doOnNext( + response -> + log.debug( + "[HornBugle] [{}] API response received: {} records", + server.getServerName(), + response.hornBugleWorldHistory() != null + ? response.hornBugleWorldHistory().size() + : 0)) .onErrorResume( throwable -> { - log.warn( - "[SCHEDULE] [HornBugle] Failed to fetch Nexon Open API Horn Bugle History API for server='{}': error='{}', message='{}'", + log.error( + "[HornBugle] Failed to fetch Nexon Open API Horn Bugle History API for server='{}': error='{}', message='{}'", server.getServerName(), - throwable.toString(), - throwable.getMessage()); + throwable.getClass().getSimpleName(), + throwable.getMessage(), + throwable); return Mono.empty(); }); } diff --git a/src/main/java/until/the/eternity/hornBugle/interfaces/rest/controller/HornBugleController.java b/src/main/java/until/the/eternity/hornBugle/interfaces/rest/controller/HornBugleController.java index 1d762c2..60d7efd 100644 --- a/src/main/java/until/the/eternity/hornBugle/interfaces/rest/controller/HornBugleController.java +++ b/src/main/java/until/the/eternity/hornBugle/interfaces/rest/controller/HornBugleController.java @@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -14,6 +15,7 @@ import until.the.eternity.hornBugle.interfaces.rest.dto.request.HornBuglePageRequestDto; import until.the.eternity.hornBugle.interfaces.rest.dto.response.HornBugleHistoryResponse; +@Slf4j @RequestMapping("/horn-bugle") @RestController @RequiredArgsConstructor @@ -37,7 +39,14 @@ public ResponseEntity> search( @PostMapping("/batch") @Operation(summary = "뿔피리 히스토리 배치 실행", description = "모든 서버의 거대한 외침의 뿔피리 내역을 수집하여 저장합니다.") public ResponseEntity triggerBatch() { - scheduler.fetchAndSaveHornBugleHistoryAll(); + log.info("[HornBugle] Batch API triggered"); + try { + scheduler.fetchAndSaveHornBugleHistoryAll(); + log.info("[HornBugle] Batch API completed successfully"); + } catch (Exception e) { + log.error("[HornBugle] Batch API failed: {}", e.getMessage(), e); + throw e; + } return ResponseEntity.ok().build(); } } diff --git a/src/main/resources/logback/logback-display.xml b/src/main/resources/logback/logback-display.xml index a91f49a..bb9dbae 100644 --- a/src/main/resources/logback/logback-display.xml +++ b/src/main/resources/logback/logback-display.xml @@ -6,6 +6,9 @@ + + + From ecae2410bd1d647b194970b647c94c901f1a6ed4 Mon Sep 17 00:00:00 2001 From: Sanghyun Yi Date: Thu, 22 Jan 2026 00:05:44 +0900 Subject: [PATCH 06/10] =?UTF-8?q?fix:=20hornbugle=20data=5Fsend=20UTC=20to?= =?UTF-8?q?=20KST=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../the/eternity/hornBugle/domain/mapper/HornBugleMapper.java | 1 + .../external/dto/OpenApiHornBugleHistoryResponse.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) 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 ba0c56e..173f119 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 @@ -14,6 +14,7 @@ public interface HornBugleMapper { @Mapping(target = "id", ignore = true) @Mapping(target = "serverName", expression = "java(server.getServerName())") @Mapping(target = "dateRegister", source = "registerTime") + @Mapping(target = "dateSend", expression = "java(dto.dateSend().plusSeconds(32400))") HornBugleWorldHistory toEntity( OpenApiHornBugleHistoryResponse dto, HornBugleServer server, Instant registerTime); 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 1d3af2c..1a11eb0 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 @@ -10,5 +10,6 @@ public record OpenApiHornBugleHistoryResponse( @JsonProperty("date_send") @JsonFormat( shape = JsonFormat.Shape.STRING, - pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") + pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", + timezone = "UTC") Instant dateSend) {} From ea781ed6b6dadf2ef9f60b5075543bb3f8647b3e Mon Sep 17 00:00:00 2001 From: Sanghyun Yi Date: Thu, 22 Jan 2026 00:06:27 +0900 Subject: [PATCH 07/10] fix: optimize imports --- .../scheduler/AuctionHistoryScheduler.java | 5 +++-- .../service/AuctionHistoryService.java | 3 ++- .../service/fetcher/AuctionHistoryFetcher.java | 5 +++-- .../persister/AuctionHistoryPersister.java | 3 ++- .../domain/entity/AuctionHistory.java | 5 +++-- .../domain/event/AuctionHistorySavedEvent.java | 3 ++- .../domain/mapper/AuctionHistoryMapper.java | 3 ++- .../mapper/OpenApiAuctionHistoryMapper.java | 7 ++++--- .../repository/AuctionHistoryRepositoryPort.java | 7 ++++--- .../service/AuctionHistoryDuplicateChecker.java | 5 +++-- .../fetcher/AuctionHistoryFetcherPort.java | 3 ++- .../persister/AuctionHistoryPersisterPort.java | 3 ++- .../persistence/AuctionHistoryJpaRepository.java | 7 ++++--- .../AuctionHistoryQueryDslRepository.java | 11 ++++++----- .../AuctionHistoryRepositoryPortImpl.java | 7 ++++--- .../dto/OpenApiAuctionHistoryListResponse.java | 1 + .../dto/OpenApiAuctionHistoryResponse.java | 3 ++- .../interfaces/rest/dto/enums/SearchStandard.java | 1 + .../interfaces/rest/dto/enums/SortDirection.java | 1 + .../response/AuctionHistoryDetailResponse.java | 1 + .../auctionitem/domain/entity/AuctionItem.java | 5 +++-- .../domain/entity/AuctionItemOption.java | 3 ++- .../service/AuctionSearchOptionService.java | 5 +++-- .../entity/AuctionSearchOptionMetadata.java | 3 ++- .../AuctionSearchOptionRepositoryPort.java | 3 ++- .../AuctionSearchOptionJpaRepository.java | 3 ++- .../AuctionSearchOptionRepositoryPortImpl.java | 3 ++- .../rest/AuctionSearchOptionController.java | 3 ++- .../rest/dto/response/FieldMetadata.java | 1 + .../response/SearchOptionMetadataResponse.java | 1 + .../the/eternity/common/enums/ItemCategory.java | 5 +++-- .../the/eternity/common/enums/SortDirection.java | 3 ++- .../the/eternity/common/enums/SortField.java | 1 + .../common/exception/GlobalExceptionCode.java | 4 ++-- .../common/exception/GlobalExceptionHandler.java | 4 ++-- .../eternity/common/filter/GatewayAuthFilter.java | 7 ++++--- .../the/eternity/common/response/ApiResponse.java | 3 ++- .../eternity/common/response/PageResponseDto.java | 1 + .../eternity/config/openapi/OpenApiFilters.java | 3 ++- .../config/openapi/OpenApiRetryPolicy.java | 3 ++- .../openapi/OpenApiWebClientProperties.java | 3 ++- .../application/scheduler/HornBugleScheduler.java | 5 +++-- .../application/service/HornBugleService.java | 5 +++-- .../domain/entity/HornBugleWorldHistory.java | 3 ++- .../hornBugle/domain/enums/HornBugleServer.java | 5 +++-- .../hornBugle/domain/mapper/HornBugleMapper.java | 3 ++- .../repository/HornBugleRepositoryPort.java | 7 ++++--- .../domain/service/HornBugleDuplicateChecker.java | 11 ++++++----- .../persistence/HornBugleJpaRepository.java | 7 ++++--- .../persistence/HornBugleRepositoryPortImpl.java | 7 ++++--- .../dto/OpenApiHornBugleHistoryListResponse.java | 1 + .../dto/OpenApiHornBugleHistoryResponse.java | 1 + .../dto/response/HornBugleHistoryResponse.java | 1 + .../application/service/ItemInfoService.java | 9 +++++---- .../iteminfo/domain/entity/ItemInfoId.java | 3 ++- .../domain/exception/ItemInfoExceptionCode.java | 4 ++-- .../domain/repository/ItemInfoRepositoryPort.java | 3 ++- .../persistence/ItemInfoJpaRepository.java | 3 ++- .../persistence/ItemInfoQueryDslRepository.java | 3 ++- .../persistence/ItemInfoRepositoryPortImpl.java | 3 ++- .../rest/controller/ItemInfoController.java | 3 ++- .../rest/dto/response/ItemCategoryResponse.java | 7 ++++--- .../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 +++-- .../repository/ItemOptionInfoRepositoryPort.java | 3 ++- .../ItemOptionInfoRepositoryPortImpl.java | 3 ++- .../rest/controller/ItemOptionInfoController.java | 5 +++-- .../application/service/MetalwareInfoService.java | 3 ++- .../persistence/MetalwareInfoJpaRepository.java | 3 ++- .../MetalwareInfoRepositoryPortImpl.java | 3 ++- .../rest/controller/MetalwareInfoController.java | 3 ++- .../rest/dto/response/MetalwareInfoResponse.java | 3 ++- .../domain/entity/daily/ItemDailyStatistics.java | 3 ++- .../entity/daily/SubcategoryDailyStatistics.java | 3 ++- .../entity/daily/TopCategoryDailyStatistics.java | 3 ++- .../entity/weekly/ItemWeeklyStatistics.java | 3 ++- .../weekly/SubcategoryWeeklyStatistics.java | 3 ++- .../weekly/TopCategoryWeeklyStatistics.java | 3 ++- .../dto/request/DailyStatisticsSearchRequest.java | 3 ++- .../request/ItemDailyStatisticsSearchRequest.java | 3 ++- .../ItemWeeklyStatisticsSearchRequest.java | 3 ++- .../SubcategoryDailyStatisticsSearchRequest.java | 3 ++- .../SubcategoryWeeklyStatisticsSearchRequest.java | 3 ++- .../TopCategoryDailyStatisticsSearchRequest.java | 3 ++- .../TopCategoryWeeklyStatisticsSearchRequest.java | 3 ++- .../dto/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/AuctionHistoryServiceTest.java | 13 +++++++------ .../fetcher/AuctionHistoryFetcherTest.java | 15 ++++++++------- .../persister/AuctionHistoryPersisterTest.java | 13 +++++++------ .../service/AuctionSearchOptionServiceTest.java | 11 ++++++----- .../application/service/ItemInfoServiceTest.java | 13 +++++++------ .../service/MetalwareInfoServiceTest.java | 11 ++++++----- 106 files changed, 270 insertions(+), 167 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 3d29417..2ef0398 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; @@ -16,6 +14,9 @@ import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; 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 cc15bfd..07a7ed6 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.data.domain.Page; @@ -16,6 +15,8 @@ import until.the.eternity.common.request.PageRequestDto; import until.the.eternity.common.response.PageResponseDto; +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 a790ec4..c0774da 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,7 +1,5 @@ package until.the.eternity.auctionhistory.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.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; +import java.util.ArrayList; +import java.util.List; + @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 486008b..9eefb68 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 a001839..201e09a 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.AuctionItemOption; +import java.time.Instant; +import java.util.List; + @Entity @Table(name = "auction_history") @Getter diff --git a/src/main/java/until/the/eternity/auctionhistory/domain/event/AuctionHistorySavedEvent.java b/src/main/java/until/the/eternity/auctionhistory/domain/event/AuctionHistorySavedEvent.java index 213706e..fe8f771 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 aa5d69a..2fd9fb2 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.AuctionItemOption; +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 669e486..c006585 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,14 @@ package until.the.eternity.auctionhistory.domain.mapper; -import java.time.Instant; -import java.time.temporal.ChronoUnit; -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.time.temporal.ChronoUnit; +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 435c970..b94ec7a 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 org.springframework.data.domain.Page; 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; + /** 경매장 거래 내역 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 4db1cc3..5eac2b0 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,7 +1,5 @@ package until.the.eternity.auctionhistory.domain.service; -import java.time.Instant; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -9,6 +7,9 @@ import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; +import java.time.Instant; +import java.util.List; + @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 5b649be..cf00412 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 636f4c2..44f5920 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 b30599b..50fddea 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 d617d57..adc69bb 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.Page; import org.springframework.data.domain.PageImpl; @@ -28,6 +23,12 @@ import until.the.eternity.auctionhistory.interfaces.rest.dto.request.PriceSearchRequest; import until.the.eternity.auctionitemoption.domain.entity.QAuctionItemOption; +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 b020427..8e8882a 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,9 +1,6 @@ package until.the.eternity.auctionhistory.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; @@ -15,6 +12,10 @@ 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; + /** 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 e194aeb..c49a6b2 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 f41eb46..65b73ca 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 ef00567..feb2c35 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 8266606..e6aacf9 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/response/AuctionHistoryDetailResponse.java b/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/response/AuctionHistoryDetailResponse.java index 082c562..d694c60 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/AuctionItem.java b/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionItem.java index 8af14a4..2e9264d 100644 --- a/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionItem.java +++ b/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionItem.java @@ -1,11 +1,12 @@ package until.the.eternity.auctionitem.domain.entity; import jakarta.persistence.*; -import java.time.LocalDateTime; -import java.util.List; import lombok.*; import until.the.eternity.auctionitemoption.domain.entity.AuctionItemOption; +import java.time.LocalDateTime; +import java.util.List; + @Entity @Table(name = "auction_item") @Getter diff --git a/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java b/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java index 7146859..34a42de 100644 --- a/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java +++ b/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java @@ -1,7 +1,6 @@ package until.the.eternity.auctionitemoption.domain.entity; import jakarta.persistence.*; -import java.util.UUID; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -9,6 +8,8 @@ import until.the.eternity.auctionhistory.domain.entity.AuctionHistory; import until.the.eternity.auctionitem.domain.entity.AuctionItem; +import java.util.UUID; + @Entity @Table(name = "auction_item_option") @Getter 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 aec4e46..28e70a2 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.stereotype.Service; @@ -13,6 +11,9 @@ 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; + @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 21a9e82..5356db7 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") @Getter 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 971be29..fe4e89b 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 e707457..c18fd9e 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 850f43f..2440e82 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 8ad6484..0231a36 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,7 +2,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -12,6 +11,8 @@ import until.the.eternity.auctionsearchoption.interfaces.rest.dto.response.SearchOptionMetadataResponse; import until.the.eternity.common.response.ApiResponse; +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 8b8b6ca..43e5d91 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 04581ef..02c318f 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/common/enums/ItemCategory.java b/src/main/java/until/the/eternity/common/enums/ItemCategory.java index 6b8ab07..ca9ee31 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 5e688da..4a79755 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 704d79d..3c26de2 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/exception/GlobalExceptionCode.java b/src/main/java/until/the/eternity/common/exception/GlobalExceptionCode.java index 21c217b..1169e93 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 4cf5af1..bc069d0 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 b293dc4..ef255e9 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; @@ -19,6 +16,10 @@ import until.the.eternity.common.entity.CustomWebAuthenticationDetails; 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 c7f83b1..c7b99b0 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 c142faa..0919ce2 100644 --- a/src/main/java/until/the/eternity/common/response/PageResponseDto.java +++ b/src/main/java/until/the/eternity/common/response/PageResponseDto.java @@ -1,6 +1,7 @@ package until.the.eternity.common.response; import io.swagger.v3.oas.annotations.media.Schema; + import java.util.List; @Schema(description = "페이지 응답 객체") diff --git a/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java b/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java index af0147a..29ca38f 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 8c9d0cf..a419df7 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 9d51746..f8d7904 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/hornBugle/application/scheduler/HornBugleScheduler.java b/src/main/java/until/the/eternity/hornBugle/application/scheduler/HornBugleScheduler.java index bc50e1d..9418055 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,7 +1,5 @@ package until.the.eternity.hornBugle.application.scheduler; -import java.util.ArrayList; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -13,6 +11,9 @@ import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryListResponse; import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryResponse; +import java.util.ArrayList; +import java.util.List; + @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 7253b46..70db2e6 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,7 +1,5 @@ package until.the.eternity.hornBugle.application.service; -import java.time.Instant; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; @@ -17,6 +15,9 @@ 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; + @Slf4j @Service @RequiredArgsConstructor 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 482c857..05ca8df 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 fe361d0..51bd034 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 173f119..c9340bf 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; @@ -8,6 +7,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 3366706..0162f66 100644 --- a/src/main/java/until/the/eternity/hornBugle/domain/repository/HornBugleRepositoryPort.java +++ b/src/main/java/until/the/eternity/hornBugle/domain/repository/HornBugleRepositoryPort.java @@ -1,12 +1,13 @@ package until.the.eternity.hornBugle.domain.repository; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + public interface HornBugleRepositoryPort { void saveAll(List entities); diff --git a/src/main/java/until/the/eternity/hornBugle/domain/service/HornBugleDuplicateChecker.java b/src/main/java/until/the/eternity/hornBugle/domain/service/HornBugleDuplicateChecker.java index 011986c..267b975 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/persistence/HornBugleJpaRepository.java b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java index 65585cf..2fd3bb5 100644 --- a/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java @@ -1,8 +1,5 @@ package until.the.eternity.hornBugle.infrastructure.persistence; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -10,6 +7,10 @@ import org.springframework.stereotype.Repository; import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + @Repository public interface HornBugleJpaRepository extends JpaRepository { diff --git a/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java index 8f7319f..469b376 100644 --- a/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java @@ -1,9 +1,6 @@ package until.the.eternity.hornBugle.infrastructure.persistence; import jakarta.persistence.EntityManager; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; @@ -13,6 +10,10 @@ import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; import until.the.eternity.hornBugle.domain.repository.HornBugleRepositoryPort; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + @Repository @RequiredArgsConstructor public class HornBugleRepositoryPortImpl implements HornBugleRepositoryPort { diff --git a/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryListResponse.java b/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryListResponse.java index 4090a2d..adea275 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 1a11eb0..78f6777 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 cd47b1c..7660ff1 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/iteminfo/application/service/ItemInfoService.java b/src/main/java/until/the/eternity/iteminfo/application/service/ItemInfoService.java index 1c80a41..75ba658 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.data.domain.Page; @@ -22,6 +18,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 d53cd3b..6293e4e 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 a7ffd4c..f870031 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 b540fc6..c9f85ea 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 2be9873..c683846 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 266b230..e13e45f 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 66481ca..497ad7d 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 755b5a2..ddb1c49 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,7 +4,6 @@ import io.swagger.v3.oas.annotations.Parameter; 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; @@ -19,6 +18,8 @@ import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSummaryResponse; import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSyncResponse; +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 065d209..0b1e681 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,13 @@ package until.the.eternity.iteminfo.interfaces.rest.dto.response; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; import lombok.Builder; import lombok.Getter; import until.the.eternity.common.enums.ItemCategory; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + @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 be9d890..7089779 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 98e5cfd..4b9da91 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 e98fce3..02016f5 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 e199d4b..fb86c03 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,12 +1,13 @@ 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; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; 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 1763446..5bbcdaf 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 86bb898..01e4934 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,8 +1,9 @@ package until.the.eternity.itemoptioninfo.domain.repository; -import java.util.List; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; +import java.util.List; + 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 d01cc9e..b523642 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,11 +1,12 @@ package until.the.eternity.itemoptioninfo.infrastructure.persistence; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; import until.the.eternity.itemoptioninfo.domain.repository.ItemOptionInfoRepositoryPort; +import java.util.List; + @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 d74ab49..97bafca 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 @@ -2,8 +2,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -12,6 +10,9 @@ import until.the.eternity.itemoptioninfo.domain.mapper.ItemOptionInfoMapper; 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 499de1a..8135be6 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,12 +1,13 @@ package until.the.eternity.metalwareinfo.application.service; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import until.the.eternity.metalwareinfo.domain.repository.MetalwareInfoRepositoryPort; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; +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 61481a2..202802f 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,9 +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.Query; +import java.util.List; + public interface MetalwareInfoJpaRepository extends JpaRepository { @Query("SELECT m.metalware FROM MetalwareInfoEntity m") 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 9121dd1..3ee9a1a 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 fa26459..271a7e3 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 @@ -2,7 +2,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -10,6 +9,8 @@ import until.the.eternity.metalwareinfo.application.service.MetalwareInfoService; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; +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 a312271..4e8d9d1 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/statistics/domain/entity/daily/ItemDailyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java index 361df9c..f6217f4 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 66e5382..887807d 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 fb3ab7a..bfcb536 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 6970f18..44c2038 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 5756b09..a05c528 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 9201faa..22e4406 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 7908da4..59954a6 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 f6f9152..46b2cf7 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 1360de1..d132153 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 47c2c96..4ff95e0 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 9d7bc71..e024787 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 4b8e25d..382bfef 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 ad1c6b4..2986275 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 a961101..e2485f4 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 05e86f7..7d499d8 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 e27f7f3..b167b92 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 bb82686..5f67f69 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 fd49c2f..df6c9f8 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 ad81f76..01782f0 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 447c242..253bcac 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; @@ -9,6 +7,9 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.daily.ItemDailyStatistics; +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 3bed0b1..e8f72fc 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 3174948..0fff60a 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; @@ -9,6 +7,9 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.daily.TopCategoryDailyStatistics; +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 dc7a301..24f37b0 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; @@ -8,6 +7,8 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.weekly.ItemWeeklyStatistics; +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 fb0986a..ea3542c 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 45a1dad..c2140d5 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/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java b/src/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java index ed2fea8..7ae6dd9 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.request.PageRequestDto; 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 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 a5b89c0..87dbdbc 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,12 +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 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.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; 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 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 0501bc5..63edf84 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/auctionsearchoption/application/service/AuctionSearchOptionServiceTest.java b/src/test/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionServiceTest.java index d92cf74..cbd4257 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/iteminfo/application/service/ItemInfoServiceTest.java b/src/test/java/until/the/eternity/iteminfo/application/service/ItemInfoServiceTest.java index 15a7a7d..6e66a73 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,11 +1,5 @@ package until.the.eternity.iteminfo.application.service; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -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; @@ -25,6 +19,13 @@ 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.assertj.core.api.Assertions.assertThatThrownBy; +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 7de499a..6c56c0d 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,10 +1,5 @@ package until.the.eternity.metalwareinfo.application.service; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -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 +9,12 @@ import until.the.eternity.metalwareinfo.domain.repository.MetalwareInfoRepositoryPort; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + @ExtendWith(MockitoExtension.class) class MetalwareInfoServiceTest { From 70cc01f19475dd4121aa74cd2bec411bb1d7fea5 Mon Sep 17 00:00:00 2001 From: Sanghyun Yi Date: Thu, 22 Jan 2026 00:18:24 +0900 Subject: [PATCH 08/10] =?UTF-8?q?docs:=20README=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 237 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 190 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 60ff1c8..a6c7958 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 🎮 마비노기 경매장 거래 내역 조회 및 통계 서비스 +# 마비노기 경매장 거래 내역 조회 및 통계 서비스 [![codecov](https://codecov.io/gh/devnogi/open-api-batch-server/branch/dev/graph/badge.svg)](https://codecov.io/gh/devnogi/open-api-batch-server) [![License](https://img.shields.io/github/license/devnogi/open-api-batch-server)](LICENSE) @@ -8,65 +8,165 @@
-### 📌 주요 기능 +## 주요 기능 -- **데이터 수집**: 매 1시간 0분 0초에 마비노기 경매장 거래 내역 Open API를 통해 데이터 수집 -- **데이터 분석**: 수집된 데이터를 기반으로 아이템별 최저가, 최고가, 평균가, 거래량 등의 통계 산출 -- **경매장 거래 내역 조회**: 사용자가 아이템의 시세를 조회하고 견적을 받을 수 있는 기능 +### 경매장 데이터 수집 +- 매 1시간마다 마비노기 경매장 거래 내역을 Nexon Open API를 통해 수집 +- 약 70개의 아이템 카테고리에 대한 커서 기반 페이지네이션으로 데이터 수집 +- 카테고리별 요청 간 딜레이 설정으로 API Rate Limit 준수 + +### 뿔피리 데이터 수집 +- 5분마다 거대한 외침의 뿔피리 내역 수집 +- 4개 서버 지원 (류트, 만돌린, 하프, 울프) +- 지수 백오프 기반 재시도 로직 구현 + +### 통계 분석 +- **일간 통계**: 경매 데이터 수집 완료 시 자동 트리거 (이벤트 기반) +- **주간 통계**: 매주 월요일 04:00에 집계 +- **전일 통계**: 매일 00:10에 전일 통계 확정 + +### 데이터 조회 +- 아이템별 최저가, 최고가, 평균가, 거래량 등 시세 조회 +- 서버별/전체 뿔피리 내역 조회 +- 아이템 옵션 필터링 (무기 공격력, 방어구 방어력 등)
-### 🛠 기술 스택 +## 기술 스택 -- **Backend**: Java 21, Spring Boot, Data JPA (Hibernate) -- **Test**: JUnit5, Mockito, K6 -- **Database**: MySQL 8, Redis -- **DevOps**: Docker Compose, Flyway, GitHub Actions -- **Deployment**: Oracle Cloud -- **Document**: Swagger, Notion +| 분류 | 기술 | +|------|------| +| **Backend** | Java 21, Spring Boot 3.5.0, Spring Data JPA, QueryDSL | +| **HTTP Client** | Spring WebFlux (WebClient) | +| **Database** | MySQL 8, Flyway | +| **Test** | JUnit5, Mockito, AssertJ, Testcontainers | +| **Code Quality** | Spotless (Google Java Format AOSP), Jacoco | +| **Documentation** | Swagger, Spring REST Docs | +| **DevOps** | Docker Compose, GitHub Actions | +| **Deployment** | Oracle Cloud |
-### 📈 프로젝트 구조 +## 프로젝트 구조 -- `auction-history/`: 경매장 거래 내역 및 통계 검색 -- `nexon-open-api/`: Open API 호출 및 데이터 수집 -- `statics/`: 배치 작업을 통한 통계 산출 +``` +src/main/java/until/the/eternity/ +├── auctionhistory/ # 경매장 거래 내역 수집 및 검색 +├── hornBugle/ # 뿔피리 내역 수집 및 검색 +├── statistics/ # 일간/주간 통계 집계 +├── iteminfo/ # 아이템 메타데이터 +├── itemoptioninfo/ # 아이템 옵션 정보 +├── metalwareinfo/ # 금속류 아이템 정보 +├── auctionsearchoption/ # 검색 옵션 메타데이터 +├── common/ # 공통 유틸리티, 예외, 필터 +└── config/ # 설정 (Security, QueryDSL, Web, OpenAPI) +``` + +### 아키텍처 (Clean Architecture) +``` +interfaces/ # Controller, DTO, External API Client + └── rest/ # REST API 엔드포인트 + └── external/ # 외부 API 연동 (Nexon Open API) +application/ # Service, Scheduler, Event +domain/ # Entity, Repository Port, Mapper +infrastructure/ # Repository 구현체, JPA +```
-### 💻 for developers +## API 엔드포인트 + +| Endpoint | Method | 설명 | +|----------|--------|------| +| `/auction-history/search` | GET | 경매 내역 검색 (필터 및 페이징) | +| `/auction-history/{id}` | GET | 단일 거래 내역 조회 | +| `/auction-history/batch` | POST | 배치 수동 실행 | +| `/horn-bugle` | GET | 뿔피리 내역 검색 (서버별/전체) | +| `/horn-bugle/batch` | POST | 뿔피리 배치 수동 실행 | +| `/statistics/daily/items` | GET | 일간 아이템 통계 | +| `/statistics/daily/subcategories` | GET | 일간 서브카테고리 통계 | +| `/statistics/daily/top-categories` | GET | 일간 상위카테고리 통계 | +| `/statistics/weekly/items` | GET | 주간 아이템 통계 | +| `/api/item-infos` | GET | 아이템 메타데이터 | +| `/api/v1/item-option-infos` | GET | 아이템 옵션 정보 | +| `/actuator/health` | GET | 헬스체크 | +| `/swagger-ui/index.html` | - | API 문서 | -- **How To Run**: Notion | [프로젝트 실행 방법](https://periwinkle-bridge-1c6.notion.site/How-to-run-2385c107dcf380f993d8e733d664caf9?source=copy_link) -- **API 명세서**: Notion | [API 명세서](https://periwinkle-bridge-1c6.notion.site/API-2195c107dcf380f2a465f9840b5d5dbf?source=copy_link) -- **Git branch 전략**: Git-flow [관련 블로그](https://velog.io/@kw2577/Git-branch-%EC%A0%84%EB%9E%B5) +
+ +## 스케줄러 + +| 스케줄러 | Cron 표현식 | 설명 | +|----------|-------------|------| +| 경매 내역 수집 | `0 0 * * * *` | 매 시 정각 | +| 뿔피리 수집 | `0 */5 * * * *` | 5분마다 | +| 전일 통계 확정 | `0 10 0 * * *` | 매일 00:10 | +| 주간 통계 집계 | `5 0 4 * * MON` | 매주 월요일 04:00 |
-### 🐳 로컬 개발 환경 (Docker) +## 환경 변수 + +### 필수 환경 변수 +```bash +# 서버 +SERVER_PORT=8080 + +# 데이터베이스 +DB_IP=localhost +DB_PORT=3306 +DB_SCHEMA=devnogi +DB_USER=username +DB_PASSWORD=password + +# JWT +JWT_SECRET_KEY=your-secret-key +JWT_ACCESS_TOKEN_VALIDITY=3600000 +JWT_REFRESH_TOKEN_VALIDITY=86400000 + +# Nexon Open API +NEXON_OPEN_API_KEY=your-api-key +``` + +### 선택 환경 변수 +```bash +# 경매 내역 배치 +AUCTION_HISTORY_CRON=0 0 * * * * +AUCTION_HISTORY_DELAY_MS=1000 + +# 뿔피리 배치 +HORN_BUGLE_CRON=0 */5 * * * * +HORN_BUGLE_MAX_RETRIES=3 +HORN_BUGLE_RETRY_DELAY_MS=2000 + +# 통계 +STATISTICS_PREVIOUS_DAY_CRON=0 10 0 * * * +STATISTICS_WEEKLY_CRON=5 0 4 * * MON +``` + +
-로컬에서 코드를 수정하면서 개발할 때는 Docker Hub에 푸시하지 않고 로컬 빌드로 실행할 수 있습니다. +## 로컬 개발 환경 (Docker) -#### 1. 환경 설정 +### 1. 환경 설정 ```bash # .env.local.sample을 복사하여 .env.local 생성 cp .env.local.sample .env.local -# .env.local 파일을 열어서 필요한 값들을 수정 -# - NEXON_OPEN_API_KEY: Nexon Open API 키 입력 -# - DB_PASSWORD: 로컬 MySQL 비밀번호 입력 -# - 기타 필요한 설정 수정 +# .env.local 파일 수정 +# - NEXON_OPEN_API_KEY: Nexon Open API 키 +# - DB_PASSWORD: 로컬 MySQL 비밀번호 ``` -#### 2. 로컬에서 Docker로 실행 +### 2. Docker로 실행 ```bash -# 로컬 코드를 빌드하고 Docker 컨테이너로 실행 -docker-compose -f docker-compose-local.yml up --build +# 빌드 및 실행 +docker-compose -f docker-compose-local.yml --env-file .env.local up --build # 백그라운드 실행 -docker-compose -f docker-compose-local.yml up -d --build +docker-compose -f docker-compose-local.yml --env-file .env.local up -d --build # 로그 확인 docker-compose -f docker-compose-local.yml logs -f spring-app @@ -75,29 +175,72 @@ docker-compose -f docker-compose-local.yml logs -f spring-app docker-compose -f docker-compose-local.yml down ``` -#### 3. 코드 수정 후 재실행 +### 3. 환경별 Docker Compose 파일 + +| 환경 | 파일 | 설명 | +|------|------|------| +| 로컬 개발 | `docker-compose-local.yml` | 로컬 빌드, 낮은 리소스 | +| 개발 서버 | `docker-compose-dev.yml` | 개발 환경 배포 | +| 운영 서버 | `docker-compose-prod.yml` | 운영 환경 배포 | + +
+ +## 빌드 및 테스트 ```bash -# 코드 수정 후 다시 빌드하여 실행 -docker-compose -f docker-compose-local.yml up --build +# 빌드 +./gradlew clean build -# 또는 기존 컨테이너 정리 후 재실행 -docker-compose -f docker-compose-local.yml down -docker-compose -f docker-compose-local.yml up --build +# 테스트 +./gradlew test + +# 코드 포맷팅 +./gradlew spotlessApply + +# 테스트 커버리지 리포트 +./gradlew jacocoTestReport + +# REST Docs 생성 +./gradlew asciidoctor + +# 로컬 실행 +./gradlew bootRun ``` -#### 4. 환경별 실행 방법 +
+ +## API 응답 형식 -| 환경 | Docker Compose 파일 | 설명 | -|------|---------------------|------| -| **로컬 개발** | `docker-compose.local.yml` | 로컬 코드 빌드, 낮은 리소스 사용 | -| **개발/운영 서버** | `docker-compose.yaml` | Docker Hub 이미지 사용 | +```json +{ + "success": true, + "code": "string", + "message": "string", + "data": {}, + "timestamp": "2025-01-01T12:00:00Z" +} +``` + +
-#### 5. 참고사항 +## 개발자 문서 -- **로컬 개발**: 코드 수정 시마다 `--build` 옵션으로 재빌드 필요 -- **메모리 설정**: 로컬 환경은 메모리 사용량이 낮게 설정되어 있음 (512MB) -- **데이터베이스**: `DB_IP=host.docker.internal`로 호스트 머신의 MySQL에 접근 -- **포트**: 기본 8080 포트 사용 (`.env.local`에서 변경 가능) +- **실행 방법**: [Notion - How to run](https://periwinkle-bridge-1c6.notion.site/How-to-run-2385c107dcf380f993d8e733d664caf9) +- **API 명세서**: [Notion - API 명세서](https://periwinkle-bridge-1c6.notion.site/API-2195c107dcf380f2a465f9840b5d5dbf) +- **Git branch 전략**: Git-flow ([관련 블로그](https://velog.io/@kw2577/Git-branch-%EC%A0%84%EB%9E%B5))
+ +## 지원 아이템 카테고리 + +약 70개의 마비노기 아이템 카테고리 지원: +- **전투 장비**: 한손/양손 무기, 검, 도끼, 둔기, 랜스 등 +- **원거리 장비**: 활, 석궁, 총, 수리검, 아틀라틀 +- **마법 장비**: 실린더, 스태프, 완드, 마법서, 오브 +- **방어구**: 중갑/경갑/천옷, 장갑, 신발, 모자, 방패, 로브 +- **악세서리**: 얼굴 장식, 날개, 꼬리, 일반 악세서리 +- **특수 장비**: 악기, 라이프 도구, 마리오네트, 에코스톤, 유물 +- **소모품**: 물약, 음식, 허브, 던전 통행증, 보석, 염료 +- **강화 재료**: 인챈트 스크롤, 마법 가루, 설계도, 악마 스크롤 +- **서적**: 책, 페이지, 마비노벨 +- **구조물**: 의자, 팜 아일랜드 아이템 From 80a2e43a0ea055c321a420e3744b804aa2f4d542 Mon Sep 17 00:00:00 2001 From: dev-ant Date: Fri, 23 Jan 2026 12:43:11 +0900 Subject: [PATCH 09/10] =?UTF-8?q?fix:=20auction=20history=20duplicator=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=A0=9C=EA=B1=B0=20=EC=8B=9C=20date=5Fau?= =?UTF-8?q?ction=5Fbuy,=20auction=5Fbuy=5Fid=20=EB=91=98=20=EB=8B=A4=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95?= 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 | 23 +- .../persister/AuctionHistoryPersister.java | 5 +- .../domain/entity/AuctionHistory.java | 5 +- .../event/AuctionHistorySavedEvent.java | 3 +- .../domain/mapper/AuctionHistoryMapper.java | 3 +- .../mapper/OpenApiAuctionHistoryMapper.java | 7 +- .../AuctionHistoryRepositoryPort.java | 12 +- .../AuctionHistoryDuplicateChecker.java | 89 ++++- .../fetcher/AuctionHistoryFetcherPort.java | 3 +- .../AuctionHistoryPersisterPort.java | 3 +- .../AuctionHistoryJpaRepository.java | 23 +- .../AuctionHistoryQueryDslRepository.java | 11 +- .../AuctionHistoryRepositoryPortImpl.java | 21 +- .../OpenApiAuctionHistoryListResponse.java | 1 - .../dto/OpenApiAuctionHistoryResponse.java | 3 +- .../rest/dto/enums/SearchStandard.java | 1 - .../rest/dto/enums/SortDirection.java | 1 - .../AuctionHistoryDetailResponse.java | 1 - .../domain/entity/AuctionItem.java | 5 +- .../domain/entity/AuctionItemOption.java | 3 +- .../service/AuctionSearchOptionService.java | 5 +- .../entity/AuctionSearchOptionMetadata.java | 3 +- .../AuctionSearchOptionRepositoryPort.java | 3 +- .../AuctionSearchOptionJpaRepository.java | 3 +- ...AuctionSearchOptionRepositoryPortImpl.java | 3 +- .../rest/AuctionSearchOptionController.java | 3 +- .../rest/dto/response/FieldMetadata.java | 1 - .../SearchOptionMetadataResponse.java | 1 - .../eternity/common/enums/ItemCategory.java | 5 +- .../eternity/common/enums/SortDirection.java | 3 +- .../the/eternity/common/enums/SortField.java | 1 - .../common/exception/GlobalExceptionCode.java | 4 +- .../exception/GlobalExceptionHandler.java | 4 +- .../common/filter/GatewayAuthFilter.java | 7 +- .../eternity/common/response/ApiResponse.java | 3 +- .../common/response/PageResponseDto.java | 1 - .../config/openapi/OpenApiFilters.java | 3 +- .../config/openapi/OpenApiRetryPolicy.java | 3 +- .../openapi/OpenApiWebClientProperties.java | 3 +- .../scheduler/HornBugleScheduler.java | 5 +- .../application/service/HornBugleService.java | 5 +- .../domain/entity/HornBugleWorldHistory.java | 3 +- .../domain/enums/HornBugleServer.java | 5 +- .../domain/mapper/HornBugleMapper.java | 3 +- .../repository/HornBugleRepositoryPort.java | 7 +- .../service/HornBugleDuplicateChecker.java | 11 +- .../persistence/HornBugleJpaRepository.java | 7 +- .../HornBugleRepositoryPortImpl.java | 7 +- .../OpenApiHornBugleHistoryListResponse.java | 1 - .../dto/OpenApiHornBugleHistoryResponse.java | 1 - .../response/HornBugleHistoryResponse.java | 1 - .../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 | 3 +- .../dto/response/ItemCategoryResponse.java | 7 +- .../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 | 3 +- .../ItemOptionInfoRepositoryPortImpl.java | 3 +- .../controller/ItemOptionInfoController.java | 5 +- .../service/MetalwareInfoService.java | 3 +- .../MetalwareInfoJpaRepository.java | 3 +- .../MetalwareInfoRepositoryPortImpl.java | 3 +- .../controller/MetalwareInfoController.java | 3 +- .../dto/response/MetalwareInfoResponse.java | 3 +- .../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/AuctionHistoryServiceTest.java | 13 +- .../fetcher/AuctionHistoryFetcherTest.java | 130 +++++--- .../AuctionHistoryPersisterTest.java | 36 +- .../AuctionHistoryDuplicateCheckerTest.java | 307 ++++++++++++++++++ .../AuctionSearchOptionServiceTest.java | 11 +- .../service/ItemInfoServiceTest.java | 13 +- .../service/MetalwareInfoServiceTest.java | 11 +- 107 files changed, 690 insertions(+), 331 deletions(-) create mode 100644 src/test/java/until/the/eternity/auctionhistory/domain/service/AuctionHistoryDuplicateCheckerTest.java 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 2ef0398..3d29417 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; @@ -14,9 +16,6 @@ import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; 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 07a7ed6..cc15bfd 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.data.domain.Page; @@ -15,8 +16,6 @@ import until.the.eternity.common.request.PageRequestDto; import until.the.eternity.common.response.PageResponseDto; -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 c0774da..4c0e05a 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,9 +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; - @Slf4j @Component @RequiredArgsConstructor @@ -47,15 +47,24 @@ public List fetch(ItemCategory category) { } var batch = response.auctionHistory(); - result.addAll(batch); - if (duplicateChecker.hasDuplicate(batch.getLast())) { + OptionalInt duplicateIndex = duplicateChecker.checkDuplicateInBatch(batch, category); + + if (duplicateIndex.isPresent()) { + int index = duplicateIndex.getAsInt(); + if (index > 0) { + result.addAll(batch.subList(0, index)); + } log.debug( - "> [SCHEDULE] [{}] this fetched data has duplicate data, skip to next item subcategory", - category.getSubCategory()); + "> [SCHEDULE] [{}] duplicate found at index {}, added {} items before duplicate", + category.getSubCategory(), + index, + index); break; } + result.addAll(batch); + cursor = response.nextCursor(); if (cursor == null || cursor.isEmpty()) { 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 9eefb68..8112b80 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 @@ -24,7 +23,7 @@ public List filterOutExisting( List dtoList, ItemCategory category) { List entities = - mapper.toEntityList(duplicateChecker.filterExisting(dtoList), category); + mapper.toEntityList(duplicateChecker.filterExisting(dtoList, category), category); entities.forEach(AuctionHistory::linkItemOptions); 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 201e09a..a001839 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,10 @@ package until.the.eternity.auctionhistory.domain.entity; import jakarta.persistence.*; -import lombok.*; -import until.the.eternity.auctionitemoption.domain.entity.AuctionItemOption; - import java.time.Instant; import java.util.List; +import lombok.*; +import until.the.eternity.auctionitemoption.domain.entity.AuctionItemOption; @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 fe8f771..213706e 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 2fd9fb2..aa5d69a 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.AuctionItemOption; -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 c006585..669e486 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,14 +1,13 @@ package until.the.eternity.auctionhistory.domain.mapper; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +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.time.temporal.ChronoUnit; -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 b94ec7a..ca490fa 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,18 +1,20 @@ 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.Page; 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; - /** 경매장 거래 내역 POJO Repository - Mock 또는 Stub 으로 대체해 단위 테스트 용이성 확보 */ public interface AuctionHistoryRepositoryPort { + record LatestDateWithIds(Instant latestDate, Set existingIds) {} + Page search(AuctionHistorySearchRequest condition, Pageable pageable); Optional findById(String id); @@ -21,5 +23,7 @@ public interface AuctionHistoryRepositoryPort { Optional findLatestDateAuctionBuyBySubCategory(ItemCategory itemCategory); + Optional findLatestDateWithIdsBySubCategory(ItemCategory itemCategory); + List findDistinctItemInfo(); } 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 5eac2b0..70b50dc 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,15 +1,17 @@ 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; import until.the.eternity.auctionhistory.domain.repository.AuctionHistoryRepositoryPort; +import until.the.eternity.auctionhistory.domain.repository.AuctionHistoryRepositoryPort.LatestDateWithIds; import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; -import java.time.Instant; -import java.util.List; - @Slf4j @Component @RequiredArgsConstructor @@ -18,27 +20,84 @@ public class AuctionHistoryDuplicateChecker { private final AuctionHistoryRepositoryPort repository; /** - * 주어진 DTO 컬렉션 안에 이미 저장된 auctionBuyId 가 있는지 추후 거대한 뿔피리 및 실시간 거래 정보 API를 활용하면 공통 component로 변경 고려 + * 배치에서 첫 번째 중복 데이터의 인덱스를 반환합니다. + * + *

중복 판정 로직: + * + *

    + *
  • date_auction_buy < latestDate → 중복 (과거 데이터) + *
  • date_auction_buy == latestDate → auctionBuyId가 DB에 존재하면 중복 + *
  • date_auction_buy > latestDate → 신규 데이터 + *
+ * + * @param batch 검사할 배치 데이터 + * @param category 아이템 카테고리 + * @return 첫 번째 중복 인덱스, 중복이 없으면 empty */ - public boolean hasDuplicate(OpenApiAuctionHistoryResponse lastDto) { - Instant latestDate = getLatestAuctionDateOrMin(lastDto); + public OptionalInt checkDuplicateInBatch( + List batch, ItemCategory category) { + if (batch.isEmpty()) { + return OptionalInt.empty(); + } + + var latestInfo = repository.findLatestDateWithIdsBySubCategory(category); - return lastDto.dateAuctionBuy().isAfter(latestDate); + if (latestInfo.isEmpty()) { + return OptionalInt.empty(); + } + + LatestDateWithIds info = latestInfo.get(); + Instant latestDate = info.latestDate(); + Set existingIds = info.existingIds(); + + for (int i = 0; i < batch.size(); i++) { + OpenApiAuctionHistoryResponse dto = batch.get(i); + if (isDuplicate(dto, latestDate, existingIds)) { + return OptionalInt.of(i); + } + } + + return OptionalInt.empty(); } + /** + * DTO 리스트에서 이미 DB에 존재하는 데이터를 필터링합니다. + * + * @param dtos 필터링할 DTO 리스트 + * @param category 아이템 카테고리 + * @return 새로운 데이터만 포함된 리스트 + */ public List filterExisting( - List dtos) { + List dtos, ItemCategory category) { if (dtos.isEmpty()) { return dtos; } - Instant latestDate = getLatestAuctionDateOrMin(dtos.getFirst()); - return dtos.stream().filter(dto -> dto.dateAuctionBuy().isAfter(latestDate)).toList(); + + var latestInfo = repository.findLatestDateWithIdsBySubCategory(category); + + if (latestInfo.isEmpty()) { + return dtos; + } + + LatestDateWithIds info = latestInfo.get(); + Instant latestDate = info.latestDate(); + Set existingIds = info.existingIds(); + + return dtos.stream().filter(dto -> !isDuplicate(dto, latestDate, existingIds)).toList(); } - private Instant getLatestAuctionDateOrMin(OpenApiAuctionHistoryResponse dto) { - return repository - .findLatestDateAuctionBuyBySubCategory( - ItemCategory.findBySubCategory(dto.itemSubCategory())) - .orElse(Instant.MIN); // 기존에 카테고리가 없는 아이템이면 무조건 저장하기 위해서 Instant.MIN 반환 + private boolean isDuplicate( + OpenApiAuctionHistoryResponse dto, Instant latestDate, Set existingIds) { + Instant dtoDate = dto.dateAuctionBuy(); + + if (dtoDate.isBefore(latestDate)) { + return true; + } + + if (dtoDate.equals(latestDate)) { + return existingIds.contains(dto.auctionBuyId()); + } + + return false; } } 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 cf00412..5b649be 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 44f5920..636f4c2 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 50fddea..4215b1f 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 { @@ -44,4 +43,20 @@ select MAX(a.dateAuctionBuy) from AuctionHistory a """) List findDistinctItemInfo(); + + @Query( + """ + select a.auctionBuyId + from AuctionHistory a + where a.itemTopCategory = :topCategory + and a.itemSubCategory = :subCategory + and a.dateAuctionBuy = ( + select max(a2.dateAuctionBuy) + from AuctionHistory a2 + where a2.itemTopCategory = :topCategory + and a2.itemSubCategory = :subCategory + ) + """) + List findAuctionBuyIdsByLatestDateAndSubCategory( + String topCategory, String subCategory); } 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 adc69bb..d617d57 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.Page; import org.springframework.data.domain.PageImpl; @@ -23,12 +28,6 @@ import until.the.eternity.auctionhistory.interfaces.rest.dto.request.PriceSearchRequest; import until.the.eternity.auctionitemoption.domain.entity.QAuctionItemOption; -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 8e8882a..2b0cdf4 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.Page; @@ -12,10 +16,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.List; -import java.util.Optional; - /** AuctionHistoryRepository Interface 구현체 */ @Repository @RequiredArgsConstructor @@ -60,6 +60,19 @@ public Optional findLatestDateAuctionBuyBySubCategory(ItemCategory item itemCategory.getTopCategory(), itemCategory.getSubCategory()); } + @Override + public Optional findLatestDateWithIdsBySubCategory( + ItemCategory itemCategory) { + Optional latestDate = findLatestDateAuctionBuyBySubCategory(itemCategory); + if (latestDate.isEmpty()) { + return Optional.empty(); + } + List ids = + jpaRepository.findAuctionBuyIdsByLatestDateAndSubCategory( + itemCategory.getTopCategory(), itemCategory.getSubCategory()); + return Optional.of(new LatestDateWithIds(latestDate.get(), new HashSet<>(ids))); + } + @Override public List findDistinctItemInfo() { return jpaRepository.findDistinctItemInfo(); 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 c49a6b2..e194aeb 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 65b73ca..f41eb46 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 feb2c35..ef00567 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 e6aacf9..8266606 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/response/AuctionHistoryDetailResponse.java b/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/response/AuctionHistoryDetailResponse.java index d694c60..082c562 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/AuctionItem.java b/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionItem.java index 2e9264d..8af14a4 100644 --- a/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionItem.java +++ b/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionItem.java @@ -1,11 +1,10 @@ package until.the.eternity.auctionitem.domain.entity; import jakarta.persistence.*; -import lombok.*; -import until.the.eternity.auctionitemoption.domain.entity.AuctionItemOption; - import java.time.LocalDateTime; import java.util.List; +import lombok.*; +import until.the.eternity.auctionitemoption.domain.entity.AuctionItemOption; @Entity @Table(name = "auction_item") diff --git a/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java b/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java index 34a42de..7146859 100644 --- a/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java +++ b/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java @@ -1,6 +1,7 @@ package until.the.eternity.auctionitemoption.domain.entity; import jakarta.persistence.*; +import java.util.UUID; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -8,8 +9,6 @@ import until.the.eternity.auctionhistory.domain.entity.AuctionHistory; import until.the.eternity.auctionitem.domain.entity.AuctionItem; -import java.util.UUID; - @Entity @Table(name = "auction_item_option") @Getter 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 28e70a2..aec4e46 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.stereotype.Service; @@ -11,9 +13,6 @@ 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; - @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 5356db7..21a9e82 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") @Getter 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 fe4e89b..971be29 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 c18fd9e..e707457 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 2440e82..850f43f 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 0231a36..8ad6484 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,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -11,8 +12,6 @@ import until.the.eternity.auctionsearchoption.interfaces.rest.dto.response.SearchOptionMetadataResponse; import until.the.eternity.common.response.ApiResponse; -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 43e5d91..8b8b6ca 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 02c318f..04581ef 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/common/enums/ItemCategory.java b/src/main/java/until/the/eternity/common/enums/ItemCategory.java index ca9ee31..6b8ab07 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 4a79755..5e688da 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 3c26de2..704d79d 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/exception/GlobalExceptionCode.java b/src/main/java/until/the/eternity/common/exception/GlobalExceptionCode.java index 1169e93..21c217b 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 bc069d0..4cf5af1 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 ef255e9..b293dc4 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; @@ -16,10 +19,6 @@ import until.the.eternity.common.entity.CustomWebAuthenticationDetails; 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 c7b99b0..c7f83b1 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/PageResponseDto.java b/src/main/java/until/the/eternity/common/response/PageResponseDto.java index 0919ce2..c142faa 100644 --- a/src/main/java/until/the/eternity/common/response/PageResponseDto.java +++ b/src/main/java/until/the/eternity/common/response/PageResponseDto.java @@ -1,7 +1,6 @@ package until.the.eternity.common.response; import io.swagger.v3.oas.annotations.media.Schema; - import java.util.List; @Schema(description = "페이지 응답 객체") diff --git a/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java b/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java index 29ca38f..af0147a 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 a419df7..8c9d0cf 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 f8d7904..9d51746 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/hornBugle/application/scheduler/HornBugleScheduler.java b/src/main/java/until/the/eternity/hornBugle/application/scheduler/HornBugleScheduler.java index 9418055..bc50e1d 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,7 @@ package until.the.eternity.hornBugle.application.scheduler; +import java.util.ArrayList; +import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -11,9 +13,6 @@ import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryListResponse; import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryResponse; -import java.util.ArrayList; -import java.util.List; - @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 70db2e6..7253b46 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,5 +1,7 @@ package until.the.eternity.hornBugle.application.service; +import java.time.Instant; +import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; @@ -15,9 +17,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; - @Slf4j @Service @RequiredArgsConstructor 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 05ca8df..482c857 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( 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 51bd034..fe361d0 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 c9340bf..173f119 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; @@ -7,8 +8,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 0162f66..3366706 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,11 @@ 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 until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; public interface HornBugleRepositoryPort { 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 267b975..011986c 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/persistence/HornBugleJpaRepository.java b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java index 2fd3bb5..65585cf 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,5 +1,8 @@ package until.the.eternity.hornBugle.infrastructure.persistence; +import java.time.Instant; +import java.util.List; +import java.util.Optional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -7,10 +10,6 @@ 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 469b376..8f7319f 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,6 +1,9 @@ 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; @@ -10,10 +13,6 @@ 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 adea275..4090a2d 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 78f6777..1a11eb0 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 7660ff1..cd47b1c 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/iteminfo/application/service/ItemInfoService.java b/src/main/java/until/the/eternity/iteminfo/application/service/ItemInfoService.java index 75ba658..1c80a41 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.data.domain.Page; @@ -18,11 +22,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 6293e4e..d53cd3b 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 f870031..a7ffd4c 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 c9f85ea..b540fc6 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 c683846..2be9873 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 e13e45f..266b230 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 497ad7d..66481ca 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 ddb1c49..755b5a2 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,7 @@ import io.swagger.v3.oas.annotations.Parameter; 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; @@ -18,8 +19,6 @@ import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSummaryResponse; import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSyncResponse; -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 0b1e681..065d209 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 lombok.Builder; -import lombok.Getter; -import until.the.eternity.common.enums.ItemCategory; - import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import lombok.Builder; +import lombok.Getter; +import until.the.eternity.common.enums.ItemCategory; @Getter @Builder 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 7089779..be9d890 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 4b9da91..98e5cfd 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 02016f5..e98fce3 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 fb86c03..e199d4b 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,13 +1,12 @@ 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; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; 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 5bbcdaf..1763446 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 01e4934..86bb898 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,8 +1,7 @@ package until.the.eternity.itemoptioninfo.domain.repository; -import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; - import java.util.List; +import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; 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 b523642..d01cc9e 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,12 +1,11 @@ package until.the.eternity.itemoptioninfo.infrastructure.persistence; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; import until.the.eternity.itemoptioninfo.domain.repository.ItemOptionInfoRepositoryPort; -import java.util.List; - @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 97bafca..d74ab49 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 @@ -2,6 +2,8 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -10,9 +12,6 @@ import until.the.eternity.itemoptioninfo.domain.mapper.ItemOptionInfoMapper; 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 8135be6..499de1a 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,13 +1,12 @@ package until.the.eternity.metalwareinfo.application.service; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import until.the.eternity.metalwareinfo.domain.repository.MetalwareInfoRepositoryPort; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; -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 202802f..61481a2 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,9 @@ package until.the.eternity.metalwareinfo.infrastructure.persistence; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; -import java.util.List; - public interface MetalwareInfoJpaRepository extends JpaRepository { @Query("SELECT m.metalware FROM MetalwareInfoEntity m") 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 3ee9a1a..9121dd1 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 271a7e3..fa26459 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 @@ -2,6 +2,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -9,8 +10,6 @@ import until.the.eternity.metalwareinfo.application.service.MetalwareInfoService; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; -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 4e8d9d1..a312271 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/statistics/domain/entity/daily/ItemDailyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java index f6217f4..361df9c 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 887807d..66e5382 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 bfcb536..fb3ab7a 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 44c2038..6970f18 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 a05c528..5756b09 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 22e4406..9201faa 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 59954a6..7908da4 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 46b2cf7..f6f9152 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 d132153..1360de1 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 4ff95e0..47c2c96 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 e024787..9d7bc71 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 382bfef..4b8e25d 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 2986275..ad1c6b4 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 e2485f4..a961101 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 7d499d8..05e86f7 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 b167b92..e27f7f3 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 5f67f69..bb82686 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 df6c9f8..fd49c2f 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 01782f0..ad81f76 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 253bcac..447c242 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; @@ -7,9 +9,6 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.daily.ItemDailyStatistics; -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 e8f72fc..3bed0b1 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 0fff60a..3174948 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; @@ -7,9 +9,6 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.daily.TopCategoryDailyStatistics; -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 24f37b0..dc7a301 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; @@ -7,8 +8,6 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.weekly.ItemWeeklyStatistics; -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 ea3542c..fb0986a 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 c2140d5..45a1dad 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/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java b/src/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java index 7ae6dd9..ed2fea8 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,5 +1,11 @@ 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; @@ -21,13 +27,6 @@ import until.the.eternity.common.request.PageRequestDto; 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 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 87dbdbc..e6e76af 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,5 +1,13 @@ 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; @@ -14,14 +22,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 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 { @@ -29,20 +29,18 @@ class AuctionHistoryFetcherTest { @Mock AuctionHistoryDuplicateChecker duplicateChecker; - @InjectMocks AuctionHistoryFetcher fetcher; // 주입할 대상 + @InjectMocks AuctionHistoryFetcher fetcher; - // 더미 데이터 생성 메소드 private OpenApiAuctionHistoryResponse dummy(String id) { return new OpenApiAuctionHistoryResponse( - "페러시우스 타이탄 블레이드", // itemName - "신성한 페러시우스 타이탄 블레이드", // itemDisplayName - ItemCategory.SWORD.getSubCategory(), // itemSubCategory - 1L, // itemCount - 100L, // auctionPricePerUnit - Instant.now(), // dateAuctionBuy - id, // auctionBuyId - null // itemOption은 테스트 결과에 상관이 없으니 null 처리 - ); + "페러시우스 타이탄 블레이드", + "신성한 페러시우스 타이탄 블레이드", + ItemCategory.SWORD.getSubCategory(), + 1L, + 100L, + Instant.now(), + id, + null); } @Nested @@ -52,30 +50,29 @@ class NormalFlow { @Test @DisplayName("모든 페이지를 수집하고 cursor가 null이면 종료한다") void fetchAllPages() { - // given ─ 첫 번째·두 번째 페이지 + // given var page1 = new OpenApiAuctionHistoryListResponse( List.of(dummy("1"), dummy("2")), "cursor-1"); - // 2번째 페이지가 끝이라 Nexon Open API가 null을 반환할 때 var page2 = new OpenApiAuctionHistoryListResponse(List.of(dummy("3")), null); when(client.fetchAuctionHistory(ItemCategory.SWORD, "")).thenReturn(Mono.just(page1)); when(client.fetchAuctionHistory(ItemCategory.SWORD, "cursor-1")) .thenReturn(Mono.just(page2)); - // 기존 데이터와 마지막 페이지 (2페이지) 데이터의 중복이 없다고 가정 - when(duplicateChecker.hasDuplicate(any())).thenReturn(false); + when(duplicateChecker.checkDuplicateInBatch(any(), eq(ItemCategory.SWORD))) + .thenReturn(OptionalInt.empty()); // when var result = fetcher.fetch(ItemCategory.SWORD); - // then - 모든 데이터를 result에 포함 + // then assertThat(result) .hasSize(3) .extracting(OpenApiAuctionHistoryResponse::auctionBuyId) .containsExactly("1", "2", "3"); verify(client, times(2)).fetchAuctionHistory(eq(ItemCategory.SWORD), any()); - verify(duplicateChecker, times(2)).hasDuplicate(any()); + verify(duplicateChecker, times(2)).checkDuplicateInBatch(any(), eq(ItemCategory.SWORD)); } } @@ -84,27 +81,77 @@ void fetchAllPages() { class EarlyBreakFlow { @Test - @DisplayName("duplicateChecker가 true를 반환하면 수집을 중단한다") - void stopOnDuplicate() { - // given - API 호출을 1번만 하고 중복으로 인해 중단 + @DisplayName("첫 배치 첫 항목에서 중복이면 빈 리스트를 반환한다") + void stopOnDuplicateAtFirstItem() { + // given var page1 = new OpenApiAuctionHistoryListResponse( List.of(dummy("1"), dummy("2")), "cursor-1"); when(client.fetchAuctionHistory(ItemCategory.SWORD, "")).thenReturn(Mono.just(page1)); - // when - 기존 데이터와 첫 페이지 데이터의 중복이 있다고 가정 - when(duplicateChecker.hasDuplicate(page1.auctionHistory().getLast())).thenReturn(true); + when(duplicateChecker.checkDuplicateInBatch(page1.auctionHistory(), ItemCategory.SWORD)) + .thenReturn(OptionalInt.of(0)); + // when var result = fetcher.fetch(ItemCategory.SWORD); - // then - 첫 페이지 데이터만 수집하고 종료 - assertThat(result).hasSize(2); - assertThat(result.getFirst().auctionBuyId()).isEqualTo("1"); + // then + assertThat(result).isEmpty(); + verify(client, times(1)).fetchAuctionHistory(ItemCategory.SWORD, ""); + verifyNoMoreInteractions(client); + } + + @Test + @DisplayName("첫 배치 중간에서 중복이면 중복 전까지만 반환한다") + void stopOnDuplicateAtMiddle() { + // given + var batch = List.of(dummy("1"), dummy("2"), dummy("3")); + var page1 = new OpenApiAuctionHistoryListResponse(batch, "cursor-1"); + when(client.fetchAuctionHistory(ItemCategory.SWORD, "")).thenReturn(Mono.just(page1)); + when(duplicateChecker.checkDuplicateInBatch(batch, ItemCategory.SWORD)) + .thenReturn(OptionalInt.of(2)); + + // when + var result = fetcher.fetch(ItemCategory.SWORD); + + // then + assertThat(result) + .hasSize(2) + .extracting(OpenApiAuctionHistoryResponse::auctionBuyId) + .containsExactly("1", "2"); verify(client, times(1)).fetchAuctionHistory(ItemCategory.SWORD, ""); verifyNoMoreInteractions(client); } + @Test + @DisplayName("두 번째 배치에서 중복이면 첫 배치 전체 + 중복 전까지만 반환한다") + void stopOnDuplicateAtSecondBatch() { + // given + var batch1 = List.of(dummy("1"), dummy("2")); + var batch2 = List.of(dummy("3"), dummy("4"), dummy("5")); + var page1 = new OpenApiAuctionHistoryListResponse(batch1, "cursor-1"); + var page2 = new OpenApiAuctionHistoryListResponse(batch2, "cursor-2"); + + when(client.fetchAuctionHistory(ItemCategory.SWORD, "")).thenReturn(Mono.just(page1)); + when(client.fetchAuctionHistory(ItemCategory.SWORD, "cursor-1")) + .thenReturn(Mono.just(page2)); + when(duplicateChecker.checkDuplicateInBatch(batch1, ItemCategory.SWORD)) + .thenReturn(OptionalInt.empty()); + when(duplicateChecker.checkDuplicateInBatch(batch2, ItemCategory.SWORD)) + .thenReturn(OptionalInt.of(1)); + + // when + var result = fetcher.fetch(ItemCategory.SWORD); + + // then + assertThat(result) + .hasSize(3) + .extracting(OpenApiAuctionHistoryResponse::auctionBuyId) + .containsExactly("1", "2", "3"); + verify(client, times(2)).fetchAuctionHistory(eq(ItemCategory.SWORD), any()); + } + @Test @DisplayName("첫 응답이 null(Mono.empty)이면 빈 리스트를 반환한다") void responseNull() { @@ -113,7 +160,7 @@ void responseNull() { var result = fetcher.fetch(ItemCategory.SWORD); assertThat(result).isEmpty(); - verify(duplicateChecker, never()).hasDuplicate(any()); + verify(duplicateChecker, never()).checkDuplicateInBatch(any(), any()); } @Test @@ -126,16 +173,17 @@ void auctionHistoryEmpty() { var result = fetcher.fetch(ItemCategory.SWORD); assertThat(result).isEmpty(); - verify(duplicateChecker, never()).hasDuplicate(any()); + verify(duplicateChecker, never()).checkDuplicateInBatch(any(), any()); } @Test @DisplayName("nextCursor가 빈 문자열이면 수집을 중단한다") void stopWhenNextCursorIsEmptyString() { // given - var page1 = new OpenApiAuctionHistoryListResponse(List.of(dummy("1")), ""); // 커서가 비어있음 + var page1 = new OpenApiAuctionHistoryListResponse(List.of(dummy("1")), ""); when(client.fetchAuctionHistory(ItemCategory.SWORD, "")).thenReturn(Mono.just(page1)); - when(duplicateChecker.hasDuplicate(any())).thenReturn(false); + when(duplicateChecker.checkDuplicateInBatch(any(), eq(ItemCategory.SWORD))) + .thenReturn(OptionalInt.empty()); // when var result = fetcher.fetch(ItemCategory.SWORD); @@ -151,13 +199,13 @@ void stopWhenNextCursorIsEmptyString() { void stopWhenMiddlePageIsEmpty() { // given var page1 = new OpenApiAuctionHistoryListResponse(List.of(dummy("1")), "cursor-1"); - var emptyPage = - new OpenApiAuctionHistoryListResponse(List.of(), "cursor-2"); // 비어있는 페이지 + var emptyPage = new OpenApiAuctionHistoryListResponse(List.of(), "cursor-2"); when(client.fetchAuctionHistory(ItemCategory.SWORD, "")).thenReturn(Mono.just(page1)); when(client.fetchAuctionHistory(ItemCategory.SWORD, "cursor-1")) .thenReturn(Mono.just(emptyPage)); - when(duplicateChecker.hasDuplicate(any())).thenReturn(false); + when(duplicateChecker.checkDuplicateInBatch(any(), eq(ItemCategory.SWORD))) + .thenReturn(OptionalInt.empty()); // when var result = fetcher.fetch(ItemCategory.SWORD); @@ -183,7 +231,7 @@ void stopWhenAuctionHistoryListIsNull() { assertThat(result).isEmpty(); verify(client, times(1)).fetchAuctionHistory(eq(ItemCategory.SWORD), any()); verifyNoMoreInteractions(client); - verify(duplicateChecker, never()).hasDuplicate(any()); + verify(duplicateChecker, never()).checkDuplicateInBatch(any(), any()); } } } 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 63edf84..0d9b8d2 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,5 +1,11 @@ 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; @@ -13,13 +19,6 @@ 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 { @@ -53,7 +52,7 @@ void setUp() { @DisplayName("새로운 경매 기록이 있을 때 필터링된 엔티티 리스트를 반환한다") void filterOutExisting_WhenNewRecordsExist_ShouldReturnFilteredEntities() { // given - when(duplicateChecker.filterExisting(dtoList)).thenReturn(filteredDtoList); + when(duplicateChecker.filterExisting(dtoList, category)).thenReturn(filteredDtoList); when(mapper.toEntityList(filteredDtoList, category)).thenReturn(entities); // when @@ -62,7 +61,7 @@ void filterOutExisting_WhenNewRecordsExist_ShouldReturnFilteredEntities() { // then assertThat(actualEntities).isEqualTo(entities); - verify(duplicateChecker).filterExisting(dtoList); + verify(duplicateChecker).filterExisting(dtoList, category); verify(mapper).toEntityList(filteredDtoList, category); } @@ -70,7 +69,8 @@ void filterOutExisting_WhenNewRecordsExist_ShouldReturnFilteredEntities() { @DisplayName("새로운 경매 기록이 없을 때 빈 리스트를 반환한다") void filterOutExisting_WhenNoNewRecords_ShouldReturnEmptyList() { // given - when(duplicateChecker.filterExisting(dtoList)).thenReturn(Collections.emptyList()); + when(duplicateChecker.filterExisting(dtoList, category)) + .thenReturn(Collections.emptyList()); when(mapper.toEntityList(Collections.emptyList(), category)) .thenReturn(Collections.emptyList()); @@ -80,7 +80,7 @@ void filterOutExisting_WhenNoNewRecords_ShouldReturnEmptyList() { // then assertThat(actualEntities).isEmpty(); - verify(duplicateChecker).filterExisting(dtoList); + verify(duplicateChecker).filterExisting(dtoList, category); verify(mapper).toEntityList(Collections.emptyList(), category); } @@ -89,7 +89,8 @@ void filterOutExisting_WhenNoNewRecords_ShouldReturnEmptyList() { void filterOutExisting_WhenEmptyDtoList_ShouldReturnEmptyList() { // given List emptyList = Collections.emptyList(); - when(duplicateChecker.filterExisting(emptyList)).thenReturn(Collections.emptyList()); + when(duplicateChecker.filterExisting(emptyList, category)) + .thenReturn(Collections.emptyList()); when(mapper.toEntityList(Collections.emptyList(), category)) .thenReturn(Collections.emptyList()); @@ -99,7 +100,7 @@ void filterOutExisting_WhenEmptyDtoList_ShouldReturnEmptyList() { // then assertThat(actualEntities).isEmpty(); - verify(duplicateChecker).filterExisting(emptyList); + verify(duplicateChecker).filterExisting(emptyList, category); verify(mapper).toEntityList(Collections.emptyList(), category); } @@ -111,7 +112,7 @@ void filterOutExisting_WhenDtoListContainsNull_ShouldProcessCorrectly() { List listWithNulls = Arrays.asList(dto1, null); List filteredList = List.of(dto1); - when(duplicateChecker.filterExisting(listWithNulls)).thenReturn(filteredList); + when(duplicateChecker.filterExisting(listWithNulls, category)).thenReturn(filteredList); when(mapper.toEntityList(filteredList, category)).thenReturn(entities); // when @@ -120,7 +121,7 @@ void filterOutExisting_WhenDtoListContainsNull_ShouldProcessCorrectly() { // then assertThat(actualEntities).isEqualTo(entities); - verify(duplicateChecker).filterExisting(listWithNulls); + verify(duplicateChecker).filterExisting(listWithNulls, category); verify(mapper).toEntityList(filteredList, category); } @@ -133,11 +134,10 @@ void filterOutExisting_WhenSomeDtosAreDuplicate_ShouldConvertNonDuplicates() { OpenApiAuctionHistoryResponse dto3 = mock(OpenApiAuctionHistoryResponse.class); List originalList = Arrays.asList(dto1, dto2, dto3); - // dto2는 중복이라 가정하고, dto1, dto3만 남김 List nonDuplicateList = Arrays.asList(dto1, dto3); List expectedEntities = List.of(mock(AuctionHistory.class)); - when(duplicateChecker.filterExisting(originalList)).thenReturn(nonDuplicateList); + when(duplicateChecker.filterExisting(originalList, category)).thenReturn(nonDuplicateList); when(mapper.toEntityList(nonDuplicateList, category)).thenReturn(expectedEntities); // when @@ -146,7 +146,7 @@ void filterOutExisting_WhenSomeDtosAreDuplicate_ShouldConvertNonDuplicates() { // then assertThat(actualEntities).isEqualTo(expectedEntities); - verify(duplicateChecker).filterExisting(originalList); + verify(duplicateChecker).filterExisting(originalList, category); verify(mapper).toEntityList(nonDuplicateList, category); } } 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 new file mode 100644 index 0000000..3c6bf7b --- /dev/null +++ b/src/test/java/until/the/eternity/auctionhistory/domain/service/AuctionHistoryDuplicateCheckerTest.java @@ -0,0 +1,307 @@ +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; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import until.the.eternity.auctionhistory.domain.repository.AuctionHistoryRepositoryPort; +import until.the.eternity.auctionhistory.domain.repository.AuctionHistoryRepositoryPort.LatestDateWithIds; +import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; +import until.the.eternity.common.enums.ItemCategory; + +@ExtendWith(MockitoExtension.class) +class AuctionHistoryDuplicateCheckerTest { + + @Mock AuctionHistoryRepositoryPort repository; + + @InjectMocks AuctionHistoryDuplicateChecker checker; + + private static final ItemCategory CATEGORY = ItemCategory.SWORD; + + private OpenApiAuctionHistoryResponse dto(String id, Instant dateAuctionBuy) { + return new OpenApiAuctionHistoryResponse( + "페러시우스 타이탄 블레이드", + "신성한 페러시우스 타이탄 블레이드", + CATEGORY.getSubCategory(), + 1L, + 100L, + dateAuctionBuy, + id, + null); + } + + @Nested + @DisplayName("checkDuplicateInBatch 테스트") + class CheckDuplicateInBatchTest { + + @Test + @DisplayName("DB에 데이터가 없으면 중복 없음으로 판정") + void noDuplicateWhenNoDataInDb() { + // given + Instant now = Instant.now(); + var batch = List.of(dto("1", now), dto("2", now.minusSeconds(10))); + when(repository.findLatestDateWithIdsBySubCategory(CATEGORY)) + .thenReturn(Optional.empty()); + + // when + OptionalInt result = checker.checkDuplicateInBatch(batch, CATEGORY); + + // then + assertThat(result).isEmpty(); + } + + @Test + @DisplayName("빈 배치이면 중복 없음으로 판정") + void noDuplicateWhenEmptyBatch() { + // given + List batch = List.of(); + + // when + OptionalInt result = checker.checkDuplicateInBatch(batch, CATEGORY); + + // then + assertThat(result).isEmpty(); + } + + @Test + @DisplayName("모든 데이터가 latestDate 이후면 중복 없음") + void noDuplicateWhenAllDataAfterLatestDate() { + // given + Instant latestDate = Instant.parse("2024-01-01T00:00:00Z"); + Instant afterLatest = latestDate.plusSeconds(100); + var batch = List.of(dto("1", afterLatest), dto("2", afterLatest.plusSeconds(10))); + + when(repository.findLatestDateWithIdsBySubCategory(CATEGORY)) + .thenReturn( + Optional.of(new LatestDateWithIds(latestDate, Set.of("existing-1")))); + + // when + OptionalInt result = checker.checkDuplicateInBatch(batch, CATEGORY); + + // then + assertThat(result).isEmpty(); + } + + @Test + @DisplayName("중간에 latestDate 이전 데이터가 있으면 해당 인덱스 반환") + void duplicateFoundWhenDataBeforeLatestDate() { + // given + Instant latestDate = Instant.parse("2024-01-01T00:00:00Z"); + Instant afterLatest = latestDate.plusSeconds(100); + Instant beforeLatest = latestDate.minusSeconds(100); + var batch = + List.of(dto("1", afterLatest), dto("2", afterLatest), dto("3", beforeLatest)); + + when(repository.findLatestDateWithIdsBySubCategory(CATEGORY)) + .thenReturn(Optional.of(new LatestDateWithIds(latestDate, Set.of()))); + + // when + OptionalInt result = checker.checkDuplicateInBatch(batch, CATEGORY); + + // then + assertThat(result).hasValue(2); + } + + @Test + @DisplayName("동일 날짜, 다른 auctionBuyId는 신규로 판정") + void sameDateDifferentIdIsNew() { + // given + Instant latestDate = Instant.parse("2024-01-01T00:00:00Z"); + var batch = List.of(dto("new-id-1", latestDate), dto("new-id-2", latestDate)); + + when(repository.findLatestDateWithIdsBySubCategory(CATEGORY)) + .thenReturn( + Optional.of( + new LatestDateWithIds( + latestDate, Set.of("existing-1", "existing-2")))); + + // when + OptionalInt result = checker.checkDuplicateInBatch(batch, CATEGORY); + + // then + assertThat(result).isEmpty(); + } + + @Test + @DisplayName("동일 날짜, 같은 auctionBuyId는 중복으로 판정") + void sameDateSameIdIsDuplicate() { + // given + Instant latestDate = Instant.parse("2024-01-01T00:00:00Z"); + var batch = List.of(dto("new-id", latestDate), dto("existing-1", latestDate)); + + when(repository.findLatestDateWithIdsBySubCategory(CATEGORY)) + .thenReturn( + Optional.of( + new LatestDateWithIds( + latestDate, Set.of("existing-1", "existing-2")))); + + // when + OptionalInt result = checker.checkDuplicateInBatch(batch, CATEGORY); + + // then + assertThat(result).hasValue(1); + } + + @Test + @DisplayName("첫 번째 항목이 중복이면 인덱스 0 반환") + void duplicateAtFirstIndex() { + // given + Instant latestDate = Instant.parse("2024-01-01T00:00:00Z"); + Instant beforeLatest = latestDate.minusSeconds(100); + var batch = List.of(dto("1", beforeLatest), dto("2", latestDate)); + + when(repository.findLatestDateWithIdsBySubCategory(CATEGORY)) + .thenReturn(Optional.of(new LatestDateWithIds(latestDate, Set.of()))); + + // when + OptionalInt result = checker.checkDuplicateInBatch(batch, CATEGORY); + + // then + assertThat(result).hasValue(0); + } + } + + @Nested + @DisplayName("filterExisting 테스트") + class FilterExistingTest { + + @Test + @DisplayName("DB에 데이터가 없으면 모든 데이터 반환") + void returnAllWhenNoDataInDb() { + // given + Instant now = Instant.now(); + var dtos = List.of(dto("1", now), dto("2", now.minusSeconds(10))); + when(repository.findLatestDateWithIdsBySubCategory(CATEGORY)) + .thenReturn(Optional.empty()); + + // when + var result = checker.filterExisting(dtos, CATEGORY); + + // then + assertThat(result).hasSize(2); + } + + @Test + @DisplayName("빈 리스트이면 빈 리스트 반환") + void returnEmptyWhenEmptyList() { + // given + List dtos = List.of(); + + // when + var result = checker.filterExisting(dtos, CATEGORY); + + // then + assertThat(result).isEmpty(); + } + + @Test + @DisplayName("latestDate 이전 데이터는 필터링됨") + void filterOutDataBeforeLatestDate() { + // given + Instant latestDate = Instant.parse("2024-01-01T00:00:00Z"); + Instant afterLatest = latestDate.plusSeconds(100); + Instant beforeLatest = latestDate.minusSeconds(100); + var dtos = + List.of(dto("1", afterLatest), dto("2", beforeLatest), dto("3", afterLatest)); + + when(repository.findLatestDateWithIdsBySubCategory(CATEGORY)) + .thenReturn(Optional.of(new LatestDateWithIds(latestDate, Set.of()))); + + // when + var result = checker.filterExisting(dtos, CATEGORY); + + // then + assertThat(result).hasSize(2); + assertThat(result) + .extracting(OpenApiAuctionHistoryResponse::auctionBuyId) + .containsExactly("1", "3"); + } + + @Test + @DisplayName("동일 날짜지만 기존 ID가 아니면 포함됨") + void includeSameDateNewId() { + // given + Instant latestDate = Instant.parse("2024-01-01T00:00:00Z"); + var dtos = List.of(dto("new-1", latestDate), dto("new-2", latestDate)); + + when(repository.findLatestDateWithIdsBySubCategory(CATEGORY)) + .thenReturn( + Optional.of(new LatestDateWithIds(latestDate, Set.of("existing-1")))); + + // when + var result = checker.filterExisting(dtos, CATEGORY); + + // then + assertThat(result).hasSize(2); + } + + @Test + @DisplayName("동일 날짜이고 기존 ID면 필터링됨") + void filterOutSameDateExistingId() { + // given + Instant latestDate = Instant.parse("2024-01-01T00:00:00Z"); + var dtos = + List.of( + dto("new-1", latestDate), + dto("existing-1", latestDate), + dto("new-2", latestDate)); + + when(repository.findLatestDateWithIdsBySubCategory(CATEGORY)) + .thenReturn( + Optional.of(new LatestDateWithIds(latestDate, Set.of("existing-1")))); + + // when + var result = checker.filterExisting(dtos, CATEGORY); + + // then + assertThat(result).hasSize(2); + assertThat(result) + .extracting(OpenApiAuctionHistoryResponse::auctionBuyId) + .containsExactly("new-1", "new-2"); + } + + @Test + @DisplayName("복합 시나리오: 이전/동일(기존ID)/동일(신규ID)/이후 데이터") + void complexScenario() { + // given + Instant latestDate = Instant.parse("2024-01-01T00:00:00Z"); + Instant afterLatest = latestDate.plusSeconds(100); + Instant beforeLatest = latestDate.minusSeconds(100); + + var dtos = + List.of( + dto("after-1", afterLatest), // 신규: 포함 + dto("before-1", beforeLatest), // 과거: 제외 + dto("same-new", latestDate), // 동일 날짜, 신규 ID: 포함 + dto("existing-1", latestDate), // 동일 날짜, 기존 ID: 제외 + dto("after-2", afterLatest) // 신규: 포함 + ); + + when(repository.findLatestDateWithIdsBySubCategory(CATEGORY)) + .thenReturn( + Optional.of( + new LatestDateWithIds( + latestDate, Set.of("existing-1", "existing-2")))); + + // when + var result = checker.filterExisting(dtos, CATEGORY); + + // then + assertThat(result).hasSize(3); + assertThat(result) + .extracting(OpenApiAuctionHistoryResponse::auctionBuyId) + .containsExactly("after-1", "same-new", "after-2"); + } + } +} 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 cbd4257..d92cf74 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,6 +1,11 @@ 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; @@ -12,12 +17,6 @@ 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/iteminfo/application/service/ItemInfoServiceTest.java b/src/test/java/until/the/eternity/iteminfo/application/service/ItemInfoServiceTest.java index 6e66a73..15a7a7d 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,5 +1,11 @@ package until.the.eternity.iteminfo.application.service; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +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; @@ -19,13 +25,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.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -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 6c56c0d..7de499a 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,5 +1,10 @@ package until.the.eternity.metalwareinfo.application.service; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -9,12 +14,6 @@ import until.the.eternity.metalwareinfo.domain.repository.MetalwareInfoRepositoryPort; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @ExtendWith(MockitoExtension.class) class MetalwareInfoServiceTest { From 7c51b5ba947181198a4ac8dcf5ed3f2faba462d5 Mon Sep 17 00:00:00 2001 From: dev-ant Date: Fri, 23 Jan 2026 12:44:00 +0900 Subject: [PATCH 10/10] fix: 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 | 7 ++++--- .../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 + .../response/AuctionHistoryDetailResponse.java | 1 + .../auctionitem/domain/entity/AuctionItem.java | 5 +++-- .../domain/entity/AuctionItemOption.java | 3 ++- .../service/AuctionSearchOptionService.java | 5 +++-- .../entity/AuctionSearchOptionMetadata.java | 3 ++- .../AuctionSearchOptionRepositoryPort.java | 3 ++- .../AuctionSearchOptionJpaRepository.java | 3 ++- .../AuctionSearchOptionRepositoryPortImpl.java | 3 ++- .../rest/AuctionSearchOptionController.java | 3 ++- .../rest/dto/response/FieldMetadata.java | 1 + .../response/SearchOptionMetadataResponse.java | 1 + .../the/eternity/common/enums/ItemCategory.java | 5 +++-- .../eternity/common/enums/SortDirection.java | 3 ++- .../the/eternity/common/enums/SortField.java | 1 + .../common/exception/GlobalExceptionCode.java | 4 ++-- .../exception/GlobalExceptionHandler.java | 4 ++-- .../common/filter/GatewayAuthFilter.java | 7 ++++--- .../eternity/common/response/ApiResponse.java | 3 ++- .../common/response/PageResponseDto.java | 1 + .../eternity/config/openapi/OpenApiFilters.java | 3 ++- .../config/openapi/OpenApiRetryPolicy.java | 3 ++- .../openapi/OpenApiWebClientProperties.java | 3 ++- .../scheduler/HornBugleScheduler.java | 5 +++-- .../application/service/HornBugleService.java | 5 +++-- .../domain/entity/HornBugleWorldHistory.java | 3 ++- .../hornBugle/domain/enums/HornBugleServer.java | 5 +++-- .../domain/mapper/HornBugleMapper.java | 3 ++- .../repository/HornBugleRepositoryPort.java | 7 ++++--- .../service/HornBugleDuplicateChecker.java | 11 ++++++----- .../persistence/HornBugleJpaRepository.java | 7 ++++--- .../HornBugleRepositoryPortImpl.java | 7 ++++--- .../OpenApiHornBugleHistoryListResponse.java | 1 + .../dto/OpenApiHornBugleHistoryResponse.java | 1 + .../dto/response/HornBugleHistoryResponse.java | 1 + .../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 | 3 ++- .../rest/dto/response/ItemCategoryResponse.java | 7 ++++--- .../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 | 3 ++- .../ItemOptionInfoRepositoryPortImpl.java | 3 ++- .../controller/ItemOptionInfoController.java | 5 +++-- .../service/MetalwareInfoService.java | 3 ++- .../persistence/MetalwareInfoJpaRepository.java | 3 ++- .../MetalwareInfoRepositoryPortImpl.java | 3 ++- .../controller/MetalwareInfoController.java | 3 ++- .../dto/response/MetalwareInfoResponse.java | 3 ++- .../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/AuctionHistoryServiceTest.java | 13 +++++++------ .../fetcher/AuctionHistoryFetcherTest.java | 17 +++++++++-------- .../persister/AuctionHistoryPersisterTest.java | 13 +++++++------ .../AuctionHistoryDuplicateCheckerTest.java | 17 +++++++++-------- .../service/AuctionSearchOptionServiceTest.java | 11 ++++++----- .../service/ItemInfoServiceTest.java | 13 +++++++------ .../service/MetalwareInfoServiceTest.java | 11 ++++++----- 107 files changed, 285 insertions(+), 181 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 3d29417..2ef0398 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; @@ -16,6 +14,9 @@ import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; 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 cc15bfd..07a7ed6 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.data.domain.Page; @@ -16,6 +15,8 @@ import until.the.eternity.common.request.PageRequestDto; import until.the.eternity.common.response.PageResponseDto; +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 4c0e05a..3aa4084 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 8112b80..ee426dd 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 a001839..201e09a 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.AuctionItemOption; +import java.time.Instant; +import java.util.List; + @Entity @Table(name = "auction_history") @Getter diff --git a/src/main/java/until/the/eternity/auctionhistory/domain/event/AuctionHistorySavedEvent.java b/src/main/java/until/the/eternity/auctionhistory/domain/event/AuctionHistorySavedEvent.java index 213706e..fe8f771 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 aa5d69a..2fd9fb2 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.AuctionItemOption; +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 669e486..c006585 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,14 @@ package until.the.eternity.auctionhistory.domain.mapper; -import java.time.Instant; -import java.time.temporal.ChronoUnit; -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.time.temporal.ChronoUnit; +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 ca490fa..f8a1907 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,15 +1,16 @@ 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.Page; 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 70b50dc..bdb29aa 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 5b649be..cf00412 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 636f4c2..44f5920 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 4215b1f..bdb982a 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 d617d57..adc69bb 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.Page; import org.springframework.data.domain.PageImpl; @@ -28,6 +23,12 @@ import until.the.eternity.auctionhistory.interfaces.rest.dto.request.PriceSearchRequest; import until.the.eternity.auctionitemoption.domain.entity.QAuctionItemOption; +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 2b0cdf4..65428ed 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.Page; @@ -16,6 +12,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 e194aeb..c49a6b2 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 f41eb46..65b73ca 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 ef00567..feb2c35 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 8266606..e6aacf9 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/response/AuctionHistoryDetailResponse.java b/src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/response/AuctionHistoryDetailResponse.java index 082c562..d694c60 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/AuctionItem.java b/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionItem.java index 8af14a4..2e9264d 100644 --- a/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionItem.java +++ b/src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionItem.java @@ -1,11 +1,12 @@ package until.the.eternity.auctionitem.domain.entity; import jakarta.persistence.*; -import java.time.LocalDateTime; -import java.util.List; import lombok.*; import until.the.eternity.auctionitemoption.domain.entity.AuctionItemOption; +import java.time.LocalDateTime; +import java.util.List; + @Entity @Table(name = "auction_item") @Getter diff --git a/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java b/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java index 7146859..34a42de 100644 --- a/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java +++ b/src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionItemOption.java @@ -1,7 +1,6 @@ package until.the.eternity.auctionitemoption.domain.entity; import jakarta.persistence.*; -import java.util.UUID; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -9,6 +8,8 @@ import until.the.eternity.auctionhistory.domain.entity.AuctionHistory; import until.the.eternity.auctionitem.domain.entity.AuctionItem; +import java.util.UUID; + @Entity @Table(name = "auction_item_option") @Getter 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 aec4e46..28e70a2 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.stereotype.Service; @@ -13,6 +11,9 @@ 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; + @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 21a9e82..5356db7 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") @Getter 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 971be29..fe4e89b 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 e707457..c18fd9e 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 850f43f..2440e82 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 8ad6484..0231a36 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,7 +2,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -12,6 +11,8 @@ import until.the.eternity.auctionsearchoption.interfaces.rest.dto.response.SearchOptionMetadataResponse; import until.the.eternity.common.response.ApiResponse; +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 8b8b6ca..43e5d91 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 04581ef..02c318f 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/common/enums/ItemCategory.java b/src/main/java/until/the/eternity/common/enums/ItemCategory.java index 6b8ab07..ca9ee31 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 5e688da..4a79755 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 704d79d..3c26de2 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/exception/GlobalExceptionCode.java b/src/main/java/until/the/eternity/common/exception/GlobalExceptionCode.java index 21c217b..1169e93 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 4cf5af1..bc069d0 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 b293dc4..ef255e9 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; @@ -19,6 +16,10 @@ import until.the.eternity.common.entity.CustomWebAuthenticationDetails; 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 c7f83b1..c7b99b0 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 c142faa..0919ce2 100644 --- a/src/main/java/until/the/eternity/common/response/PageResponseDto.java +++ b/src/main/java/until/the/eternity/common/response/PageResponseDto.java @@ -1,6 +1,7 @@ package until.the.eternity.common.response; import io.swagger.v3.oas.annotations.media.Schema; + import java.util.List; @Schema(description = "페이지 응답 객체") diff --git a/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java b/src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java index af0147a..29ca38f 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 8c9d0cf..a419df7 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 9d51746..f8d7904 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/hornBugle/application/scheduler/HornBugleScheduler.java b/src/main/java/until/the/eternity/hornBugle/application/scheduler/HornBugleScheduler.java index bc50e1d..9418055 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,7 +1,5 @@ package until.the.eternity.hornBugle.application.scheduler; -import java.util.ArrayList; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -13,6 +11,9 @@ import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryListResponse; import until.the.eternity.hornBugle.interfaces.external.dto.OpenApiHornBugleHistoryResponse; +import java.util.ArrayList; +import java.util.List; + @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 7253b46..70db2e6 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,7 +1,5 @@ package until.the.eternity.hornBugle.application.service; -import java.time.Instant; -import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; @@ -17,6 +15,9 @@ 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; + @Slf4j @Service @RequiredArgsConstructor 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 482c857..05ca8df 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 fe361d0..51bd034 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 173f119..c9340bf 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; @@ -8,6 +7,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 3366706..0162f66 100644 --- a/src/main/java/until/the/eternity/hornBugle/domain/repository/HornBugleRepositoryPort.java +++ b/src/main/java/until/the/eternity/hornBugle/domain/repository/HornBugleRepositoryPort.java @@ -1,12 +1,13 @@ package until.the.eternity.hornBugle.domain.repository; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + public interface HornBugleRepositoryPort { void saveAll(List entities); diff --git a/src/main/java/until/the/eternity/hornBugle/domain/service/HornBugleDuplicateChecker.java b/src/main/java/until/the/eternity/hornBugle/domain/service/HornBugleDuplicateChecker.java index 011986c..267b975 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/persistence/HornBugleJpaRepository.java b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java index 65585cf..2fd3bb5 100644 --- a/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java @@ -1,8 +1,5 @@ package until.the.eternity.hornBugle.infrastructure.persistence; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -10,6 +7,10 @@ import org.springframework.stereotype.Repository; import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + @Repository public interface HornBugleJpaRepository extends JpaRepository { diff --git a/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java index 8f7319f..469b376 100644 --- a/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java +++ b/src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java @@ -1,9 +1,6 @@ package until.the.eternity.hornBugle.infrastructure.persistence; import jakarta.persistence.EntityManager; -import java.time.Instant; -import java.util.List; -import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; @@ -13,6 +10,10 @@ import until.the.eternity.hornBugle.domain.entity.HornBugleWorldHistory; import until.the.eternity.hornBugle.domain.repository.HornBugleRepositoryPort; +import java.time.Instant; +import java.util.List; +import java.util.Optional; + @Repository @RequiredArgsConstructor public class HornBugleRepositoryPortImpl implements HornBugleRepositoryPort { diff --git a/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryListResponse.java b/src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryListResponse.java index 4090a2d..adea275 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 1a11eb0..78f6777 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 cd47b1c..7660ff1 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/iteminfo/application/service/ItemInfoService.java b/src/main/java/until/the/eternity/iteminfo/application/service/ItemInfoService.java index 1c80a41..75ba658 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.data.domain.Page; @@ -22,6 +18,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 d53cd3b..6293e4e 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 a7ffd4c..f870031 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 b540fc6..c9f85ea 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 2be9873..c683846 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 266b230..e13e45f 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 66481ca..497ad7d 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 755b5a2..ddb1c49 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,7 +4,6 @@ import io.swagger.v3.oas.annotations.Parameter; 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; @@ -19,6 +18,8 @@ import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSummaryResponse; import until.the.eternity.iteminfo.interfaces.rest.dto.response.ItemInfoSyncResponse; +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 065d209..0b1e681 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,13 @@ package until.the.eternity.iteminfo.interfaces.rest.dto.response; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; import lombok.Builder; import lombok.Getter; import until.the.eternity.common.enums.ItemCategory; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + @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 be9d890..7089779 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 98e5cfd..4b9da91 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 e98fce3..02016f5 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 e199d4b..fb86c03 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,12 +1,13 @@ 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; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; 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 1763446..5bbcdaf 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 86bb898..01e4934 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,8 +1,9 @@ package until.the.eternity.itemoptioninfo.domain.repository; -import java.util.List; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; +import java.util.List; + 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 d01cc9e..b523642 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,11 +1,12 @@ package until.the.eternity.itemoptioninfo.infrastructure.persistence; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import until.the.eternity.itemoptioninfo.domain.entity.ItemOptionInfo; import until.the.eternity.itemoptioninfo.domain.repository.ItemOptionInfoRepositoryPort; +import java.util.List; + @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 d74ab49..97bafca 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 @@ -2,8 +2,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -12,6 +10,9 @@ import until.the.eternity.itemoptioninfo.domain.mapper.ItemOptionInfoMapper; 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 499de1a..8135be6 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,12 +1,13 @@ package until.the.eternity.metalwareinfo.application.service; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import until.the.eternity.metalwareinfo.domain.repository.MetalwareInfoRepositoryPort; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; +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 61481a2..202802f 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,9 +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.Query; +import java.util.List; + public interface MetalwareInfoJpaRepository extends JpaRepository { @Query("SELECT m.metalware FROM MetalwareInfoEntity m") 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 9121dd1..3ee9a1a 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 fa26459..271a7e3 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 @@ -2,7 +2,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -10,6 +9,8 @@ import until.the.eternity.metalwareinfo.application.service.MetalwareInfoService; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; +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 a312271..4e8d9d1 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/statistics/domain/entity/daily/ItemDailyStatistics.java b/src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java index 361df9c..f6217f4 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 66e5382..887807d 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 fb3ab7a..bfcb536 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 6970f18..44c2038 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 5756b09..a05c528 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 9201faa..22e4406 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 7908da4..59954a6 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 f6f9152..46b2cf7 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 1360de1..d132153 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 47c2c96..4ff95e0 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 9d7bc71..e024787 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 4b8e25d..382bfef 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 ad1c6b4..2986275 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 a961101..e2485f4 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 05e86f7..7d499d8 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 e27f7f3..b167b92 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 bb82686..5f67f69 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 fd49c2f..df6c9f8 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 ad81f76..01782f0 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 447c242..253bcac 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; @@ -9,6 +7,9 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.daily.ItemDailyStatistics; +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 3bed0b1..e8f72fc 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 3174948..0fff60a 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; @@ -9,6 +7,9 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.daily.TopCategoryDailyStatistics; +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 dc7a301..24f37b0 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; @@ -8,6 +7,8 @@ import org.springframework.transaction.annotation.Transactional; import until.the.eternity.statistics.domain.entity.weekly.ItemWeeklyStatistics; +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 fb0986a..ea3542c 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 45a1dad..c2140d5 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/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java b/src/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java index ed2fea8..7ae6dd9 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.request.PageRequestDto; 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 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 e6e76af..d118725 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 0d9b8d2..7764a91 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 3c6bf7b..6cfdc81 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/auctionsearchoption/application/service/AuctionSearchOptionServiceTest.java b/src/test/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionServiceTest.java index d92cf74..cbd4257 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/iteminfo/application/service/ItemInfoServiceTest.java b/src/test/java/until/the/eternity/iteminfo/application/service/ItemInfoServiceTest.java index 15a7a7d..6e66a73 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,11 +1,5 @@ package until.the.eternity.iteminfo.application.service; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -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; @@ -25,6 +19,13 @@ 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.assertj.core.api.Assertions.assertThatThrownBy; +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 7de499a..6c56c0d 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,10 +1,5 @@ package until.the.eternity.metalwareinfo.application.service; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -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 +9,12 @@ import until.the.eternity.metalwareinfo.domain.repository.MetalwareInfoRepositoryPort; import until.the.eternity.metalwareinfo.interfaces.rest.dto.response.MetalwareInfoResponse; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + @ExtendWith(MockitoExtension.class) class MetalwareInfoServiceTest {