Skip to main content

API de Historial de Inventario

Este archivo define una función que interactúa con la API del backend para obtener el historial de cambios en el inventario de un usuario específico. Utiliza una instancia de Axios personalizada y transforma los datos para ser utilizados fácilmente en la interfaz.


🔍 Ubicación

src/api/historial.ts


📦 Dependencias utilizadas

import axiosInstance from "../utils/axiosInstance";
import type { HistorialDTO } from "../types/Historial";
import type { InventoryChange } from "../types/Inventory";
  • axiosInstance: Instancia preconfigurada de Axios para realizar las solicitudes HTTP.
  • HistorialDTO: Tipo de dato recibido desde el backend con la estructura original del historial.
  • InventoryChange: Tipo utilizado internamente en el frontend para mostrar los cambios del inventario de forma más intuitiva.

🔧 Función principal

🕘 getHistorialInventario(idUsuario: number): Promise<InventoryChange[]>

export async function getHistorialInventario(idUsuario: number): Promise<InventoryChange[]> {
const response = await axiosInstance.get(`/historial/usuario/${idUsuario}`);

return response.data.map((h: HistorialDTO) => ({
id: h.id.toString(),
productName: h.nombreProducto,
action:
h.accion === "agregado"
? "added"
: h.accion === "modificado"
? "modified"
: "deleted",
previousQuantity: h.cantidad_anterior,
newQuantity: h.cantidad_nueva,
previousPrice: h.precio_anterior,
newPrice: h.precio_nuevo,
changeDate: new Date(h.fechaCambio),
}));
}

Esta función realiza una solicitud GET al endpoint /historial/usuario/{idUsuario} para obtener el historial del usuario. Luego transforma cada entrada del historial (HistorialDTO) a una estructura más usable (InventoryChange).


🗃️ Transformación de datos

Campo original (HistorialDTO)Campo transformado (InventoryChange)Descripción
idid (como string)Identificador del cambio
nombreProductoproductNameNombre del producto afectado
accionaction (added / modified / deleted)Tipo de acción en formato legible
cantidad_anteriorpreviousQuantityCantidad antes del cambio
cantidad_nuevanewQuantityCantidad después del cambio
precio_anteriorpreviousPricePrecio anterior
precio_nuevonewPricePrecio actualizado
fechaCambiochangeDate (Date)Fecha en la que ocurrió el cambio

⚠️ La transformación de accion permite utilizar términos en inglés directamente en la interfaz de usuario para estandarizar los textos (added, modified, deleted).


🚀 Ejemplo de uso

import { getHistorialInventario } from "../api/historial";

const historial = await getHistorialInventario(5);

console.log(historial);
/*
[
{
id: "12",
productName: "Papel higiénico",
action: "modified",
previousQuantity: 20,
newQuantity: 15,
previousPrice: 3.5,
newPrice: 3.8,
changeDate: 2025-08-05T21:00:00.000Z
},
...
]
*/

📝 Notas adicionales

  • Este archivo transforma la estructura cruda del backend en una forma más legible para el frontend.
  • Utiliza axiosInstance, lo que permite centralizar headers, baseURL y autenticación en un solo lugar.
  • Puede ser fácilmente adaptado si se agregan más campos al historial en el futuro.