Skip to content

Commit

Permalink
Merge pull request #235 from SKY-HORSE-MAN-POWER/develop
Browse files Browse the repository at this point in the history
[DEPLOYMENT] 동시성 문제 해결 중에 있습니다.
  • Loading branch information
chanchanwoong authored Jun 27, 2024
2 parents 810d96d + 02c4c6e commit f950519
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ public void offerBiddingPrice(OfferBiddingPriceDto offerBiddingPriceDto) {

@Override
public void auctionClose(String auctionUuid) {
// auction_close_state 도큐먼트에 acutionUuid 데이터가 있으면(마감됐으면) 바로 return
if (auctionCloseStateRepository.findByAuctionUuid(auctionUuid).isPresent()) {
// 동시성을 고려한 auction_close_state 도큐먼트에 acutionUuid 데이터가 있으면(마감됐으면) 바로 return
if (auctionCloseStateRepository.setAuctionClosedInNotExists(auctionUuid)) {
log.info("Auction already close");
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import com.skyhorsemanpower.auction.common.DateTimeConverter;
import com.skyhorsemanpower.auction.config.QuartzJobConfig;
import com.skyhorsemanpower.auction.domain.AuctionCloseState;
import com.skyhorsemanpower.auction.domain.RoundInfo;
import com.skyhorsemanpower.auction.kafka.data.dto.InitialAuctionDto;
import com.skyhorsemanpower.auction.repository.AuctionCloseStateRepository;
import com.skyhorsemanpower.auction.repository.RoundInfoRepository;
import com.skyhorsemanpower.auction.status.AuctionTimeEnum;
import com.skyhorsemanpower.auction.status.RoundTimeEnum;
Expand All @@ -25,6 +27,7 @@
public class KafkaConsumerCluster {
private final RoundInfoRepository roundInfoRepository;
private final QuartzJobConfig quartzJobConfig;
private final AuctionCloseStateRepository auctionCloseStateRepository;

@KafkaListener(topics = Topics.Constant.INITIAL_AUCTION, groupId = "${spring.kafka.consumer.group-id}")
public void initialAuction(@Payload LinkedHashMap<String, Object> message,
Expand All @@ -45,6 +48,15 @@ public void initialAuction(@Payload LinkedHashMap<String, Object> message,

initialRoundInfo(initialAuctionDto);

// auction_close_state 초기 정보 등록
AuctionCloseState auctionCloseState = AuctionCloseState.builder()
.auctionUuid(message.get("auctionUuid").toString())
.auctionCloseState(false)
.build();
log.info("auction_close_state Initial Document >>> {}", auctionCloseState.toString());

auctionCloseStateRepository.save(auctionCloseState);

// 경매 마감 스케줄러 등록
try {
quartzJobConfig.schedulerUpdateAuctionStateJob(initialAuctionDto);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.skyhorsemanpower.auction.repository;

import com.skyhorsemanpower.auction.domain.AuctionCloseState;
import com.skyhorsemanpower.auction.repository.mongotemplate.CustomAuctionCloseStateRepository;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface AuctionCloseStateRepository extends MongoRepository<AuctionCloseState, String> {
public interface AuctionCloseStateRepository extends MongoRepository<AuctionCloseState, String>, CustomAuctionCloseStateRepository {
Optional<AuctionCloseState> findByAuctionUuid(String auctionUuid);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.skyhorsemanpower.auction.repository.mongotemplate;

public interface CustomAuctionCloseStateRepository {
boolean setAuctionClosedInNotExists(String auctionUuid);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.skyhorsemanpower.auction.repository.mongotemplate.impl;

import com.skyhorsemanpower.auction.domain.AuctionCloseState;
import com.skyhorsemanpower.auction.repository.mongotemplate.CustomAuctionCloseStateRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;

@Repository
@RequiredArgsConstructor
public class CustomAuctionCloseStateRepositoryImpl implements CustomAuctionCloseStateRepository {

private final MongoTemplate mongoTemplate;

@Override
public boolean setAuctionClosedInNotExists(String auctionUuid) {
Query query = new Query(Criteria.where("auctionUuid").is(auctionUuid)
.and("auctionCloseState").is(false));
Update update = new Update().set("auctionCloseState", true);
AuctionCloseState updatedDocument = mongoTemplate.findAndModify(query, update, AuctionCloseState.class);
return updatedDocument != null;
}
}

0 comments on commit f950519

Please sign in to comment.