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
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,7 @@ application.yml
### node ###
node_modules/
package-lock.json
package.json
package.json

### temp directory ###
/temp/
8 changes: 1 addition & 7 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ java {
}


val querydslDir = "$buildDir/generated/querydsl"

sourceSets["main"].java.srcDirs(querydslDir)

configurations {
compileOnly {
Expand Down Expand Up @@ -101,11 +99,7 @@ extensions.configure<JacocoPluginExtension>("jacoco") {
toolVersion = "0.8.10"
}

// QueryDSL Q 클래스 생성 위치
tasks.withType<JavaCompile> {
options.annotationProcessorGeneratedSourcesDirectory = file(querydslDir)
options.annotationProcessorPath = configurations.annotationProcessor.get()
}


tasks.test {
useJUnitPlatform()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package until.the.eternity.auctionhistory.application.scheduler;

import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
Expand All @@ -13,6 +11,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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package until.the.eternity.auctionhistory.application.service;

import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
Expand All @@ -15,6 +14,8 @@
import until.the.eternity.common.request.PageRequestDto;
import until.the.eternity.common.response.PageResponseDto;

import java.util.List;

@Service
@RequiredArgsConstructor
@Slf4j
Expand All @@ -33,7 +34,7 @@ public PageResponseDto<AuctionHistoryDetailResponse<ItemOptionResponse>> search(
}

@Transactional(readOnly = true)
public AuctionHistoryDetailResponse<ItemOptionResponse> findByIdOrElseThrow(Long id) {
public AuctionHistoryDetailResponse<ItemOptionResponse> findByIdOrElseThrow(String id) {
AuctionHistory auctionHistory =
repository
.findById(id)
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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
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 All @@ -25,6 +26,8 @@ public List<AuctionHistory> filterOutExisting(
List<AuctionHistory> entities =
mapper.toEntityList(duplicateChecker.filterExisting(dtoList), category);

entities.forEach(AuctionHistory::linkItemOptions);

if (entities.isEmpty()) {
log.info("> [SCHEDULE] [{}] No new auction history to save", category.getSubCategory());
} else {
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.itemoption.domain.entity.ItemOption;

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

@Entity
@Table(name = "auction_history")
@Getter
Expand All @@ -16,8 +17,8 @@
public class AuctionHistory {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "auction_buy_id", nullable = false)
private String auctionBuyId;

@Column(name = "item_name", nullable = false)
private String itemName;
Expand All @@ -34,9 +35,6 @@ public class AuctionHistory {
@Column(name = "date_auction_buy", nullable = false)
private Instant dateAuctionBuy;

@Column(name = "auction_buy_id", nullable = false, unique = true)
private String auctionBuyId;

@OneToMany(mappedBy = "auctionHistory", cascade = CascadeType.ALL, orphanRemoval = true)
private List<ItemOption> itemOptions;

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.itemoption.domain.entity.ItemOption;

import java.util.List;

/**
* AuctionHistory Entity to internal.responseDto transfer mapper class 데이터 흐름은 external.responseDto
* -> entity -> internal.responseDto 단방향으로 흐름
Expand All @@ -20,6 +21,8 @@ public interface AuctionHistoryMapper {
AuctionHistoryDetailResponse<ItemOptionResponse> toDto(AuctionHistory entity);

// 하위 매핑
@Mapping(target = "auctionHistory", ignore = true)
@Mapping(target = "auctionItem", ignore = true)
ItemOption toEntity(ItemOptionResponse dto);

ItemOptionResponse toDto(ItemOption entity);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
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 {

@Named("toEntity(OpenApiAuctionHistoryResponse, ItemCategory)")
@Mapping(target = "id", ignore = true)
@Mapping(
source = "dateAuctionBuy",
target = "dateAuctionBuy",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
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 {

List<AuctionHistory> findAllByAuctionBuyIds(List<String> auctionBuyIds);

Page<AuctionHistory> search(AuctionHistorySearchRequest condition, Pageable pageable);

Optional<AuctionHistory> findByIdWithOptions(Long id);
Optional<AuctionHistory> findByIdWithOptions(String id);

boolean existsByAuctionBuyIds(List<String> ids);

List<String> findExistingIds(List<String> ids);

boolean existsByAuctionBuyIdIn(List<String> ids);

Optional<AuctionHistory> findById(Long id);
Optional<AuctionHistory> findById(String id);

void saveAll(List<AuctionHistory> newEntities);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
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;
import until.the.eternity.auctionhistory.domain.repository.AuctionHistoryRepositoryPort;
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
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,18 +1,19 @@
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, Long>, JpaSpecificationExecutor<AuctionHistory> {
extends JpaRepository<AuctionHistory, String>, JpaSpecificationExecutor<AuctionHistory> {

List<AuctionHistory> findAllByAuctionBuyIdIn(List<String> auctionBuyIds);

Expand All @@ -35,5 +36,5 @@ select MAX(a.dateAuctionBuy)
Optional<Instant> findLatestDateAuctionBuyBySubCategory(String topCategory, String subCategory);

@EntityGraph(attributePaths = "itemOptions")
Optional<AuctionHistory> findWithItemOptionsById(Long id);
Optional<AuctionHistory> findWithItemOptionsByAuctionBuyId(String id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.querydsl.core.BooleanBuilder;
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;
Expand All @@ -12,6 +11,8 @@
import until.the.eternity.auctionhistory.domain.entity.QAuctionHistory;
import until.the.eternity.auctionhistory.interfaces.rest.dto.request.AuctionHistorySearchRequest;

import java.util.List;

@Component
@RequiredArgsConstructor
class AuctionHistoryQueryDslRepository {
Expand Down
Loading