Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -19,6 +17,9 @@
import until.the.eternity.common.annotation.BatchLog;
import until.the.eternity.common.enums.ItemCategory;

import java.util.*;
import java.util.stream.Collectors;

@Slf4j
@Component
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import until.the.eternity.common.enums.SortField;
import until.the.eternity.common.request.PageRequestDto;
import until.the.eternity.config.CacheNames;
import until.the.eternity.ranking.application.service.AllTimeRankingService;
import until.the.eternity.ranking.util.RankingConstants;

/**
* 경매 거래 내역 캐시 워밍업 서비스.
Expand All @@ -29,8 +31,10 @@ public class AuctionHistoryCacheWarmupService {

private static final int WARMUP_SIZE = 20;
private static final int WARMUP_MAX_PAGE = 2;
private static final int[] RANKING_WARMUP_LIMITS = {20, RankingConstants.DEFAULT_LIMIT};

private final AuctionHistoryService auctionHistoryService;
private final AllTimeRankingService allTimeRankingService;
private final CacheManager cacheManager;

/**
Expand All @@ -41,6 +45,7 @@ public class AuctionHistoryCacheWarmupService {
public void evictAndWarm() {
evictCaches();
warmup();
warmAllTimeRankingCaches();
}

/** 앱 시작 시 기본 화면 1개 키만 경량 워밍업한다. */
Expand Down Expand Up @@ -105,6 +110,27 @@ private void warmup() {
WARMUP_MAX_PAGE * SortField.values().length * SortDirection.values().length);
}

private void warmAllTimeRankingCaches() {
int successCount = 0;
int failCount = 0;

for (int limit : RANKING_WARMUP_LIMITS) {
try {
allTimeRankingService.getAllTimeHighestPrice(limit);
allTimeRankingService.getMonthLargestVolume(limit);
successCount += 2;
} catch (Exception e) {
failCount++;
log.warn("[Cache Warmup] Failed all-time ranking warmup: limit={}", limit, e);
}
}

log.info(
"[Cache Warmup] All-time ranking completed: success={}, fail={}",
successCount,
failCount);
}

private void clearCache(String cacheName) {
Cache cache = cacheManager.getCache(cacheName);
if (cache != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package until.the.eternity.auctionhistory.application.service;

import jakarta.persistence.EntityManager;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.Cache;
Expand All @@ -23,6 +22,8 @@
import until.the.eternity.common.util.CacheKeyBuilder;
import until.the.eternity.config.CacheNames;

import java.util.List;

@Service
@RequiredArgsConstructor
@Slf4j
Expand All @@ -47,7 +48,8 @@ public class AuctionHistoryService {
"#requestDto.itemOptionSearchRequest() == null"
+ " and #requestDto.enchantSearchRequest() == null"
+ " and (#requestDto.metalwareSearchRequests() == null or #requestDto.metalwareSearchRequests().isEmpty())"
+ " and #requestDto.priceSearchRequest() == null")
+ " and #requestDto.priceSearchRequest() == null",
sync = true)
@Transactional(readOnly = true)
public PageResponseDto<AuctionHistoryDetailResponse<ItemOptionResponse>> search(
AuctionHistorySearchRequest requestDto, PageRequestDto pageRequestDto) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package until.the.eternity.auctionhistory.domain.entity;

import jakarta.persistence.*;
import java.time.Instant;
import java.util.List;
import lombok.*;
import until.the.eternity.auctionitemoption.domain.entity.AuctionHistoryItemOption;

import java.time.Instant;
import java.util.List;

@Entity
@Table(name = "auction_history")
@Getter
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
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;
import until.the.eternity.auctionhistory.interfaces.rest.dto.response.AuctionHistoryDetailResponse;
import until.the.eternity.auctionhistory.interfaces.rest.dto.response.ItemOptionResponse;
import until.the.eternity.auctionitemoption.domain.entity.AuctionHistoryItemOption;

import java.util.List;

/**
* AuctionHistory Entity to internal.responseDto transfer mapper class 데이터 흐름은 external.responseDto
* -> entity -> internal.responseDto 단방향으로 흐름
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package until.the.eternity.auctionhistory.domain.mapper;

import java.time.Instant;
import java.util.List;
import org.mapstruct.*;
import until.the.eternity.auctionhistory.domain.entity.AuctionHistory;
import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse;
import until.the.eternity.common.enums.ItemCategory;

import java.time.Instant;
import java.util.List;

@Mapper(componentModel = "spring", uses = OpenApiItemOptionMapper.class)
public interface OpenApiAuctionHistoryMapper {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package until.the.eternity.auctionhistory.domain.repository;

import java.time.Instant;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import org.springframework.data.domain.Pageable;
import until.the.eternity.auctionhistory.domain.entity.AuctionHistory;
import until.the.eternity.auctionhistory.interfaces.rest.dto.request.AuctionHistorySearchRequest;
import until.the.eternity.common.enums.ItemCategory;

import java.time.Instant;
import java.util.List;
import java.util.Optional;
import java.util.Set;

/** 경매장 거래 내역 POJO Repository - Mock 또는 Stub 으로 대체해 단위 테스트 용이성 확보 */
public interface AuctionHistoryRepositoryPort {

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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<OpenApiAuctionHistoryResponse> fetch(ItemCategory category);
}
Original file line number Diff line number Diff line change
@@ -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<AuctionHistory> filterOutExisting(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
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;
import org.springframework.data.jpa.repository.Query;
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<AuctionHistory, String>, JpaSpecificationExecutor<AuctionHistory> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,6 @@
import com.querydsl.core.types.dsl.NumberTemplate;
import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQueryFactory;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
Expand All @@ -23,6 +18,12 @@
import until.the.eternity.auctionhistory.interfaces.rest.dto.request.*;
import until.the.eternity.auctionitemoption.domain.entity.QAuctionHistoryItemOption;

import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;

@Component
@RequiredArgsConstructor
class AuctionHistoryQueryDslRepository {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package until.the.eternity.auctionhistory.infrastructure.persistence;

import jakarta.persistence.EntityManager;
import java.time.Instant;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Pageable;
Expand All @@ -15,6 +11,11 @@
import until.the.eternity.auctionhistory.interfaces.rest.dto.request.AuctionHistorySearchRequest;
import until.the.eternity.common.enums.ItemCategory;

import java.time.Instant;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;

/** AuctionHistoryRepository Interface 구현체 */
@Repository
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
@@ -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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/** 검색 기준 (이상/이하/같음) */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/** 정렬 방향 (오름차순/내림차순) */
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package until.the.eternity.auctionhistory.interfaces.rest.dto.request;

import io.swagger.v3.oas.annotations.media.Schema;

import java.time.LocalDate;
import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package until.the.eternity.auctionitem.domain.entity;

import jakarta.persistence.*;
import lombok.*;

import java.time.Instant;
import java.util.List;
import lombok.*;

/** 실시간 경매장에서 판매 중인 아이템 정보. V15 마이그레이션에서 auction_item → auction_realtime_item으로 변경됨. */
@Entity
Expand Down
Loading
Loading