diff --git a/src/main/java/com/samyookgoo/palgoosam/PalgoosamApplication.java b/src/main/java/com/samyookgoo/palgoosam/PalgoosamApplication.java index 0daf79af..a7b4a243 100644 --- a/src/main/java/com/samyookgoo/palgoosam/PalgoosamApplication.java +++ b/src/main/java/com/samyookgoo/palgoosam/PalgoosamApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; +@EnableAsync @EnableScheduling @SpringBootApplication public class PalgoosamApplication { diff --git a/src/main/java/com/samyookgoo/palgoosam/auction/event/ElasticsearchAuctionEvent.java b/src/main/java/com/samyookgoo/palgoosam/auction/event/ElasticsearchAuctionEvent.java new file mode 100644 index 00000000..cd86ebf0 --- /dev/null +++ b/src/main/java/com/samyookgoo/palgoosam/auction/event/ElasticsearchAuctionEvent.java @@ -0,0 +1,14 @@ +package com.samyookgoo.palgoosam.auction.event; + +import com.samyookgoo.palgoosam.search.domain.AuctionSearchDocument; + +public class ElasticsearchAuctionEvent { + private final AuctionSearchDocument searchDocument; + + public ElasticsearchAuctionEvent(AuctionSearchDocument searchDocument) { + this.searchDocument = searchDocument; + } + + public AuctionSearchDocument getSearchDocument() { + return searchDocument; + }} diff --git a/src/main/java/com/samyookgoo/palgoosam/auction/event_listener/AuctionEventListener.java b/src/main/java/com/samyookgoo/palgoosam/auction/event_listener/AuctionEventListener.java new file mode 100644 index 00000000..477933fe --- /dev/null +++ b/src/main/java/com/samyookgoo/palgoosam/auction/event_listener/AuctionEventListener.java @@ -0,0 +1,22 @@ +package com.samyookgoo.palgoosam.auction.event_listener; + +import com.samyookgoo.palgoosam.auction.event.ElasticsearchAuctionEvent; +import com.samyookgoo.palgoosam.search.repository.AuctionSearchElasticsearchRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +@Component +@RequiredArgsConstructor +public class AuctionEventListener { + + private final AuctionSearchElasticsearchRepository auctionSearchElasticsearchRepository; + + @Async + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + public void onAuctionCreated(ElasticsearchAuctionEvent event) { + auctionSearchElasticsearchRepository.save(event.getSearchDocument()); + } +} diff --git a/src/main/java/com/samyookgoo/palgoosam/auction/service/AuctionService.java b/src/main/java/com/samyookgoo/palgoosam/auction/service/AuctionService.java index bb74f7af..2f3d9280 100644 --- a/src/main/java/com/samyookgoo/palgoosam/auction/service/AuctionService.java +++ b/src/main/java/com/samyookgoo/palgoosam/auction/service/AuctionService.java @@ -14,6 +14,7 @@ import com.samyookgoo.palgoosam.auction.dto.request.AuctionSearchRequestDto; import com.samyookgoo.palgoosam.auction.dto.request.AuctionUpdateRequest; import com.samyookgoo.palgoosam.auction.dto.response.*; +import com.samyookgoo.palgoosam.auction.event.ElasticsearchAuctionEvent; import com.samyookgoo.palgoosam.auction.exception.AuctionCategoryException; import com.samyookgoo.palgoosam.auction.exception.AuctionForbiddenException; import com.samyookgoo.palgoosam.auction.exception.AuctionImageException; @@ -59,6 +60,7 @@ //import org.springframework.beans.factory.annotation.Value; //import org.springframework.data.redis.core.RedisTemplate; //import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.elasticsearch.client.elc.NativeQuery; @@ -83,6 +85,7 @@ public class AuctionService { private final AuctionSearchElasticsearchRepository auctionSearchElasticsearchRepository; private final ElasticsearchOperations elasticsearchOperations; private final CategoryService categoryService; + private final ApplicationEventPublisher publisher; // private final S3Service s3Service; // private final StringRedisTemplate stringRedisTemplate; @@ -133,12 +136,14 @@ public AuctionCreateResponse createAuction(AuctionCreateRequest request) { savedAuction.getEndTime(), imageResponses.getFirst().getUrl() ); - this.auctionSearchElasticsearchRepository.save(searchDocument); + publisher.publishEvent(new ElasticsearchAuctionEvent(searchDocument)); return AuctionCreateResponse.of(auction, imageResponses, category, request.getStartDelay(), request.getDurationTime()); } + + @Transactional(readOnly = true) public AuctionDetailResponse getAuctionDetail(Long auctionId) { User user = authService.getCurrentUser();