GET /api/auth/health
Descripción: Verifica que el servicio de autenticación esté funcionando.
Respuesta:
"Auth service is running!"POST /api/auth/register
Descripción: Registra un nuevo usuario en el sistema.
Body:
{
"name": "Nombre del Usuario",
"email": "usuario@ejemplo.com",
"password": "contraseña123",
"role": "CLIENT"
}Respuesta exitosa:
{
"token": "eyJhbGciOiJIUzUxMiJ9...",
"email": "usuario@ejemplo.com",
"role": "CLIENT",
"name": "Nombre del Usuario"
}POST /api/auth/login
Descripción: Autentica un usuario existente.
Body:
{
"email": "usuario@ejemplo.com",
"password": "contraseña123"
}Respuesta exitosa:
{
"token": "eyJhbGciOiJIUzUxMiJ9...",
"email": "usuario@ejemplo.com",
"role": "CLIENT",
"name": "Nombre del Usuario"
}GET /api/products/public (query opcional: ?category=ebooks)
GET /api/products/public/{id}
Descripción: Lista los productos activos / detalle de un producto. No requiere autenticación. La respuesta nunca incluye fileUrl (solo se obtiene con un token de descarga).
Respuesta (elemento):
{
"id": 1,
"title": "Plantilla de CV",
"description": "...",
"price": 9.99,
"category": "plantillas",
"thumbnailUrl": "https://...",
"sellerId": 2,
"sellerName": "Ana",
"downloads": 14,
"createdAt": "2026-07-04T10:00:00"
}GET /api/products/mine → mis productos
POST /api/products → publicar producto
PUT /api/products/{id} → editar (solo dueño o ADMIN)
DELETE /api/products/{id} → retirar (baja lógica, solo dueño o ADMIN)
Body de POST/PUT:
{
"title": "Plantilla de CV",
"description": "Plantilla editable en Figma",
"price": 9.99,
"category": "plantillas",
"fileUrl": "https://storage/archivo.zip",
"thumbnailUrl": "https://storage/miniatura.png"
}POST /api/purchases
Body: { "productId": 1 }
Descripción: Checkout simulado: registra la compra como pagada y genera un token de descarga válido por 7 días. Cuando se integre Stripe, este endpoint creará un PaymentIntent y el webhook marcará el pago. Si ya compraste el producto y el token sigue vigente, devuelve la compra existente.
Respuesta:
{
"id": 10,
"productId": 1,
"productTitle": "Plantilla de CV",
"amount": 9.99,
"paid": true,
"downloadToken": "3f6c1a...",
"downloadExpiry": "2026-07-11T10:00:00",
"purchasedAt": "2026-07-04T10:00:00"
}GET /api/purchases
GET /api/downloads/{token}
Respuesta: { "title": "...", "fileUrl": "https://..." } — incrementa el contador de descargas. Errores: 404 token inválido, 402 compra no pagada, 410 token expirado.
- Tipo: PostgreSQL
- URL:
jdbc:postgresql://localhost:5432/distrofy(variableDB_URL) - Usuario: variable
DB_USERNAME(default dev:distrofy_user) - Contraseña: variable
DB_PASSWORD
- Algoritmo: HS512
- Expiración: 24 horas (86400000 ms)
- Secret: Configurado en
application.properties
/api/auth/**- Endpoints de autenticación/api/health- Health check/api/products/public/**- Catálogo público/api/downloads/**- Canje de tokens de descarga
- Todas las demás rutas requieren autenticación JWT
Para endpoints protegidos:
Authorization: Bearer <jwt_token>
CREATE DATABASE distrofy;
CREATE USER distrofy_user WITH PASSWORD 'jeanjean123';
GRANT ALL PRIVILEGES ON DATABASE distrofy TO distrofy_user;cd backend
./mvnw spring-boot:runcurl http://localhost:8080/api/auth/health
curl -X POST http://localhost:8080/api/auth/register \
-H "Content-Type: application/json" \
-d '{"name":"Test User","email":"test@example.com","password":"123456"}'
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"123456"}'- Validación de campos fallida
- Email ya registrado
- Datos de entrada inválidos
- Credenciales inválidas
- Token JWT inválido o expirado
- Error interno del servidor
- Integrar Stripe (PaymentIntent + webhook; hoy el checkout es simulado)
- Subida real de archivos (hoy los productos referencian URLs externas)
- Implementar panel de administración
- Implementar refresh tokens
- Agregar logging y monitoreo
Para reportar problemas o solicitar nuevas funcionalidades, contacta al equipo de desarrollo.