Skip to content

Archivos de la Carpeta lib

La carpeta src/lib contiene librerías y utilidades genéricas que no encajan directamente en otras categorías más específicas (como controladores o servicios). Estos archivos suelen ofrecer funcionalidad de apoyo o herramientas transversales que pueden ser reutilizadas en distintas partes de la aplicación para operaciones comunes y estandarizadas.

json.response.ts

Este archivo proporciona una utilidad para construir respuestas HTTP estandarizadas en formato JSON.

  • Descripción: Define el tipo JsonResponse y una función jsonResponse que permite crear objetos de respuesta con un código de estado, un cuerpo (payload) y encabezados, asegurando que el Content-Type sea siempre application/json por defecto. Incluye una validación para el código de estado.
  • Propósito: Estandarizar el formato de las respuestas JSON en toda la API, facilitando la consistencia y la legibilidad del código al centralizar la construcción de estas respuestas. También añade una capa de validación para los códigos de estado HTTP.
  • Funcionalidad:
    • JsonResponse<T>: Un tipo genérico que define la estructura esperada de una respuesta JSON, incluyendo statusCode, body (tipificado con T) y headers opcionales.
    • jsonResponse<T>(...): Una función que toma un código de estado, un cuerpo de respuesta y encabezados opcionales para construir y retornar un objeto JsonResponse.
    • Validación de código de estado: Asegura que el statusCode proporcionado esté dentro del rango válido (100-599) para HTTP.
  • Rol en la aplicación: Actúa como un constructor de respuestas HTTP robusto y predecible. Su uso garantiza que todas las respuestas JSON de la API sigan un formato uniforme, lo que es invaluable para el frontend que consume la API y para cualquier otra integración, simplificando el parseo y manejo de las respuestas.
ts
type JsonResponse<T> = {
  statusCode: number;
  body: T;
  headers?: Record<string, string>;
};

export function jsonResponse<T>(
  statusCode: number,
  body: T,
  headers: Record<string, string> = { "Content-Type": "application/json" }
): JsonResponse<T> {
  /*
   * Valida que el statusCode HTTP esté dentro del rango válido (100-599).
   * Si el código es inválido, lanza un error para detener la ejecución.
   */
  if (statusCode < 100 || statusCode > 599) {
    throw new Error("Invalid status code. It must be between 100 and 599.");
  }

  /*
   * Retorna un objeto con la estructura de JsonResponse<T>.
   * Este objeto contiene el código de estado, el cuerpo de la respuesta
   * y los encabezados (por defecto, Content-Type: application/json).
   */
  return {
    statusCode,
    body,
    headers,
  };
}