Una API REST completa desarrollada con Spring Boot para gestionar un sistema de inventario que incluye usuarios, artículos, préstamos e historial.
- CRUD Completo: Operaciones Create, Read, Update, Delete para todas las entidades
- Arquitectura en Capas: Controladores, Servicios, Repositorios y Entidades
- Base de Datos: Integración con PostgreSQL usando JPA/Hibernate
- Seguridad: Autenticación HTTP Basic con Spring Security
- Documentación API: OpenAPI/Swagger con interfaz interactiva
- Validaciones: Bean Validation y validaciones de negocio personalizadas
- Manejo de Errores: Respuestas de error consistentes y centralizadas
- Monitoreo: Endpoints de monitoreo con Spring Boot Actuator
- Documentación: Tutorial completo paso a paso
Antes de ejecutar el proyecto, asegúrate de tener instalado:
- Java 17 o superior
- Maven 3.6+
- PostgreSQL 12+
- Git
git clone <url-del-repositorio>
cd pi_backend2
-- Conectarse a PostgreSQL como superusuario
psql -U postgres
-- Crear la base de datos
CREATE DATABASE inventory_system;
-- Crear usuario (opcional)
CREATE USER inventory_user WITH PASSWORD 'tu_password';
GRANT ALL PRIVILEGES ON DATABASE inventory_system TO inventory_user;
Crea un archivo .env
en la raíz del proyecto:
# Configuración de Base de Datos
DB_HOST=localhost
DB_PORT=5432
DB_NAME=inventory_system
DB_USERNAME=inventory_user
DB_PASSWORD=tu_password
# Configuración de la Aplicación
SERVER_PORT=8080
SPRING_PROFILES_ACTIVE=dev
# Limpiar y compilar el proyecto
./mvnw clean compile
# Instalar dependencias
./mvnw dependency:resolve
# Ejecutar en modo desarrollo
./mvnw spring-boot:run
# Compilar el proyecto
./mvnw clean package -DskipTests
# Ejecutar el JAR
java -jar target/pi_backend2-0.0.1-SNAPSHOT.jar
- Importar el proyecto como proyecto Maven
- Configurar las variables de entorno
- Ejecutar la clase
PiBackend2Application.java
curl http://localhost:8080/actuator/health
Respuesta esperada:
{"status":"UP"}
# Listar usuarios
curl http://localhost:8080/api/users
# Listar artículos
curl http://localhost:8080/api/items
# Listar préstamos
curl http://localhost:8080/api/loans
GET /api/users
- Listar todos los usuariosGET /api/users/{id}
- Obtener usuario por IDPOST /api/users
- Crear nuevo usuarioPUT /api/users/{id}
- Actualizar usuarioDELETE /api/users/{id}
- Eliminar usuario
GET /api/items
- Listar todos los artículosGET /api/items/{id}
- Obtener artículo por IDPOST /api/items
- Crear nuevo artículoPUT /api/items/{id}
- Actualizar artículoDELETE /api/items/{id}
- Eliminar artículo
GET /api/loans
- Listar todos los préstamosGET /api/loans/{id}
- Obtener préstamo por IDPOST /api/loans
- Crear nuevo préstamoPUT /api/loans/{id}
- Actualizar préstamoDELETE /api/loans/{id}
- Eliminar préstamo
GET /actuator/health
- Estado de la aplicaciónGET /actuator/info
- Información de la aplicaciónGET /actuator/metrics
- Métricas de la aplicación
GET /swagger-ui.html
- Interfaz interactiva de Swagger UIGET /v3/api-docs
- Especificación OpenAPI en formato JSONGET /v3/api-docs.yaml
- Especificación OpenAPI en formato YAML
La API utiliza autenticación HTTP Basic. Credenciales de prueba:
- Admin:
admin
/admin123
(acceso completo) - User:
user
/user123
(acceso limitado)
La forma más fácil de probar la API es usando Swagger UI:
- Inicia la aplicación:
mvnw.cmd spring-boot:run
- Abre tu navegador en:
http://localhost:8080/swagger-ui.html
- Haz clic en "Authorize" e ingresa las credenciales
- Explora y prueba todos los endpoints interactivamente
curl -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-H "Authorization: Basic YWRtaW46YWRtaW4xMjM=" \
-d '{
"username": "juan.perez",
"email": "juan@example.com",
"password": "password123",
"role": "USER"
}'
curl -X POST http://localhost:8080/api/items \
-H "Content-Type: application/json" \
-H "Authorization: Basic dXNlcjp1c2VyMTIz" \
-d '{
"name": "Laptop Dell",
"description": "Laptop para desarrollo",
"category": "ELECTRONICS",
"quantity": 5,
"available": true
}'
curl -X POST http://localhost:8080/api/loans \
-H "Content-Type: application/json" \
-H "Authorization: Basic dXNlcjp1c2VyMTIz" \
-d '{
"userId": 1,
"itemId": 1,
"quantity": 1,
"loanDate": "2024-01-15",
"expectedReturnDate": "2024-01-30"
}'
Ejecuta el script incluido para probar todos los endpoints:
.\test-endpoints.ps1
Para aprender cómo se construyó este proyecto paso a paso, consulta la documentación completa en la carpeta doc/
:
- Tutorial Completo - Guía paso a paso
- Configuración Inicial
- Base de Datos y JPA
- Entidades y Modelos
- DTOs y Mapeo
- Repositorios
- Servicios
- Controladores REST
- Monitoreo con Actuator
- Validaciones y Errores
- Spring Security
- OpenAPI/Swagger
Caused by: org.postgresql.util.PSQLException: Connection refused
Solución:
- Verificar que PostgreSQL esté ejecutándose
- Comprobar las credenciales en el archivo
.env
- Verificar que la base de datos existe
Port 8080 was already in use
Solución:
- Cambiar el puerto en
.env
:SERVER_PORT=8081
- O terminar el proceso que usa el puerto 8080
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin
Solución:
- Verificar que tienes Java 17+:
java -version
- Limpiar y recompilar:
./mvnw clean compile
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad
) - Commit tus cambios (
git commit -am 'Agregar nueva funcionalidad'
) - Push a la rama (
git push origin feature/nueva-funcionalidad
) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE
para más detalles.
Desarrollado como proyecto educativo para aprender Spring Boot y desarrollo de APIs REST.
¿Necesitas ayuda? Consulta la documentación completa o abre un issue en el repositorio.