fix: 종료된 유니크 경매 입찰시 버그

This commit is contained in:
2022-06-10 00:38:34 +09:00
parent f95ee8fab8
commit e5ba980865
+22 -11
View File
@@ -129,6 +129,10 @@ class AuctionUniqueItem extends Auction
public function bid(int $amount, bool $tryExtendCloseDate): ?string public function bid(int $amount, bool $tryExtendCloseDate): ?string
{ {
if($this->info->finished){
return '경매가 종료되었습니다.';
}
$db = DB::db(); $db = DB::db();
/** @var AuctionInfo[] */ /** @var AuctionInfo[] */
$openUniqueAuctions = array_map(fn ($raw) => AuctionInfo::fromArray($raw), $db->query( $openUniqueAuctions = array_map(fn ($raw) => AuctionInfo::fromArray($raw), $db->query(
@@ -140,18 +144,25 @@ class AuctionUniqueItem extends Auction
foreach ($openUniqueAuctions as $auction) { foreach ($openUniqueAuctions as $auction) {
$auctionIDList[] = $auction->id; $auctionIDList[] = $auction->id;
} }
$db = DB::db(); $db = DB::db();
$rawHighestBids = Util::convertArrayToDict($db->query( if($auctionIDList){
'SELECT bid.* FROM `ng_auction_bid` bid INNER JOIN ( $rawHighestBids = Util::convertArrayToDict($db->query(
SELECT `auction_id`, MAX(`amount`) as `max_amount` 'SELECT bid.* FROM `ng_auction_bid` bid INNER JOIN (
FROM `ng_auction_bid` SELECT `auction_id`, MAX(`amount`) as `max_amount`
WHERE `auction_id` IN %li FROM `ng_auction_bid`
GROUP BY `auction_id` WHERE `auction_id` IN %li
ORDER BY `amount` GROUP BY `auction_id`
) AS max_bid ORDER BY `amount`
ON bid.`auction_id` = max_bid.`auction_id` AND bid.`amount` = max_bid.`max_amount`', ) AS max_bid
$auctionIDList, ON bid.`auction_id` = max_bid.`auction_id` AND bid.`amount` = max_bid.`max_amount`',
) ?? [], 'auction_id'); $auctionIDList,
) ?? [], 'auction_id');
}
else{
$rawHighestBids = [];
}
/** @var array<int,AuctionBidItem> */ /** @var array<int,AuctionBidItem> */
$highestBids = Util::mapWithKey( $highestBids = Util::mapWithKey(
fn ($auctionID, $bid) => AuctionBidItem::fromArray($bid), fn ($auctionID, $bid) => AuctionBidItem::fromArray($bid),