invalidateCacheValue(self::LAST_AUCTION_ID_KEY); $auctionID = ($gameStor->getValue(self::LAST_AUCTION_ID_KEY) ?? 0) + 1; $gameStor->setValue(self::LAST_AUCTION_ID_KEY, $auctionID); return $auctionID; } static public function openAuction(AuctionInfo $info) { $db = DB::db(); $auctionID = $info->id; $auctionStor = KVStorage::getStorage($db, 'auction'); $auctionStor->setValue("id_{$auctionID}", $info->toArray()); } public function __construct(private readonly int $auctionID) { $db = DB::db(); $auctionStor = KVStorage::getStorage($db, 'auction'); $rawBettingInfo = $auctionStor->getValue("id_{$auctionID}"); if ($rawBettingInfo === null) { throw new \RuntimeException("해당 경매가 없습니다: {$auctionID}"); } $this->info = new AuctionInfo($rawBettingInfo); } }