Код Middle HTTP-сервер, Express, NestJS спрашивают часто обновлено

Курсорная пагинация по (created_at, id)

Условие

Напиши paginate(items, limit, cursor). items уже отсортированы по createdAt убыванию, при равенстве по id убыванию (как ORDER BY created_at DESC, id DESC). cursor это null (первая страница) или строка, которую ты сам вернул в прошлый раз.

Верни { items: [...], nextCursor }: до limit элементов строго после позиции курсора и курсор следующей страницы (null, если дальше ничего нет). Курсор кодирует пару createdAt, id последнего элемента страницы строкой JSON.stringify([createdAt, id]) (в проде её ещё упаковывают в base64url, здесь без этого). Ищи позицию по значениям, а не по индексу: между запросами элементы могут удаляться и добавляться.

Что проверяют тесты

  • листание до конца

  • ровно limit элементов: курсора нет

  • вставка в начало не сдвигает страницу

  • удаление элемента курсора не ломает

  • одинаковые createdAt разводятся по id

  • курсор это JSON пары

  • пустой список

Как подойти

Подсказки: 2
  1. Условие «после курсора» для сортировки по убыванию: createdAt < c или (createdAt === c и id < id0).
  2. Есть ли следующая страница: осталось больше, чем limit.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.