API REST desarrollada con Spring Boot para la gestión de productos y pedidos para el curso de Talento Tech.
La aplicación utiliza una base de datos PostgreSQL con la siguiente configuración:
- URL de conexión:
jdbc:postgresql://10.0.2.107:5432/cursospring - Usuario:
postgres - Contraseña:
cursospring - Driver:
org.postgresql.Driver - Dialecto de Hibernate:
PostgreSQLDialect
- DDL Auto:
update(actualiza automáticamente el esquema de base de datos) - Show SQL:
false(no muestra las consultas SQL en consola) - Format SQL:
true(formatea las consultas SQL cuando se muestran)
Crea un nuevo producto en el sistema.
- Método:
POST - URL:
/products - Content-Type:
application/json
Body (ejemplo):
{
"name": "Laptop HP",
"description": "Laptop HP Core i5 8GB RAM",
"price": 45000.50,
"stock": 10
}Respuesta exitosa (201 Created):
{
"id": 1,
"name": "Laptop HP",
"description": "Laptop HP Core i5 8GB RAM",
"price": 45000.50,
"stock": 10
}Obtiene una lista de productos con filtros opcionales.
- Método:
GET - URL:
/products - Parámetros de consulta (opcionales):
name: Filtra por nombre del producto (valor por defecto: "")price: Filtra por precio del producto (valor por defecto: 0)oos: Out of stock - Filtra productos sin stock (valor por defecto: false)
Ejemplos de uso:
GET /products
GET /products?name=Laptop
GET /products?price=45000
GET /products?oos=true
GET /products?name=Laptop&price=45000&oos=false
Respuesta exitosa (200 OK):
[
{
"id": 1,
"name": "Laptop HP",
"description": "Laptop HP Core i5 8GB RAM",
"price": 45000.50,
"stock": 10
},
{
"id": 2,
"name": "Mouse Logitech",
"description": "Mouse inalámbrico",
"price": 1500.00,
"stock": 25
}
]Actualiza un producto existente por su ID.
- Método:
PUT - URL:
/products/{id} - Content-Type:
application/json
Body (ejemplo):
{
"name": "Laptop HP Actualizada",
"description": "Laptop HP Core i7 16GB RAM",
"price": 55000.00,
"stock": 15
}Respuesta exitosa (200 OK):
{
"id": 1,
"name": "Laptop HP Actualizada",
"description": "Laptop HP Core i7 16GB RAM",
"price": 55000.00,
"stock": 15
}Elimina un producto del sistema por su ID.
- Método:
DELETE - URL:
/product/{id}
Respuesta exitosa (200 OK):
{
"id": 1,
"name": "Laptop HP",
"description": "Laptop HP Core i5 8GB RAM",
"price": 45000.50,
"stock": 10
}Crea un nuevo pedido con una lista de productos y sus cantidades.
- Método:
POST - URL:
/order - Content-Type:
application/json
Body (ejemplo):
{
"productsId": [1, 2, 3],
"quantities": [2, 1, 5]
}Descripción:
productsId: Lista de IDs de productos a incluir en el pedidoquantities: Lista de cantidades correspondientes a cada producto (mismo orden)
Respuesta exitosa (201 Created):
{
"id": 1,
"price": 92501.00,
"items": [
{
"order": {...},
"product": {
"id": 1,
"name": "Laptop HP",
"description": "Laptop HP Core i5 8GB RAM",
"price": 45000.50,
"stock": 8
},
"quantity": 2
},
{
"order": {...},
"product": {
"id": 2,
"name": "Mouse Logitech",
"description": "Mouse inalámbrico",
"price": 1500.00,
"stock": 24
},
"quantity": 1
}
]
}Obtiene una lista de todos los pedidos registrados en el sistema.
- Método:
GET - URL:
/orders
Respuesta exitosa (200 OK):
[
{
"id": 1,
"price": 92501.00,
"items": [...]
},
{
"id": 2,
"price": 15000.00,
"items": [...]
}
]- 200 OK: La solicitud fue exitosa
- 201 Created: El recurso fue creado exitosamente
- 400 Bad Request: Error en los datos enviados
- 404 Not Found: Recurso no encontrado
- 500 Internal Server Error: Error interno del servidor
Los productos deben cumplir con las siguientes validaciones:
- name: No puede estar vacío
- price: Debe ser un valor positivo mayor o igual a 0
- stock: Debe ser un valor entero positivo
Los pedidos deben cumplir con:
- La cantidad de IDs de productos debe coincidir con la cantidad de cantidades
- Los productos deben existir en la base de datos
- Debe haber stock suficiente para cada producto
La API implementa un manejador global de excepciones que proporciona mensajes de error claros y consistentes en formato JSON.