Punto de Venta App - Spring MVC
La aplicación Punto de Venta es uno de los proyectos que más me ha gustado desarrollar porque aborda todo lo esencial de un comercio. Por ejemplo: Ventas, Inventario, Proveedores, Clientes, Facturación y para los empleados con el rol de Administrador pueden Administrar los Usuarios (empleados).
La idea surgió al ver cómo algunos negocios enfrentan dificultades para gestionar ventas, controlar inventarios y manejar facturas de manera organizada. Mi objetivo principal fue crear una herramienta intuitiva, capaz de cubrir todas estas necesidades.
Tecnologías: Spring MVC, Spring Data JPA, Spring Security, Spring Validation, MySQL, Thymeleaf, HTML, TailwindCSS y Javascript.
Estructura del proyecto:
- com.manuelberganza.pos_app

En esta clase Modelo Producto incluye atributos como el id único del producto, nombre, descripción, precio, cantidad en stock, categoría, y proveedor. Cada instancia de la clase Producto refleja un ítem específico dentro del inventario y un registro dentro de la base de datos.

El archivo de configuración SpringConfig donde manejo la autenticación y autorización en el sistema.
Es aquí donde tengo el PasswordEncoder, FilterChain y UserDetailsManager.
El PasswordEncoder que se encarga de encriptar y verificar las contraseñas de los usuarios.
Mientras el FilterChain, que es una estructura de filtros que procesa cada solicitud y respuesta en el sistema, manejando la autenticación para permitir que solo usuarios autorizados accedan a los recursos.
Por último, incluyo UserDetailsManager, el componente encargado de cargar y gestionar la información de los usuarios desde la base de datos, como los nombres de usuario y roles, para facilitar el control de acceso en la aplicación.

En el archivo ProductoRepository, he implementado métodos personalizados utilizando la anotación @Query para realizar consultas específicas que van más allá de las funciones estándar de los repositories en Spring Data JPA.
Gracias a @Query, puedo utilizar consultas JPQL o SQL nativas directamente en el repository, lo que brinda flexibilidad y control en el acceso a los datos.

En el paquete com.manuelberganza.pos_app.security.validations he creado una anotación personalizada para validar que un usuario existe en la base de datos antes de realizar ciertas operaciones, como la autenticación o asignación de permisos.

Factura hecha con HTML, TailwindCSS.
