API Electro es una API REST desarrollada en Java utilizando el framework Spring Boot. Esta API permite a los usuarios gestionar productos, categorías y usuarios mediante las operaciones básicas de CRUD (Crear, Leer, Actualizar y Eliminar). Además, implementa seguridad con Spring Security y JWT para la autenticación y autorización de usuarios, así como manejo avanzado de errores para garantizar una experiencia de usuario robusta.
- Gestión de usuarios: CRUD para usuarios con roleEntities diferenciados (admin, userEntity, invited).
- Gestión de productos: Permite crear, leer, actualizar y eliminar productos.
- Gestión de categorías: CRUD completo para la administración de categorías.
- Autenticación y autorización:
- Autenticación basada en JSON Web Tokens (JWT).
- Autorización basada en roleEntities con control de acceso a endpoints específicos.
- Arquitectura basada en capas: Separación de responsabilidades en controladores, servicios, repositorios y entidades.
- Manejo avanzado de excepciones: Gestión centralizada de errores con respuestas claras y específicas.
- Lenguaje: Java 17
- Framework: Spring Boot 3
- Base de datos: MySQL
- Seguridad: Spring Security y JWT
- Dependencias adicionales:
- Spring Data JPA
- Hibernate
- Lombok
- Maven
- Hateoas
- Mapstruct
-
Clonar el repositorio:
git clone https://github.com/puriihuaman/api-electro.git cd api-electro
-
Configurar la base de datos:
- Crear una base de datos en MySQL.
- Buscar el fichero del script de la base de datos en:
resources/static/db/electro.sql
. - Copiar el contenido o abrirlo desde
Worbench
. - Luego ejecutar todo el script.
- Buscar el fichero del script de la base de datos en:
- Actualizar el archivo
application.properties
con las credenciales de tu base de datos:spring.datasource.url=jdbc:mysql://localhost:3306/nombre_base_datos spring.datasource.username=tu_usuario spring.datasource.password=tu_contraseña
- Crear una base de datos en MySQL.
-
Configurar propiedades para JWT:
jwt.secret.key=tu_clave_secreta jwt.time.expiration=tu_tiempo_de_expiración_para_tu_token
-
Verificar la clase principal
ApiElectroApplication.java
- Aquí en esta clase se va a crear el primer usuario al ejecutar
- Las credenciales que se usarían para hacer login:
- username:
ANON2025
- password:
AdM¡N&20_25
- username:
NOTA
: Elusername
es autogenerado mediante un trigger cuando se crea el usuario y la contraseña se encripta.
-
Construir el proyecto:
mvn clean install
-
Ejecutar la aplicación:
mvn spring-boot:run
-
Importa la colección en tu Rest Client
- Buscar la carpeta de los endpoints en:
resources/static/collection_api/API Electro
- Importa la carpeta en tu Rest Client favorito (Postman, Bruno o otro).
- Login:
POST /api/auth/login
- Solicita:
{ "username": "userEntity", "password": "password" }
- Responde: JWT Token
- Solicita:
- Crear usuario:
POST /api/users
- Consultar usuarios:
GET /api/users
- Actualizar usuario:
PUT /api/users/{id}
- Eliminar usuario:
DELETE /api/users/{id}
- Crear producto:
POST /api/productEntities
- Consultar productos:
GET /api/productEntities
- Actualizar producto:
PUT /api/productEntities/{id}
- Eliminar producto:
DELETE /api/productEntities/{id}
- Crear categoría:
POST /api/categories
- Consultar categorías:
GET /api/categories
- Actualizar categoría:
PUT /api/categories/{id}
- Eliminar categoría:
DELETE /api/categories/{id}
- Los endpoints están protegidos con JWT.
- Roles disponibles:
- Admin: Acceso completo a todos los recursos.
- User: Acceso limitado a ciertos recursos.
- Invited: Permisos mínimos.
La API implementa un manejo centralizado de excepciones para:
- Recursos no encontrados.
- Errores de validación.
- Acceso no autorizado.
- Errores internos del servidor.
Si deseas contribuir al proyecto, por favor sigue estos pasos:
- Haz un fork del repositorio.
- Crea una rama nueva para tu funcionalidad o mejora.
- Envía un pull request con una descripción detallada de los cambios.