Skip to content

refactor(backend): unificar paginación en servicios #217

Description

@masch

Se duplican las constantes y lógica de paginación en los servicios del backend.

Problema

Actualmente tanto reservation.service.ts como order.service.ts definen IDÉNTICAS constantes y lógica:

// Duplicado en ambos archivos
const PAGINATION = {
  DEFAULT_LIMIT: 20,
  MAX_LIMIT: 100,
} as const;

// Lógica también duplicada:
const limit = Math.min(filters.limit ?? PAGINATION.DEFAULT_LIMIT, PAGINATION.MAX_LIMIT);

Además, el parseo de query params (limit, offset) en las rutas se repite manualmente en cada handler.

Solución propuesta

Crear un helper compartido estilo createPagination() que:

  1. Centralice las constantes DEFAULT_LIMIT, MAX_LIMIT
  2. Provea una función parsePagination() que extraiga limit y offset de query params con validación (clamping)
  3. Reemplace las definiciones inline en ambos servicios y rutas

Archivos afectados

  • apps/backend/src/services/reservation.service.ts (constantes + lógica inline)
  • apps/backend/src/services/order.service.ts (constantes + lógica inline)
  • apps/backend/src/routes/reservations.ts (parseo query params)
  • apps/backend/src/routes/orders.ts (parseo query params)
  • Nuevo: apps/backend/src/utils/pagination.ts
  • Nuevo: apps/backend/src/utils/pagination.test.ts

Alternativas consideradas

  • Mantenerlo así y seguir duplicando en cada service nuevo — no escala
  • Helper solo para constantes sin parseo — resuelve poco

Notas

Esto también aplica para el futuro: si se agrega un nuevo servicio con paginación, que use este helper en lugar de copiar.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions