id; $totalBetMinor = (int) TicketOrder::query()->where('draw_id', $drawId)->sum('total_actual_deduct'); $orderCount = (int) TicketOrder::query()->where('draw_id', $drawId)->count(); $itemCount = (int) TicketItem::query()->where('draw_id', $drawId)->count(); $currencyCode = (string) (TicketOrder::query() ->where('draw_id', $drawId) ->value('currency_code') ?? ''); $totalWinMinor = (int) TicketItem::query()->where('draw_id', $drawId)->sum('win_amount'); $totalJackpotWinMinor = (int) TicketItem::query()->where('draw_id', $drawId)->sum('jackpot_win_amount'); $totalPayoutMinor = $totalWinMinor + $totalJackpotWinMinor; $approxHouseGrossMinor = $totalBetMinor - $totalPayoutMinor; $batches = SettlementBatch::query() ->where('draw_id', $drawId) ->orderByDesc('id') ->limit(30) ->get(['id', 'status', 'total_ticket_count', 'total_win_count', 'total_payout_amount', 'total_jackpot_payout_amount', 'finished_at']); $batchRows = $batches->map(static function (SettlementBatch $b): array { return [ 'id' => (int) $b->id, 'status' => $b->status, 'total_ticket_count' => (int) $b->total_ticket_count, 'total_win_count' => (int) $b->total_win_count, 'total_payout_amount' => (int) $b->total_payout_amount, 'total_jackpot_payout_amount' => (int) $b->total_jackpot_payout_amount, 'finished_at' => $b->finished_at?->toIso8601String(), ]; })->values()->all(); return ApiResponse::success([ 'draw_id' => $drawId, 'draw_no' => $draw->draw_no, 'draw_status' => $draw->status, 'currency_code' => $currencyCode !== '' ? $currencyCode : null, 'order_count' => $orderCount, 'ticket_item_count' => $itemCount, 'total_bet_minor' => $totalBetMinor, 'total_win_payout_minor' => $totalWinMinor, 'total_jackpot_win_minor' => $totalJackpotWinMinor, 'total_payout_minor' => $totalPayoutMinor, 'approx_house_gross_minor' => $approxHouseGrossMinor, 'settlement_batches' => $batchRows, ]); } }