ZipcodesService
Descripción
El ZipcodesService es un servicio que permite calcular la disponibilidad de envío para un código postal específico. Este servicio implementa un patrón singleton y utiliza el almacenamiento de sesión para cachear resultados de consultas previas.
Importaciones
import {getSessionItem, setSessionItem} from "../utils/session-storage";
import {DEFAULT_SESSION_EXPIRATION} from "lib/constants";
Métodos
calculate(zipCode)
Descripción
Verifica si un código postal está dentro del rango de zonas de entrega disponibles. Este método primero busca en el almacenamiento de sesión para verificar si ya existe información para el código postal proporcionado, y si no se encuentra, realiza una solicitud a la API para obtener esta información.
Parámetros
zipCode(string): El código postal a verificar.
Retorno
- Devuelve un objeto que contiene información sobre los rangos de códigos postales disponibles.
Proceso
- Verifica si existe información del código postal en el almacenamiento de sesión.
- Si existe y no ha expirado, devuelve esa información.
- Si no existe o ha expirado, realiza una solicitud a la API.
- Almacena el resultado en el almacenamiento de sesión con un tiempo de expiración definido.
- Devuelve el resultado.
Uso en la aplicación
Este método es utilizado principalmente en el componente CalculateShipping dentro de ProductView.js para determinar si un producto puede ser enviado a un código postal específico y calcular los tiempos estimados de entrega.
Implementación interna
Servicio de API interna
El servicio utiliza una función interna gaboService para realizar las solicitudes a la API:
const gaboService = async (path, opts) => await fetch(`/api/zipcode/${path}`, opts);
Almacenamiento en caché
Para optimizar el rendimiento, el servicio almacena los resultados en el almacenamiento de sesión del navegador utilizando el formato:
zipcode_availability_${zipCode}
La información almacenada expira según el valor definido en la constante DEFAULT_SESSION_EXPIRATION (60 segundos).