$sortKeys [[컬럼, 방향], ...] * @param array $cursorColumns 이 도메인에서 커서로 허용한 실제 컬럼 * @param int $page 요청이 지목한 페이지 번호 (없으면 1) * @return bool 커서로 응답할 수 있으면 true */ public static function usesCursor(?string $cursor, array $sortKeys, array $cursorColumns, int $page = 1): bool { if (! KeysetPaginator::supports($sortKeys, $cursorColumns)) { return false; } if ($cursor !== null && $cursor !== '') { return true; } return $page <= 1; } /** * 정렬 이름을 정렬 키 배열로 바꿉니다. * * 확장이 선언한 `정렬이름 => [컬럼, 방향]` 맵을 코어가 해석합니다. 맵에 없는 이름은 * 커서로 처리할 수 없는 정렬(관련도순 등)로 보고 빈 배열을 돌려주며, * {@see self::usesCursor()} 가 이를 "커서 불가" 로 판정합니다. * * @param string $sort 요청이 보낸 정렬 이름 * @param array $sortMap 정렬 이름 → [컬럼, 방향] * @return array 정렬 키 배열 (해석 불가 시 빈 배열) */ public static function sortKeys(string $sort, array $sortMap): array { if (! array_key_exists($sort, $sortMap)) { return []; } return [$sortMap[$sort]]; } }