Skip to content

Commit

Permalink
Merge pull request #225 from SKY-HORSE-MAN-POWER/develop
Browse files Browse the repository at this point in the history
[DEPLOYMENT] 경매 마감 후, 낙찰됐는지 여부를 알려주는 API 구현
  • Loading branch information
chanchanwoong authored Jun 25, 2024
2 parents 6c1f070 + 0eef8c3 commit c79fa57
Show file tree
Hide file tree
Showing 7 changed files with 127 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.skyhorsemanpower.auction.application;

import com.skyhorsemanpower.auction.data.dto.*;
import com.skyhorsemanpower.auction.data.vo.AuctionResultResponseVo;

public interface AuctionService {
void offerBiddingPrice(OfferBiddingPriceDto offerBiddingPriceDto);

void auctionClose(String auctionUuid);

void auctionStateChangeTrue(String auctionUuid);

AuctionResultResponseVo auctionResult(String uuid, String auctionUuid);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import com.skyhorsemanpower.auction.application.AuctionService;
import com.skyhorsemanpower.auction.common.exception.CustomException;
import com.skyhorsemanpower.auction.data.vo.AuctionResultResponseVo;
import com.skyhorsemanpower.auction.domain.AuctionCloseState;
import com.skyhorsemanpower.auction.domain.AuctionResult;
import com.skyhorsemanpower.auction.domain.RoundInfo;
import com.skyhorsemanpower.auction.kafka.KafkaProducerCluster;
import com.skyhorsemanpower.auction.kafka.Topics;
Expand All @@ -24,6 +26,7 @@
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;

@Service
Expand All @@ -35,6 +38,7 @@ public class AuctionServiceImpl implements AuctionService {
private final RoundInfoRepository roundInfoRepository;
private final AuctionCloseStateRepository auctionCloseStateRepository;
private final KafkaProducerCluster producer;
private final AuctionResultRepository auctionResultRepository;

@Override
@Transactional
Expand Down Expand Up @@ -138,6 +142,14 @@ public void auctionClose(String auctionUuid) {
.auctionUuid(auctionUuid)
.auctionCloseState(true)
.build());

// 경매 결과 저장
auctionResultRepository.save(AuctionResult.builder()
.auctionUuid(auctionUuid)
.memberUuids(memberUuids.stream().toList())
.price(price)
.build());
log.info("Auction Result Save!");
}

private MemberUuidsAndPrice getMemberUuidsAndPrice(int round, String auctionUuid, long numberOfParticipants) {
Expand Down Expand Up @@ -212,6 +224,25 @@ public void auctionStateChangeTrue(String auctionUuid) {
}
}

@Override
public AuctionResultResponseVo auctionResult(String uuid, String auctionUuid) {
Optional<AuctionResult> auctionResult = auctionResultRepository.
findByAuctionUuidAndMemberUuidsContains(auctionUuid, uuid);

// 낙찰자에 포함되지 않는 경우
if (auctionResult.isEmpty()) {
log.info("Auction Result is not exist. not bidder");
return AuctionResultResponseVo.notBidder();
}

// 낙찰자에 포함된 경우
log.info("Auction Result >>> {}", auctionResult.toString());
return AuctionResultResponseVo.builder()
.isBidder(true)
.price(auctionResult.get().getPrice())
.build();
}

private void updateRoundInfo(RoundInfo roundInfo) {
RoundInfo updatedRoundInfo;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.skyhorsemanpower.auction.data.vo;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;

@Getter
@NoArgsConstructor
public class AuctionResultResponseVo {
private boolean isBidder;
private BigDecimal price;

@Builder
public AuctionResultResponseVo(boolean isBidder, BigDecimal price) {
this.isBidder = isBidder;
this.price = price;
}

public static AuctionResultResponseVo notBidder() {
return AuctionResultResponseVo.builder()
.isBidder(false)
.price(BigDecimal.ZERO)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.skyhorsemanpower.auction.domain;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.math.BigDecimal;
import java.util.List;

@Getter
@NoArgsConstructor
@ToString
@Document(collection = "auction_result")
public class AuctionResult {
@Id
private String auctionResultId;

private String auctionUuid;
private List<String> memberUuids;
private BigDecimal price;

@Builder
public AuctionResult(String auctionUuid, List<String> memberUuids, BigDecimal price) {
this.auctionUuid = auctionUuid;
this.memberUuids = memberUuids;
this.price = price;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.skyhorsemanpower.auction.common.exception.CustomException;
import com.skyhorsemanpower.auction.common.exception.ResponseStatus;
import com.skyhorsemanpower.auction.data.dto.OfferBiddingPriceDto;
import com.skyhorsemanpower.auction.data.vo.AuctionResultResponseVo;
import com.skyhorsemanpower.auction.data.vo.OfferBiddingPriceRequestVo;
import com.skyhorsemanpower.auction.data.vo.RoundInfoResponseVo;
import com.skyhorsemanpower.auction.domain.RoundInfo;
Expand Down Expand Up @@ -95,7 +96,8 @@ public Flux<RoundInfoResponseVo> auctionPage(
@Operation(summary = "경매 페이지 입장 시 사용되는 API", description = "경매 페이지 최초 진입 시 현재 데이터 조회")
public SuccessResponse<RoundInfo> initialAuctionPage(
@PathVariable("auctionUuid") String auctionUuid) {
return new SuccessResponse<>(roundInfoRepository.findFirstByAuctionUuidOrderByCreatedAtDesc(auctionUuid).orElseThrow(
return new SuccessResponse<>(roundInfoRepository.
findFirstByAuctionUuidOrderByCreatedAtDesc(auctionUuid).orElseThrow(
() -> new CustomException(ResponseStatus.NO_DATA)));
}

Expand All @@ -117,4 +119,13 @@ public SuccessResponse<Object> auctionStateChangeTrue(
auctionService.auctionStateChangeTrue(auctionUuid);
return new SuccessResponse<>(null);
}

// 유저에 따른 경매 결과 조회
@GetMapping("/result/{auctionUuid}")
@Operation(summary = "경매 결과 조회 API", description = "유저가 경매에 낙찰됐는가를 조회")
public SuccessResponse<AuctionResultResponseVo> auctionResult(
@RequestHeader String uuid,
@PathVariable("auctionUuid") String auctionUuid) {
return new SuccessResponse<>(auctionService.auctionResult(uuid, auctionUuid));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.skyhorsemanpower.auction.common.exception.ResponseStatus;
import com.skyhorsemanpower.auction.domain.AuctionCloseState;
import com.skyhorsemanpower.auction.domain.AuctionHistory;
import com.skyhorsemanpower.auction.domain.AuctionResult;
import com.skyhorsemanpower.auction.domain.RoundInfo;
import com.skyhorsemanpower.auction.kafka.KafkaProducerCluster;
import com.skyhorsemanpower.auction.kafka.Topics;
Expand All @@ -13,6 +14,7 @@
import com.skyhorsemanpower.auction.quartz.data.MemberUuidsAndPrice;
import com.skyhorsemanpower.auction.repository.AuctionCloseStateRepository;
import com.skyhorsemanpower.auction.repository.AuctionHistoryRepository;
import com.skyhorsemanpower.auction.repository.AuctionResultRepository;
import com.skyhorsemanpower.auction.repository.RoundInfoRepository;
import com.skyhorsemanpower.auction.status.AuctionStateEnum;
import lombok.RequiredArgsConstructor;
Expand All @@ -35,6 +37,7 @@ public class AuctionClose implements Job {
private final AuctionHistoryRepository auctionHistoryRepository;
private final RoundInfoRepository roundInfoRepository;
private final AuctionCloseStateRepository auctionCloseStateRepository;
private final AuctionResultRepository auctionResultRepository;

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
Expand Down Expand Up @@ -116,6 +119,14 @@ public void execute(JobExecutionContext context) throws JobExecutionException {
.auctionUuid(auctionUuid)
.auctionCloseState(true)
.build());

// 경매 결과 저장
auctionResultRepository.save(AuctionResult.builder()
.auctionUuid(auctionUuid)
.memberUuids(memberUuids.stream().toList())
.price(price)
.build());
log.info("Auction Result Save!");
}

private MemberUuidsAndPrice getMemberUuidsAndPrice(int round, String auctionUuid, long numberOfParticipants) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.skyhorsemanpower.auction.repository;

import com.skyhorsemanpower.auction.domain.AuctionResult;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface AuctionResultRepository extends MongoRepository<AuctionResult, String> {
Optional<AuctionResult> findByAuctionUuidAndMemberUuidsContains(String auctionUuid, String memberUuid);
}

0 comments on commit c79fa57

Please sign in to comment.