orderByDesc('operated_at'); if ($request->filled('admin_user_id')) { $query->where('admin_user_id', (int) $request->query('admin_user_id')); } if ($kw = $request->query('keyword')) { $query->where(function ($q) use ($kw) { $q->where('api_path', 'like', "%{$kw}%") ->orWhere('action_label', 'like', "%{$kw}%") ->orWhere('operator_name', 'like', "%{$kw}%"); }); } if ($request->filled('from')) { $query->where('operated_at', '>=', $request->query('from')); } if ($request->filled('to')) { $query->where('operated_at', '<=', $request->query('to')); } $paginator = $query->paginate((int) $request->query('page_size', 20))->withQueryString(); $paginator->getCollection()->transform(function (OperationLog $log) { return [ 'id' => $log->id, 'admin_user_id' => $log->admin_user_id, 'operator_name' => $log->operator_name, 'operated_at' => $log->operated_at?->toIso8601String(), 'http_method' => $log->http_method, 'api_path' => $log->api_path, 'action_label' => $log->action_label, 'ip' => $log->ip, 'response_code' => $log->response_code, 'duration_ms' => $log->duration_ms, ]; }); return $this->paginated($paginator); } }