integer('per_page', 25), 1), 100); $page = max((int) $request->integer('page', 1), 1); $module = trim((string) $request->query('module_code', '')); $action = trim((string) $request->query('action_code', '')); $operatorType = trim((string) $request->query('operator_type', '')); $q = AuditLog::query()->orderByDesc('id'); if ($module !== '') { $q->where('module_code', $module); } if ($action !== '') { $q->where('action_code', $action); } if ($operatorType !== '') { $q->where('operator_type', $operatorType); } $paginator = $q->paginate($perPage, ['*'], 'page', $page); return ApiResponse::success([ 'items' => collect($paginator->items())->map(fn (AuditLog $r) => $this->row($r))->all(), 'meta' => [ 'current_page' => $paginator->currentPage(), 'per_page' => $paginator->perPage(), 'total' => $paginator->total(), 'last_page' => $paginator->lastPage(), ], ]); } /** @return array */ private function row(AuditLog $r): array { return [ 'id' => (int) $r->id, 'operator_type' => $r->operator_type, 'operator_id' => (int) $r->operator_id, 'module_code' => $r->module_code, 'action_code' => $r->action_code, 'target_type' => $r->target_type, 'target_id' => $r->target_id, 'before_json' => $r->before_json, 'after_json' => $r->after_json, 'ip' => $r->ip, 'user_agent' => $r->user_agent, 'created_at' => $r->created_at?->toIso8601String(), ]; } }