Files
core/hwe/sammo/API/Auction/GetUniqueItemAuctionDetail.php
T
2022-06-09 01:21:21 +09:00

86 lines
2.2 KiB
PHP

<?php
namespace sammo\API\Auction;
use sammo\Session;
use DateTimeInterface;
use sammo\DB;
use sammo\DTO\AuctionBidItem;
use sammo\DTO\AuctionInfo;
use sammo\Enums\AuctionType;
use sammo\Validator;
class GetUniqueItemAuctionDetail extends \sammo\BaseAPI
{
public function validateArgs(): ?string
{
$v = new Validator($this->args);
$v->rule('required', [
'auction_id',
])
->rule('integer', 'auction_id');
if (!$v->validate()) {
return $v->errorStr();
}
$this->args['auction_id'] = (int)$this->args['auction_id'];
return null;
}
public function getRequiredSessionMode(): int
{
return static::REQ_GAME_LOGIN;
}
public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag)
{
$db = DB::db();
$generalID = $session->generalID;
$auctionID = $this->args['auction_id'];
$rawAuction = $db->queryFirstRow(
'SELECT * FROM `ng_auction` WHERE `type` = %s AND `auction_id` = %s',
AuctionType::UniqueItem,
$auctionID
);
if (!$rawAuction) {
return '선택한 경매가 없습니다.';
}
$auction = AuctionInfo::fromArray($rawAuction);
/** @var AuctionBidItem[] */
$bidList = array_map(fn ($raw) => AuctionBidItem::fromArray($raw), $db->query(
'SELECT * FROM `ng_auction_bid` WHERE `auction_id` = %s ORDER BY `amount` DESC',
$auctionID
) ?? []);
$responseBid = [];
foreach ($bidList as $bid) {
$responseBid[] = [
'generalName' => $bid->aux->generalName,
'amount' => $bid->amount,
'isCallerHighestBidder' => $bid->generalID === $generalID,
'date' => $bid->date,
];
}
return [
'result' => true,
'auction' => [
'id' => $auction->id,
'finished' => $auction->finished,
'title' => $auction->detail->title,
'target' => $auction->target,
'isCallerHost' => $auction->hostGeneralID === $generalID,
'hostName' => $auction->detail->hostName,
'remainCloseDateExtensionCnt' => $auction->detail->remainCloseDateExtensionCnt,
'availableLatestBidCloseDate' => $auction->detail->availableLatestBidCloseDate,
],
'bidList' => $responseBid,
];
}
}