Balbuena, Fernando Nicolas
Espinola, Renzo Oscar
Giménez Ríos, Tatiana T.
Gutiérrez, Juana Natalia
Gutiérrez, Alejo Hernán
Gutiérrez, Juan Carlos
Gutiérrez, René Agustín
Iván, Matías
Rossi, Ludmila
Valdez, Carlos Federico
Valladares, Juan Ignacio
Este repositorio contiene una infraestructura de microservicios desarrollada con Spring Boot 3 y Java 17, que se divide en dos dominios principales: Infraestructura y Negocio. Aquí encontrarás información sobre cada uno de estos componentes y cómo se relacionan entre sí.
La infraestructura de microservicios se encarga de proporcionar las herramientas necesarias para que los microservicios de negocio funcionen de manera eficiente y escalable. En este repositorio, hemos implementado los siguientes componentes de infraestructura:
Spring Admin es una herramienta que proporciona un panel de administración para monitorear y gestionar los microservicios de manera centralizada. Puedes acceder al panel de administración de Spring Admin a través de la URL http://localhost:8762 una vez que los microservicios estén en ejecución.
a.Accede al panel de administración de Spring Admin para monitorear y gestionar los microservicios.
Eureka Discovery es un servicio de registro y descubrimiento que permite que los microservicios se registren automáticamente y se descubran entre sí. Esto facilita la comunicación entre los microservicios sin necesidad de conocer las ubicaciones exactas de los demás. Se accede través de la URL http://localhost:8761
Spring Config es un sistema de gestión de configuración que centraliza la configuración de todos los microservicios. Utilizamos un repositorio remoto para almacenar la configuración de los microservicios y garantizar la coherencia y la fácil administración de la configuración. Se accede través de la URL http://localhost:8888 User: admin Password: qwerty Development: Nos muestra las configuraciones para un ambiente de desarrollo
URL: Development
Production: Nos muestra las configuraciones para un ambiente de de produccion
URL: Production
El dominio de Negocio se compone de varios microservicios que gestionan diferentes aspectos de la aplicación. Aquí, se describen los principales microservicios de Negocio:
Utilizaremos la interfaz SWAGGER para visibilizar y realizar las pruebas sobre los endpoints
El microservicio CUSTOMER se encarga de la gestión de clientes y ofrece las siguientes funcionalidades:
- CRUD (Crear, Leer, Actualizar y Eliminar) para gestionar los datos de los clientes.
- Swagger UI se accede través de la URL http://localhost:8081/swagger-ui/index.html#/
El microservicio PRODUCT se encarga de la gestión de productos y ofrece las siguientes funcionalidades:
- CRUD (Crear, Leer, Actualizar y Eliminar) para gestionar los datos de los productos.
- Métodos para controlar el stock de productos y gestionar su disponibilidad. Se accede través de la URL http://localhost:8083/swagger-ui/index.html#/
El microservicio TRANSACTIONS se encarga de gestionar las transacciones de compra de productos y vincular datos de clientes (CUSTOMER) con los productos comprados (PRODUCT). Sus funcionalidades incluyen:
- Registro de transacciones de compra.
- Vinculación de datos de clientes y productos en cada transacción. Se accede través de la URL http://localhost:8082/swagger-ui/index.html#/
Mediante la configuracion seteada previamente en el docker-compose.yml podemos optar en dos modos de persistencia de datos dependiendo de la rigurosidad de las pruebas:
H2 es una base de datos relacional ligera, rápida y versátil, adecuada para una variedad de aplicaciones:
-
Portabilidad: H2 puede funcionar en diferentes plataformas y sistemas operativos, lo que facilita su implementación en una variedad de entornos.
-
Rendimiento: Es conocida por su rendimiento rápido y eficiente, lo que la convierte en una opción popular para aplicaciones que requieren consultas rápidas y procesamiento de datos.
-
Modo Embebido: Puede integrarse fácilmente en aplicaciones Java como una biblioteca, lo que significa que puede ejecutarse en el mismo proceso que la aplicación, sin necesidad de un servidor de base de datos separado.
-
Compatibilidad con Estándares SQL: H2 es compatible con los estándares SQL ANSI, lo que facilita la migración de otras bases de datos relacionales a H2.
-
Características Avanzadas: A pesar de su tamaño compacto, H2 ofrece muchas características avanzadas como compatibilidad con procedimientos almacenados, disparadores, encriptación y replicación.
-
Consola Web: H2 incluye una consola web fácil de usar que permite administrar y visualizar datos de manera gráfica.
<dependencies> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> </dependencies>
MySQL es un sistema de gestión de bases de datos relacional (RDBMS por sus siglas en inglés) de código abierto y gratuito. Es uno de los sistemas de bases de datos más populares en el mundo y es ampliamente utilizado en aplicaciones web y empresariales.
-
Base de Datos Relacional: MySQL es un sistema de base de datos relacional, lo que significa que organiza los datos en tablas relacionadas entre sí. Cada tabla consta de filas y columnas, y se pueden establecer relaciones entre diferentes tablas utilizando claves primarias y foráneas.
-
Lenguaje SQL: MySQL utiliza Structured Query Language (SQL) para gestionar y manipular datos. SQL es un lenguaje estándar utilizado para crear, leer, actualizar y eliminar datos en bases de datos relacionales.
-
Multiusuario y Multihilo: MySQL es capaz de manejar múltiples usuarios concurrentes y múltiples conexiones al mismo tiempo. También es multihilo, lo que significa que puede realizar múltiples operaciones en paralelo para mejorar el rendimiento.
-
Escalabilidad: MySQL es altamente escalable, lo que significa que puede manejar grandes volúmenes de datos y un alto número de usuarios simultáneos. Es adecuado tanto para aplicaciones pequeñas como para grandes sistemas empresariales.
-
Portabilidad: MySQL es compatible con varias plataformas, incluyendo Windows, Linux, macOS y otras. Esto significa que una base de datos MySQL creada en un sistema operativo se puede transferir y utilizar en otro sistema operativo sin problemas.
-
Almacenamiento de Datos Seguro: MySQL proporciona funciones de seguridad robustas para proteger los datos, incluyendo la autenticación de usuarios, la autorización basada en roles y la encriptación de datos para mantener la confidencialidad.
-
Comunidad Activa: MySQL tiene una comunidad de usuarios y desarrolladores muy activa. Esto significa que hay una gran cantidad de recursos, documentación y soporte disponibles en línea.
-
Motor de Almacenamiento: MySQL permite utilizar diferentes motores de almacenamiento para sus tablas, como InnoDB (el motor de almacenamiento por defecto con soporte de transacciones ACID) y MyISAM (un motor de almacenamiento más antiguo, pero rápido para aplicaciones que no requieren transacciones complejas).
<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency>
Al inicializarse los microservicios se generara automaticamente la BD (Springboot) y las tablas correspondientes para cada microservicio de negocio
MySQL Workbench https://localhost:3001 (Productivo)
Tambien se cuenta con la posibildad de ingresar al aplicativo de MySQL Workbench mediante la siguiente URL: https://localhost:3001 (NOTA: prestar atencion al https posee la s al final)
-
Ingresar a la url https://localhost:3001
a. En caso de advertencia de seguridad realizar los siguientes pasos:
-
Clickear en Configuracion avanzada
-
Acceder a locahost
-
-
Si accedemos por primera vez al entorno de MySQL Workbench, debemos realizar la configuracion de la conexion con la BD a. Clickeamos en el + MySQL Connections y configuramos de la siguiente manera:
- Connection name: patitaspetshop connection
- hostname: host.docker.internal
- port: 3306
- username: root
- password: admin
Para utilizar esta infraestructura de microservicios, sigue estos pasos:
- Clona este repositorio a tu máquina local.
-
Es requerido tener previamente instaldo DOCKER y JAVA 17
-
Validar que en la estructura del proyecto este seteado SDK JAVA 17
-
Debemos crear las imagenes de docker mediante maven
a. Se debe correr el comando de mvn clean install a todos los microservicios comenzando por los de infraestructura y luego los de negocio.
b. Tambien mediante las tareas de maven que nos proporciona Intellij IDEA, CLEAN -> COMPILE -> INSTALL
c. Esto ira generando las imagenes de docker, se debe realizar solo una vez por cada microservicio.
-
Inicia los componentes de infraestructura y negocio (Spring Admin, Eureka Discovery, Spring Config, customer, product ,transaction) utilizando Docker Compose en modo daemon (background) con el siguiente comando:
Una vez realizado el proceso de maven en los 6 microservicios, se debera abrir una terminal en la path donde se encuentra el docker-compose, "..\Chaco Devs Team-Proyecto Integrador\ChacoDevsTeam_ProyectoIntegradorCuartoSemestre\ECOMMERCE PatitasPetshop\patitaspetshopparent>" y ejecutar el siguiente comando
1- Iniciar los contenedores dockerizados:
docker-compose up -d
Donde se iran iniciando cada microservicio en el orden determinado para que primero se levanten los de infraestructura y por ultimo los de negocio.
Cuando veamos en el log de consola que se registraron en Eureka los mcs de negocio, esto nos indicara que ya estan operativos para su uso.
bd-transactions | 2023-11-04T04:47:41.783Z INFO 1 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_BUSINESSDOMAIN-TRANSACTION/f9b7cd47c6eb:businessdomain-transaction:8082 - registration status: 204
id-eureka | 2023-11-04T04:47:42.331Z INFO 1 --- [nio-8761-exec-3] c.n.e.registry.AbstractInstanceRegistry : Registered instance BUSINESSDOMAIN-TRANSACTION/f9b7cd47c6eb:businessdomain-transaction:8082 with status UP (replication=true)
2- En caso de realizar alguna modificacion de codigo o propiedades a algun microservicio se debera ejecutar el comando:
docker-compose up -d --force-recreate
3- Si necesita detener los contenedores: docker-compose stop
4- Si necesita eliminar los volumenes: docker-compose rm
(Tener cuidado con el siguiente comando al eliminar un volumen puede perder la base de postgresql)
Recuerda configurar adecuadamente las propiedades de cada microservicio en el docker-compose para garantizar su correcto funcionamiento (Development/Production), tan solo cambiando un valor a una variable :
-Dspring.profiles.active=production
-Dspring.profiles.active=development
Como cada microservicio es independiente tenemos la chance de estar trabajando algunos en modo productivo o en modo desarrollo.
En este caso el microservicio de transacciones estara en un ambiente productivo, implica el uso de la configuracion de base de datos de MySQL
En este caso el microservicio de clientes estara en un ambiente de desarrollo, implica el uso de la configuracion de base de datos en memoria H2
Este proyecto utiliza la biblioteca React para construir una aplicación web relacionada con la venta de productos para mascotas. La aplicación cuenta con diferentes componentes que se encargan de funciones específicas, como la identificación de usuarios, la selección y visualización de productos, el proceso de entrega, y el registro de nuevos usuarios. Este código representa una aplicación que se comunica con un servidor a través de solicitudes HTTP utilizando Axios.
-Ubicarse en la carpeta ChacoDevsTeam_ProyectoIntegradorCuartoSemestre/ECOMMERCE PatitasPetshop/patitaspetshopfrontend/src y luego ejecutar la terminal.En ella el primer comando a utlizar será npm install,con el lograremos instalar/actualizar todas las dependencias necesarias. -Luego utilzizaremos el comando npm start,se utiliza para iniciar el servidor de desarrollo. Cuando ejecutas este comando en la terminal, se inicia un servidor local que sirve tu aplicación React y proporciona una URL a la que puedes acceder desde tu navegador. Este servidor de desarrollo facilita la visualización y prueba de tu aplicación durante el desarrollo.
- Asegúrate de tener todas las dependencias instaladas antes de ejecutar la aplicación.
- Para loguarse y poder cargar prodcutos se debe usar el usuario:admin@admin y contraseña: admin
- Algunas imagenes para cargar son: ALIMENTOS PARA PERROS
https://nutrican.com.ar/wp-content/uploads/2022/09/SIEGER-PUPPY-SMALL.png
🐱ALIMENTOS PARA GATOS
https://www.canrock.com.ar/8310-thickbox_default/cat-chow-gatitos.jpg
https://petshopmardelplata.com.ar/wp-content/uploads/2022/08/7613039947739_1.png
https://mascolandiapets.com/productos/producto-75267831/C7MOSKVe1Smny9JleLR3.png
🐶ACCESORIOS PARA PERRO
🐱ACCESORIOS PARA GATO
https://www.animal-factor.com/wp-content/uploads/2018/03/COLLAR-GATO-DIJE-ROSADO-1980x1980.png
https://mundoanimalsantafe.com.ar/wp-content/uploads/2022/01/pro-plan-kitten.png
- Descripción: Este componente representa la estructura visual de una tarjeta de producto.
- Props:
nombre
: Nombre del producto.precio
: Precio del producto.imagen
: URL de la imagen del producto.
- Estructura:
- Contenedor principal con la clase
.product-card
. - Contenedor de título con la clase
.card-title-cont
. - Etiqueta
h4
para el nombre del producto. - Etiqueta
img
para la imagen del producto. - Etiqueta
p
para mostrar el precio.
- Contenedor principal con la clase
-
Descripción: Este componente representa una colección de tarjetas de productos.
-
Props:
allProducts
: Array de objetos que contiene información sobre todos los productos.
-
Estructura:
- Mapea el array de productos y utiliza el componente
Card
para cada uno. - Cada tarjeta está envuelta en un enlace (
Link
) que redirige a la página de detalle del producto.
- Mapea el array de productos y utiliza el componente
- Descripción: Gestiona el carrito de compras, opciones de pago y realiza la compra.
- Funcionalidades:
- Muestra los productos en el carrito.
- Permite seleccionar el método de pago.
- Envia la orden de compra al servidor.
- Estructura:
- Utiliza el contexto del carrito y Redux para obtener y gestionar la información del carrito.
- Permite al usuario seleccionar entre Mercado Pago, Tarjeta de Crédito/Débito o Efectivo.
- Al confirmar la compra, redirige al usuario a la página de entrega.
- Descripción: Componente que gestiona la cantidad de productos a agregar al carrito.
- Props:
initial
: Cantidad inicial.stock
: Stock disponible.onAdd
: Función para agregar productos al carrito.
- Estructura:
- Botones para incrementar y decrementar la cantidad.
- Muestra la cantidad actual y un botón para agregar al carrito.
- Descripción: Muestra un producto en el carrito con opción para eliminarlo.
- Props:
product
: Objeto con información del producto.
- Estructura:
- Muestra la imagen, nombre, cantidad, precio unitario y subtotal del producto.
- Botón para eliminar el producto del carrito.
- Descripción: Barra de navegación con enlaces a diferentes secciones y opciones de inicio de sesión.
- Funcionalidades:
- Permite navegar a diversas secciones de la aplicación.
- Muestra opciones diferentes según si el usuario está o no autenticado.
- Descripción: Muestra el historial de compras del usuario.
- Funcionalidades:
- Obtiene el historial de compras y la información de los productos comprados.
- Muestra la fecha, monto, medio de pago y productos de cada transacción.
- Notas:
- Requiere la autenticación del usuario.
- Descripción: Barra de búsqueda que permite filtrar productos por nombre.
- Funcionalidades:
- Filtra productos por nombre.
- Permite mostrar todos los productos.
- Notas:
- Utiliza Redux para gestionar el estado de los productos filtrados.
- Descripción: Muestra opciones de navegación dependiendo del estado de inicio de sesión y el rol del usuario.
- Funcionalidades:
- Redirige a la página de administración si el usuario es un administrador.
- Redirige a la página de perfil si el usuario está autenticado.
- Archivos CSS proporcionan estilos para diferentes componentes.
- Utiliza imágenes para el logo, carrito y botón de búsqueda.
- Se hace uso de enrutamiento (
react-router-dom
) para la navegación entre páginas. - La comunicación con el servidor se realiza mediante solicitudes HTTP, utilizando Axios.
- Algunos componentes dependen del contexto (
useCarritoContexto
) para acceder a información global.
- getProducts Descripción: -Realiza una solicitud al servidor para obtener la lista de productos. -Actualiza el estado global con la información de los productos.
Uso: -Invocado al cargar la aplicación o al necesitar una actualización de productos. -Se dispara mediante la función dispatch de Redux.
- postUser Descripción: -Realiza una solicitud al servidor para registrar un nuevo cliente.
Uso: -Se utiliza cuando se completa un formulario de registro de usuario. -Avisa al usuario sobre el éxito o fracaso de la operación.
- postProducto Descripción: -Realiza una solicitud al servidor para agregar un nuevo producto.
Uso: -Se utiliza al completar un formulario para agregar un nuevo producto. -Proporciona una alerta indicando el resultado de la operación.
- postPago Descripción: -Realiza una solicitud al servidor para registrar una nueva transacción de pago.
Uso: -Se utiliza después de que un usuario confirma la compra. -Muestra en la consola la información del pago y un mensaje de éxito.
- alimentoByNombre Descripción: -Realiza una búsqueda por nombre de producto en el servidor.
-Actualiza el estado global con los productos que coinciden con la búsqueda. Uso: Se llama cuando el usuario realiza una búsqueda en la barra de búsqueda. Proporciona una alerta si no se encuentran productos.
Descripción: -El reducer maneja las actualizaciones del estado global de la aplicación. -Contiene un estado inicial con la lista de todos los productos, el carrito de compras y la consulta de búsqueda. -Se encarga de procesar las acciones y actualizar el estado en consecuencia. Acciones Manejadas: -GET_PRODUCTS: Actualiza la lista de todos los productos en el estado global.
Descripción: -La tienda (store) de Redux contiene el estado global de la aplicación. -Utiliza el middleware redux-thunk para permitir acciones asíncronas. -Se crea utilizando createStore de Redux y se proporciona el reducer.
El componente Accesorios
es una parte de la interfaz de usuario de una aplicación web construida con React. Este componente se encarga de mostrar y filtrar una lista de productos considerados como "accesorios". Además, proporciona funcionalidades para filtrar los productos por precio y nombre.
-
Importaciones:
React
: Biblioteca principal de React.useEffect
yuseState
: Hooks de React para manejar efectos secundarios y el estado del componente.useSelector
yuseDispatch
: Hooks de React Redux para acceder al estado global y despachar acciones.getProducts
: Acción importada desde el archivo de acciones para obtener la lista de productos.Accesorios.css
: Archivo de estilos específico para el componente.Cards
: Componente de tarjetas utilizado para mostrar los productos.
-
Estado Local:
precioMin
,precioMax
,nombre
: Estados locales para manejar los filtros de precio y nombre.
-
Efectos y Acciones:
useEffect
: Se utiliza para llamar a la accióngetProducts
al cargar el componente, obteniendo así la lista de productos.dispatch
: Se utiliza para despachar la accióngetProducts
.
-
Filtrado de Productos:
- Se filtran los productos según su tipo (
ACCESORIO
) y dentro de un rango de precio especificado. - La función de filtro también tiene en cuenta el nombre del producto para realizar búsquedas.
- Se filtran los productos según su tipo (
-
Manejo de Cambios en Filtros:
handleFilterChange
: Función para manejar cambios en los filtros de precio y nombre.
-
Restablecimiento de Filtros:
resetFilters
: Función para restablecer los filtros a sus valores iniciales.
-
Renderización de la Interfaz:
- Se presenta una sección de filtros con campos para precio mínimo, precio máximo y búsqueda por nombre.
- Botón para restablecer los filtros.
- Se muestra un mensaje si no hay productos disponibles, de lo contrario, se utilizan las tarjetas del componente
Cards
para mostrar los productos filtrados.
El componente Admin
representa el panel de administración de la aplicación. Proporciona opciones de navegación y un botón para cerrar sesión.
-
Importaciones:
React
: Biblioteca principal de React.Link
yuseHistory
: Utilizados para la navegación entre páginas.Admin.css
: Archivo de estilos específico para el componente.
-
Funcionalidades:
handleLogout
: Función que realiza tareas de cierre de sesión al hacer clic en el botón "Cerrar Sesión".
-
Interfaz de Usuario:
- Encabezado indicando "Panel de Administración".
- Lista de opciones de navegación: "Ver Transacciones", "Gestionar Productos", "Ver todos los productos".
- Botón "Cerrar Sesión" para salir del panel de administración.
El componente Detail
se encarga de mostrar los detalles de un producto seleccionado. Permite al usuario agregar el producto al carrito de compras.
-
Importaciones:
React
: Biblioteca principal de React.useEffect
,useState
: Hooks de React para manejar efectos secundarios y el estado del componente.axios
: Biblioteca para realizar solicitudes HTTP.useParams
: Hook de React Router para acceder a los parámetros de la URL.Contador
: Componente utilizado para gestionar la cantidad de productos a agregar al carrito.Link
: Componente utilizado para la navegación entre páginas.useCarritoContexto
: Hook personalizado para acceder al contexto del carrito.
-
Estado Local:
producto
: Estado local para almacenar los detalles del producto seleccionado.goCart
: Estado local para gestionar la navegación al carrito.
-
Efectos y Funciones:
useEffect
: Se utiliza para obtener los detalles del producto seleccionado al cargar el componente.onAdd
: Función que se ejecuta al agregar productos al carrito, actualizando el estadogoCart
.
-
Interfaz de Usuario:
- Se muestran detalles como el nombre, precio e imagen del producto.
- Se presenta un componente
Contador
para seleccionar la cantidad de productos a agregar al carrito. - Dependiendo del estado
goCart
, se muestra un enlace para finalizar la compra o el contador para agregar al carrito.
El componente Control
se encarga de registrar nuevos productos en la aplicación. Proporciona un formulario para ingresar los detalles del producto.
-
Importaciones:
React
: Biblioteca principal de React.postProducto
: Acción importada desde el archivo de acciones para agregar un nuevo producto.useDispatch
yuseHistory
: Hooks de React Redux para despachar acciones y para la navegación entre páginas.
-
Estado Local:
newProduct
: Estado local para almacenar los detalles del nuevo producto.productos
: Estado local para almacenar la lista actual de productos.
-
Efectos y Funciones:
useEffect
: Se utiliza para cargar la lista de productos al montar el componente.handleChange
: Función para manejar cambios en los campos del formulario.handleSubmit
: Función para enviar la solicitud de registro del nuevo producto.handleGoBack
: Función para volver atrás en la navegación.
-
Interfaz de Usuario:
- Formulario con campos para ingresar el código, nombre, precio, tipo, especie, stock e imagen del nuevo producto.
- Botones para registrar el producto y volver atrás.
Este componente maneja la selección de opciones de entrega, como el retiro en la sucursal más cercana o la entrega a domicilio. También permite ingresar la dirección de entrega en caso de elegir la opción de entrega a domicilio.
Se utiliza para recopilar la información necesaria para la entrega de productos.
Este componente se encarga del formulario de registro de nuevos usuarios. Incluye validaciones en tiempo real para asegurar que se ingresen datos válidos.
Se utiliza para que los usuarios puedan registrarse en la plataforma.
Este componente muestra una lista completa de productos disponibles. Permite añadir productos al carrito de compras.
Se utiliza para visualizar y seleccionar productos.
Este componente filtra y muestra productos específicos para gatos según criterios como precio, tipo, y marca.
Se utiliza para mostrar una selección específica de productos para gatos.
Este componente representa la página de inicio con un carrusel de imágenes, enlaces a categorías de productos y ofertas especiales.
Se utiliza como la página principal de la aplicación.
Este componente recopila la información esencial del usuario para la finalización de la compra.
Se utiliza para identificar al usuario antes de completar la compra.
Este componente permite a los usuarios iniciar sesión, verifica la existencia del correo electrónico y redirige a la página de inicio o al perfil del usuario.
Se utiliza para que los usuarios puedan acceder a sus cuentas.
El componente Pagos
es responsable de gestionar las opciones de pago y realizar la confirmación de la compra.
opcionPago
: Almacena la opción de pago seleccionada por el usuario.datosTarjeta
: Almacena los datos de la tarjeta cuando se elige el pago con tarjeta.mensaje
: Almacena mensajes de éxito o error.
handleOptionChange
: Maneja el cambio en la opción de pago.handlePagar
: Realiza la lógica de pago y muestra mensajes de confirmación o error.
- Muestra formularios condicionales dependiendo de la opción de pago seleccionada.
El componente Perros
muestra productos relacionados con perros, con opciones de filtrado por precio, tipo y marca.
precioMin
,precioMax
: Define el rango de precios a filtrar.tipo
: Almacena el tipo de producto seleccionado para filtrar.marca
: Almacena la marca seleccionada para filtrar.
handleFilterChange
: Maneja los cambios en los filtros.resetFilters
: Restablece los filtros a sus valores iniciales.
- Muestra productos filtrados o un mensaje si no hay productos disponibles.
El componente Transacciones
muestra información sobre las transacciones realizadas, incluyendo detalles del cliente y productos.
transacciones
: Almacena la lista de transacciones.clienteInfo
: Almacena información del cliente para cada transacción.productoInfo
: Almacena información del producto para cada transacción.
listarTransacciones
: Obtiene y actualiza la lista de transacciones.obtenerInformacionProducto
: Obtiene información del producto por su ID.obtenerInformacionCliente
: Obtiene información del cliente por su ID.volverAAdmin
: Redirige a la página de administración.
- Muestra detalles de cada transacción, cliente y productos asociados.