Saltar al contenido
← El bug de la semana

El bug de la semana · 26 de octubre de 2026

La paginación que pierde el último elemento

Un endpoint de listado en una API REST · Lógica · dificultad 1/3

Un compañero le pidió al asistente de IA: "Escribe una función paginate(items, page, pageSize) para nuestro endpoint de listado. Las páginas empiezan en 1. Devuelve los elementos de la página pedida más la información de paginación."

El código llegó en treinta segundos, con tests que pasan. El contrato que promete el docstring:

  • page empieza en 1; pageSize es el número máximo de elementos por página.
  • items contiene los elementos de la página pedida, en su orden original.
  • totalPages es el número de páginas necesarias para todos los elementos.
  • hasNext es true cuando hay una página después de la pedida.

Revísalo antes de que se integre.

Sin cuenta. Sin pistas. El reloj está corriendo.0 s

Haz clic en la línea (o las líneas) donde está el defecto, elige su categoría y envía. Con el teclado: flechas para moverte, Espacio para marcar. En este modo el código es de solo lectura.

1export type Page<T> = {
2 items: T[];
3 page: number;
4 pageSize: number;
5 totalItems: number;
6 totalPages: number;
7 hasNext: boolean;
8};
9
10/**
11 * Returns page `page` (starting at 1) of `items`, with `pageSize` items per page.
12 */
13export function paginate<T>(items: T[], page: number, pageSize: number): Page<T> {
14 const totalItems = items.length;
15 const totalPages = Math.floor(totalItems / pageSize);
16 const start = (page - 1) * pageSize;
17 const end = start + pageSize;
18 return {
19 items: items.slice(start, end),
20 page,
21 pageSize,
22 totalItems,
23 totalPages,
24 hasNext: page < totalPages,
25 };
26}
0 líneas marcadas