integer('per_page', 25), 1), 100); $drawNo = trim((string) $request->query('draw_no', '')); $status = trim((string) $request->query('status', '')); $q = Draw::query()->orderByDesc('draw_time')->orderByDesc('id'); if ($drawNo !== '') { $q->where('draw_no', 'like', '%'.$drawNo.'%'); } if ($status !== '') { $q->where('status', $status); } /** @var \Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator */ $paginator = $q->paginate($perPage); return ApiResponse::success([ 'items' => collect($paginator->items())->map(fn (Draw $row) => $this->row($row))->all(), 'meta' => [ 'current_page' => $paginator->currentPage(), 'per_page' => $paginator->perPage(), 'total' => $paginator->total(), 'last_page' => $paginator->lastPage(), ], ]); } /** @return array */ private function row(Draw $draw): array { return [ 'id' => (int) $draw->id, 'draw_no' => $draw->draw_no, 'business_date' => $draw->business_date instanceof Carbon ? $draw->business_date->format('Y-m-d') : (string) $draw->business_date, 'sequence_no' => (int) $draw->sequence_no, 'status' => $draw->status, 'start_time' => $draw->start_time?->toIso8601String(), 'close_time' => $draw->close_time?->toIso8601String(), 'draw_time' => $draw->draw_time?->toIso8601String(), 'cooling_end_time' => $draw->cooling_end_time?->toIso8601String(), 'result_source' => $draw->result_source, 'current_result_version' => (int) $draw->current_result_version, 'settle_version' => (int) $draw->settle_version, 'is_reopened' => (bool) $draw->is_reopened, 'updated_at' => $draw->updated_at?->toIso8601String(), ]; } }