Solución full-stack para gestión de clientes B2B con API REST, autenticación JWT y frontend React.
| 👤 Autor | Victor Rodriguez |
|---|---|
| victtor.rodriguez01@gmail.com |
| Campo | Valor |
|---|---|
| Usuario | admin |
| Contraseña | admin123 |
- Docker Desktop instalado y en ejecución
docker compose up --buildEsto levanta los tres servicios automáticamente:
| Servicio | URL |
|---|---|
| Frontend | http://localhost:3000 |
| Backend | http://localhost:8080 |
| PostgreSQL | localhost:5432 |
Para detener:
docker compose downNota: los datos persisten entre reinicios gracias al volumen
paco_postgres_data. Para eliminar también los datos usadocker compose down -v.
Observacion (Linux / Mac): si Docker presenta errores de permisos o acceso al daemon, prueba ejecutar con privilegios:
sudo docker compose up --build
En algunos equipos corporativos, el build del backend puede fallar al descargar dependencias Maven por inspeccion SSL.
- Copia el certificado corporativo en
backend/certs/(por ejemplobackend/certs/corporate-ca.crt). - Vuelve a levantar:
docker compose up --buildFallback temporal sin certificado (solo desarrollo):
PowerShell:
$env:BACKEND_MAVEN_ARGS="-DskipTests package -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true"
docker compose up --buildLinux / Mac:
BACKEND_MAVEN_ARGS="-DskipTests package -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true" docker compose up --buildRequisitos: Java 25, Maven, Node.js 20+, PostgreSQL 16 corriendo en localhost:5432 con base de datos paco_db.
Backend:
cd backend
./mvnw spring-boot:runFrontend (en otra terminal):
cd frontend
npm install
npm run devCon el backend corriendo, accede a la documentación interactiva en:
http://localhost:8080/swagger-ui.html
Esquema JSON disponible en: http://localhost:8080/v3/api-docs
| Método | Endpoint | Auth | Descripción |
|---|---|---|---|
| POST | /api/auth/login |
No | Obtiene token JWT |
| GET | /api/clients |
Bearer | Lista todos los clientes |
| GET | /api/clients/{id} |
Bearer | Obtiene un cliente |
| POST | /api/clients |
Bearer | Crea un cliente |
| PUT | /api/clients/{id} |
Bearer | Actualiza un cliente |
| DELETE | /api/clients/{id} |
Bearer | Desactiva un cliente |
- Java 25 + Spring Boot 4.0.7 — Framework principal para la API REST. Se eligió por su ecosistema maduro y facilidad de integración con seguridad y persistencia.
- PostgreSQL 16 — Motor relacional requerido. Las tablas
app_user,b4b_customereintegration_event_logse crean automáticamente al arrancar víaschema.sql. - Spring Security + JWT (jjwt 0.12.6) — Autenticación stateless con Bearer Token. El filtro
JwtAuthenticationFiltervalida el token en cada request protegido. - Spring Data JPA + Hibernate 7 — ORM para la capa de persistencia. Se usa
ddl-auto=validatepara que Hibernate verifique el esquema sin modificarlo. - Springdoc OpenAPI 3.0.2 — Genera y expone Swagger UI automáticamente sin configuración adicional.
- Soft delete — El endpoint DELETE no elimina físicamente el registro; cambia el
statusaINACTIVEy registra el evento enintegration_event_log. - Variables de entorno — Toda configuración sensible (
DB_HOST,DB_PASSWORD,JWT_SECRET, etc.) se lee desde variables de entorno con valores por defecto para desarrollo local.
- React 19 + TypeScript + Vite 8 — SPA con tipado estático. Vite permite HMR rápido en desarrollo y bundles optimizados para producción.
- React Router v7 — Enrutamiento en cliente con rutas protegidas que validan la presencia del token JWT antes de renderizar.
- Axios — Cliente HTTP con interceptor de request que adjunta automáticamente el Bearer Token almacenado en
localStorage. - Nginx — En el contenedor Docker, el build estático de Vite es servido por Nginx con regla
try_filespara soportar el enrutamiento SPA.