query('group_by', 'ticket')); if (! in_array($groupBy, ['ticket', 'entry'], true)) { $groupBy = 'ticket'; } /** @var LengthAwarePaginator $paginator */ $paginator = $groupBy === 'entry' ? $this->queryService->paginateEntries($draw, $request, $p['page'], $p['perPage']) : $this->queryService->paginateByTicket($draw, $request, $p['page'], $p['perPage']); $currencyCode = (string) (TicketOrder::query() ->where('draw_id', $draw->id) ->value('currency_code') ?? ''); $rowMapper = $groupBy === 'entry' ? fn (RiskPoolLockLog $log): array => $this->entryRow($log) : fn (object $row): array => $this->ticketRow($row); return AdminApiList::jsonWith($paginator, $rowMapper, [ 'draw_id' => (int) $draw->id, 'draw_no' => $draw->draw_no, 'currency_code' => $currencyCode !== '' ? $currencyCode : null, 'group_by' => $groupBy, ]); } /** @return array */ private function entryRow(RiskPoolLockLog $log): array { return [ 'id' => (int) $log->id, 'provider_code' => $log->provider_code ?? BetProvider::DEFAULT_CODE, 'normalized_number' => $log->normalized_number, 'action_type' => $log->action_type, 'amount' => (int) $log->amount, 'source_reason' => $log->source_reason, 'ticket_item_id' => $log->ticket_item_id, 'ticket_no' => $log->ticketItem?->ticket_no, 'play_code' => $log->ticketItem?->play_code, 'player_id' => $log->ticketItem?->player_id, 'created_at' => $log->created_at?->toIso8601String(), ]; } /** @return array */ private function ticketRow(object $row): array { $lastAt = $row->last_at ?? null; return [ 'provider_code' => (string) ($row->provider_code ?? BetProvider::DEFAULT_CODE), 'ticket_item_id' => (int) $row->ticket_item_id, 'ticket_no' => (string) $row->ticket_no, 'play_code' => (string) $row->play_code, 'original_number' => (string) $row->original_number, 'combination_count' => (int) $row->combination_count, 'player_id' => (int) $row->player_id, 'number_count' => (int) $row->number_count, 'lock_entry_count' => (int) $row->lock_entry_count, 'release_entry_count' => (int) $row->release_entry_count, 'total_lock_amount' => (int) $row->total_lock_amount, 'total_release_amount' => (int) $row->total_release_amount, 'last_at' => is_string($lastAt) ? $lastAt : null, ]; } }