Skip to content

Commit de6b24a

Browse files
dev-antCopilot
andauthored
fix: Bulk Insert를 위해 Auction History, Auction Item Option ID 생성 전략을 변경한다 (#47)
* feat: auction history id 삭제 flyway script 작성 * feat: auction history id 변경 사항 코드 반영 * fix: flyway script 오타 수정 * chore: gitignore에 temp 폴더 추가 * fix: optimize imports * feat: 변ê² auction item option id를 uuid로 변경 * fix: optimize imports * feat: item option 테이블 id에 column 어노테이션 추가 Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent febb4b4 commit de6b24a

File tree

43 files changed

+191
-94
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+191
-94
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,7 @@ application.yml
5959
### node ###
6060
node_modules/
6161
package-lock.json
62-
package.json
62+
package.json
63+
64+
### temp directory ###
65+
/temp/

build.gradle.kts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ java {
2020
}
2121

2222

23-
val querydslDir = "$buildDir/generated/querydsl"
2423

25-
sourceSets["main"].java.srcDirs(querydslDir)
2624

2725
configurations {
2826
compileOnly {
@@ -101,11 +99,7 @@ extensions.configure<JacocoPluginExtension>("jacoco") {
10199
toolVersion = "0.8.10"
102100
}
103101

104-
// QueryDSL Q 클래스 생성 위치
105-
tasks.withType<JavaCompile> {
106-
options.annotationProcessorGeneratedSourcesDirectory = file(querydslDir)
107-
options.annotationProcessorPath = configurations.annotationProcessor.get()
108-
}
102+
109103

110104
tasks.test {
111105
useJUnitPlatform()

src/main/java/until/the/eternity/auctionhistory/application/scheduler/AuctionHistoryScheduler.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package until.the.eternity.auctionhistory.application.scheduler;
22

3-
import java.util.ArrayList;
4-
import java.util.List;
53
import lombok.RequiredArgsConstructor;
64
import lombok.extern.slf4j.Slf4j;
75
import org.springframework.scheduling.annotation.Scheduled;
@@ -13,6 +11,9 @@
1311
import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse;
1412
import until.the.eternity.common.enums.ItemCategory;
1513

14+
import java.util.ArrayList;
15+
import java.util.List;
16+
1617
@Slf4j
1718
@Component
1819
@RequiredArgsConstructor

src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package until.the.eternity.auctionhistory.application.service;
22

3-
import java.util.List;
43
import lombok.RequiredArgsConstructor;
54
import lombok.extern.slf4j.Slf4j;
65
import org.springframework.data.domain.Page;
@@ -15,6 +14,8 @@
1514
import until.the.eternity.common.request.PageRequestDto;
1615
import until.the.eternity.common.response.PageResponseDto;
1716

17+
import java.util.List;
18+
1819
@Service
1920
@RequiredArgsConstructor
2021
@Slf4j
@@ -33,7 +34,7 @@ public PageResponseDto<AuctionHistoryDetailResponse<ItemOptionResponse>> search(
3334
}
3435

3536
@Transactional(readOnly = true)
36-
public AuctionHistoryDetailResponse<ItemOptionResponse> findByIdOrElseThrow(Long id) {
37+
public AuctionHistoryDetailResponse<ItemOptionResponse> findByIdOrElseThrow(String id) {
3738
AuctionHistory auctionHistory =
3839
repository
3940
.findById(id)

src/main/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcher.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package until.the.eternity.auctionhistory.application.service.fetcher;
22

3-
import java.util.ArrayList;
4-
import java.util.List;
53
import lombok.RequiredArgsConstructor;
64
import lombok.extern.slf4j.Slf4j;
75
import org.springframework.stereotype.Component;
@@ -11,6 +9,9 @@
119
import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse;
1210
import until.the.eternity.common.enums.ItemCategory;
1311

12+
import java.util.ArrayList;
13+
import java.util.List;
14+
1415
@Slf4j
1516
@Component
1617
@RequiredArgsConstructor

src/main/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersister.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package until.the.eternity.auctionhistory.application.service.persister;
22

3-
import java.util.List;
43
import lombok.RequiredArgsConstructor;
54
import lombok.extern.slf4j.Slf4j;
65
import org.springframework.stereotype.Component;
@@ -11,6 +10,8 @@
1110
import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse;
1211
import until.the.eternity.common.enums.ItemCategory;
1312

13+
import java.util.List;
14+
1415
@Slf4j
1516
@RequiredArgsConstructor
1617
@Component
@@ -25,6 +26,8 @@ public List<AuctionHistory> filterOutExisting(
2526
List<AuctionHistory> entities =
2627
mapper.toEntityList(duplicateChecker.filterExisting(dtoList), category);
2728

29+
entities.forEach(AuctionHistory::linkItemOptions);
30+
2831
if (entities.isEmpty()) {
2932
log.info("> [SCHEDULE] [{}] No new auction history to save", category.getSubCategory());
3033
} else {

src/main/java/until/the/eternity/auctionhistory/domain/entity/AuctionHistory.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package until.the.eternity.auctionhistory.domain.entity;
22

33
import jakarta.persistence.*;
4-
import java.time.Instant;
5-
import java.util.List;
64
import lombok.*;
75
import until.the.eternity.itemoption.domain.entity.ItemOption;
86

7+
import java.time.Instant;
8+
import java.util.List;
9+
910
@Entity
1011
@Table(name = "auction_history")
1112
@Getter
@@ -16,8 +17,8 @@
1617
public class AuctionHistory {
1718

1819
@Id
19-
@GeneratedValue(strategy = GenerationType.IDENTITY)
20-
private Long id;
20+
@Column(name = "auction_buy_id", nullable = false)
21+
private String auctionBuyId;
2122

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

37-
@Column(name = "auction_buy_id", nullable = false, unique = true)
38-
private String auctionBuyId;
39-
4038
@OneToMany(mappedBy = "auctionHistory", cascade = CascadeType.ALL, orphanRemoval = true)
4139
private List<ItemOption> itemOptions;
4240

src/main/java/until/the/eternity/auctionhistory/domain/mapper/AuctionHistoryMapper.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package until.the.eternity.auctionhistory.domain.mapper;
22

3-
import java.util.List;
43
import org.mapstruct.Mapper;
54
import org.mapstruct.Mapping;
65
import until.the.eternity.auctionhistory.domain.entity.AuctionHistory;
76
import until.the.eternity.auctionhistory.interfaces.rest.dto.response.AuctionHistoryDetailResponse;
87
import until.the.eternity.auctionhistory.interfaces.rest.dto.response.ItemOptionResponse;
98
import until.the.eternity.itemoption.domain.entity.ItemOption;
109

10+
import java.util.List;
11+
1112
/**
1213
* AuctionHistory Entity to internal.responseDto transfer mapper class 데이터 흐름은 external.responseDto
1314
* -> entity -> internal.responseDto 단방향으로 흐름
@@ -20,6 +21,8 @@ public interface AuctionHistoryMapper {
2021
AuctionHistoryDetailResponse<ItemOptionResponse> toDto(AuctionHistory entity);
2122

2223
// 하위 매핑
24+
@Mapping(target = "auctionHistory", ignore = true)
25+
@Mapping(target = "auctionItem", ignore = true)
2326
ItemOption toEntity(ItemOptionResponse dto);
2427

2528
ItemOptionResponse toDto(ItemOption entity);

src/main/java/until/the/eternity/auctionhistory/domain/mapper/OpenApiAuctionHistoryMapper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package until.the.eternity.auctionhistory.domain.mapper;
22

3-
import java.time.Instant;
4-
import java.util.List;
53
import org.mapstruct.*;
64
import until.the.eternity.auctionhistory.domain.entity.AuctionHistory;
75
import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse;
86
import until.the.eternity.common.enums.ItemCategory;
97

8+
import java.time.Instant;
9+
import java.util.List;
10+
1011
@Mapper(componentModel = "spring", uses = OpenApiItemOptionMapper.class)
1112
public interface OpenApiAuctionHistoryMapper {
1213

1314
@Named("toEntity(OpenApiAuctionHistoryResponse, ItemCategory)")
14-
@Mapping(target = "id", ignore = true)
1515
@Mapping(
1616
source = "dateAuctionBuy",
1717
target = "dateAuctionBuy",

src/main/java/until/the/eternity/auctionhistory/domain/repository/AuctionHistoryRepositoryPort.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
11
package until.the.eternity.auctionhistory.domain.repository;
22

3-
import java.time.Instant;
4-
import java.util.List;
5-
import java.util.Optional;
63
import org.springframework.data.domain.Page;
74
import org.springframework.data.domain.Pageable;
85
import until.the.eternity.auctionhistory.domain.entity.AuctionHistory;
96
import until.the.eternity.auctionhistory.interfaces.rest.dto.request.AuctionHistorySearchRequest;
107
import until.the.eternity.common.enums.ItemCategory;
118

9+
import java.time.Instant;
10+
import java.util.List;
11+
import java.util.Optional;
12+
1213
/** 경매장 거래 내역 POJO Repository - Mock 또는 Stub 으로 대체해 단위 테스트 용이성 확보 */
1314
public interface AuctionHistoryRepositoryPort {
1415

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

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

19-
Optional<AuctionHistory> findByIdWithOptions(Long id);
20+
Optional<AuctionHistory> findByIdWithOptions(String id);
2021

2122
boolean existsByAuctionBuyIds(List<String> ids);
2223

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

2526
boolean existsByAuctionBuyIdIn(List<String> ids);
2627

27-
Optional<AuctionHistory> findById(Long id);
28+
Optional<AuctionHistory> findById(String id);
2829

2930
void saveAll(List<AuctionHistory> newEntities);
3031

0 commit comments

Comments
 (0)