attributes->get('lottery_player'); $perPage = max(1, min(50, (int) $request->query('per_page', 20))); $page = max(1, (int) $request->query('page', 1)); $drawNo = $request->query('draw_no'); $query = TicketItem::query() ->where('ticket_items.player_id', $player->id) ->with([ 'draw:id,draw_no,business_date', 'order:id,order_no,currency_code,created_at', ]) ->orderByDesc('ticket_items.id'); if (is_string($drawNo) && $drawNo !== '') { $drawNo = trim($drawNo); $query->whereHas('draw', fn ($q) => $q->where('draw_no', $drawNo)); } $paginator = $query->paginate(perPage: $perPage, page: $page); $items = collect($paginator->items())->map(function (TicketItem $row): array { return [ 'ticket_no' => $row->ticket_no, 'order_no' => $row->order?->order_no, 'draw_no' => $row->draw?->draw_no, 'currency_code' => $row->order?->currency_code, 'play_code' => $row->play_code, 'original_number' => $row->original_number, 'total_bet_amount' => (int) $row->total_bet_amount, 'actual_deduct_amount' => (int) $row->actual_deduct_amount, 'status' => $row->status, 'win_amount' => (int) $row->win_amount, 'jackpot_win_amount' => (int) $row->jackpot_win_amount, 'placed_at' => $row->order?->created_at?->toIso8601String(), 'updated_at' => $row->updated_at?->toIso8601String(), ]; })->values()->all(); return ApiResponse::success([ 'items' => $items, 'total' => $paginator->total(), 'page' => $paginator->currentPage(), 'per_page' => $paginator->perPage(), 'last_page' => $paginator->lastPage(), ]); } }