Proyecto full-stack de e-commerce automotriz orientado a portafolio profesional.
- Backend: Django + DRF + JWT + Webpay (sandbox)
- Frontend: React + React Router + Axios
- DB: PostgreSQL (entorno estandar)
- Infra local: Docker Compose
- CI: GitHub Actions
backend/: API REST, autenticacion, carrito, ordenes, pagos y backoffice.frontend/: app publica (B2C), canal B2B y backoffice admin React.docs/: guias de operacion, API y framework de trabajo con agentes.
- Copiar variables:
copy .env.example .envcopy backend\.env.example backend\.envcopy frontend\.env.example frontend\.env
- Configurar secretos del proyecto (especialmente
DJANGO_SECRET_KEY).- Webpay queda listo por defecto con credenciales publicas de integracion (sandbox).
- Opcional: ajustar puertos host via
.env:POSTGRES_HOST_PORT(default5432)BACKEND_HOST_PORT(default8000)FRONTEND_HOST_PORT(default3000)
- El stack Docker ejecuta bootstrap demo al iniciar (
BOOTSTRAP_PORTFOLIO=truepor defecto).- Para desactivarlo, define
BOOTSTRAP_PORTFOLIO=falseen el.envraiz.
- Para desactivarlo, define
- Levantar stack:
docker compose up --build- URLs:
- Frontend:
http://localhost:3000 - Backend API:
http://localhost:8000/api - Healthcheck:
http://localhost:8000/api/health/ - OpenAPI schema:
http://localhost:8000/api/schema/ - Swagger UI:
http://localhost:8000/api/docs/swagger/ - ReDoc:
http://localhost:8000/api/docs/redoc/
Con stack levantado:
docker compose exec backend python manage.py bootstrap_portfolioPara resetear stock demo completo del catalogo (util despues de varias compras QA):
docker compose exec backend python manage.py bootstrap_portfolio --reset-stockEste comando:
- Carga
api/fixtures/products.jsonsi no hay productos. - Crea/actualiza usuarios demo
admin_portfolio,cliente_demo,dist_demo. - Reequilibra stock agotado (o todo el catalogo con
--reset-stock). - Permite override por variables
PORTFOLIO_*enbackend/.env.
- Auth:
POST /api/token/,POST /api/token/refresh/,POST /api/register/ - Catalogo:
GET /api/products/(q,category,channel=b2b) - Carrito:
GET/POST /api/cart/,PATCH/DELETE /api/cart/{id}/ - Ordenes:
POST /api/orders/,GET /api/orders/{id}/,GET /api/orders/user/ - Webpay:
POST /api/webpay/init/,POST /api/webpay/return/,POST /api/webpay/commit/ - Backoffice admin:
GET /api/admin/metrics/GET/POST/PATCH/DELETE /api/admin/products/GET/POST/DELETE /api/admin/categories/GET/PATCH /api/admin/orders/GET/PATCH /api/admin/payments/GET/PATCH /api/admin/users/
customer: compra retail.distributor: acceso a canal B2B.admin: backoffice y administracion.
Nota: el registro publico solo permite customer y distributor.
Flujo de compra:
POST /api/orders/prepara la orden para pago.- El carrito se mantiene hasta pago exitoso.
- Stock y conciliacion de carrito se aplican en
POST /api/webpay/commit/autorizado.
Backend:
cd backend
python manage.py check
python manage.py testFrontend:
cd frontend
npm ci
npm run build
npm run test:ci
npm run e2e- Logs backend en formato JSON estructurado.
- Header de correlacion
X-Request-IDen todas las respuestas API. - Eventos criticos trazados: creacion de orden, init/commit Webpay y cambios admin de pagos.
- Inicializar git (si el directorio no esta versionado):
git init- Crear rama con alcance acotado.
- Implementar cambios pequenos y verificables.
- Abrir PR con evidencia de pruebas y riesgos.
- Usar checklist de
.github/pull_request_template.md.
- Seguridad y configuracion por entorno: completado.
- Robustez backend + Webpay + RBAC: completado base.
- B2B y backoffice React: completado base funcional.
- Refinamiento UI/UX premium (Fase 4): completado base + iteracion continua.
- Mejor cobertura frontend E2E y observabilidad avanzada: siguiente iteracion.