270 lines
7.1 KiB
Markdown
270 lines
7.1 KiB
Markdown
# Don Confiao Backend - Tienda Ilusion
|
|
|
|
Backend Django con Django REST Framework para el sistema de punto de venta Tienda Ilusion.
|
|
|
|
## Características
|
|
|
|
- 🔐 Autenticación JWT con djangorestframework-simplejwt
|
|
- 🗄️ Soporte multi-ambiente (desarrollo/producción)
|
|
- 🐘 PostgreSQL para producción, SQLite para desarrollo
|
|
- 🔄 Integración con Tryton ERP
|
|
- 📦 Docker Compose para fácil deployment
|
|
- 🛡️ Configuración de seguridad completa para producción
|
|
- 📊 API REST completa para gestión de ventas, productos y clientes
|
|
|
|
## Requisitos Previos
|
|
|
|
- Docker & Docker Compose
|
|
- Python 3.11+ (para desarrollo local sin Docker)
|
|
- Git
|
|
|
|
## Inicio Rápido
|
|
|
|
### Desarrollo Local
|
|
|
|
1. **Clonar el repositorio**
|
|
```bash
|
|
git clone <repository-url>
|
|
cd don_confiao_backend
|
|
```
|
|
|
|
2. **Iniciar servicios de desarrollo**
|
|
```bash
|
|
docker-compose -f docker-compose.dev.yml up
|
|
```
|
|
|
|
3. **Aplicar migraciones**
|
|
```bash
|
|
docker-compose -f docker-compose.dev.yml run --rm django python manage.py migrate
|
|
```
|
|
|
|
4. **Crear superusuario**
|
|
```bash
|
|
docker-compose -f docker-compose.dev.yml run --rm django python manage.py createsuperuser
|
|
```
|
|
|
|
5. **Acceder a la aplicación**
|
|
- API: http://localhost:7000
|
|
- Admin: http://localhost:7000/admin
|
|
|
|
### Producción
|
|
|
|
1. **Configurar variables de entorno**
|
|
```bash
|
|
cp .env.production.example .env.production
|
|
# Editar .env.production con valores reales
|
|
```
|
|
|
|
2. **Generar SECRET_KEY segura**
|
|
```bash
|
|
python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
|
|
```
|
|
|
|
3. **Iniciar servicios**
|
|
```bash
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|
```
|
|
|
|
4. **Las migraciones y collectstatic se ejecutan automáticamente**
|
|
- Si necesitas ejecutarlas manualmente:
|
|
```bash
|
|
docker-compose -f docker-compose.prod.yml exec django python manage.py migrate
|
|
docker-compose -f docker-compose.prod.yml exec django python manage.py collectstatic --noinput
|
|
```
|
|
|
|
5. **Crear superusuario**
|
|
```bash
|
|
docker-compose -f docker-compose.prod.yml exec django python manage.py createsuperuser
|
|
```
|
|
|
|
## Estructura del Proyecto
|
|
|
|
```
|
|
don_confiao_backend/
|
|
├── tienda_ilusion/ # Proyecto Django
|
|
│ ├── config/ # Configuración principal
|
|
│ │ └── settings/ # Settings por ambiente
|
|
│ │ ├── base.py # Configuración compartida
|
|
│ │ ├── development.py # Desarrollo
|
|
│ │ └── production.py # Producción
|
|
│ ├── don_confiao/ # App principal
|
|
│ └── users/ # App de usuarios
|
|
├── scripts/ # Scripts de utilidad
|
|
│ ├── health-check.sh # Verificación de salud
|
|
│ ├── backup-db.sh # Backup de base de datos
|
|
│ └── restore-backup.sh # Restore de backup
|
|
├── docker-compose.dev.yml # Docker Compose desarrollo
|
|
├── docker-compose.prod.yml # Docker Compose producción
|
|
└── requirements.txt # Dependencias Python
|
|
```
|
|
|
|
## Ambientes
|
|
|
|
### Development
|
|
- Base de datos: SQLite
|
|
- Debug: Habilitado
|
|
- CORS: Permisivo
|
|
- Server: Django development server
|
|
- Puerto: 7000
|
|
|
|
### Production
|
|
- Base de datos: PostgreSQL
|
|
- Debug: Deshabilitado
|
|
- CORS: Configurado por dominio
|
|
- Server: Gunicorn (4 workers)
|
|
- Puerto: 8000
|
|
- Seguridad: HTTPS, HSTS, secure cookies
|
|
|
|
## Comandos Útiles
|
|
|
|
### Desarrollo
|
|
|
|
```bash
|
|
# Ejecutar tests
|
|
docker-compose -f docker-compose.dev.yml run --rm django python manage.py test
|
|
|
|
# Shell de Django
|
|
docker-compose -f docker-compose.dev.yml run --rm django python manage.py shell
|
|
|
|
# Crear migraciones
|
|
docker-compose -f docker-compose.dev.yml run --rm django python manage.py makemigrations
|
|
|
|
# Ver logs
|
|
docker-compose -f docker-compose.dev.yml logs -f
|
|
```
|
|
|
|
### Producción
|
|
|
|
```bash
|
|
# Ver logs
|
|
docker-compose -f docker-compose.prod.yml logs -f django
|
|
|
|
# Backup de base de datos
|
|
./scripts/backup-db.sh
|
|
|
|
# Restore de backup
|
|
./scripts/restore-backup.sh backups/tienda_ilusion_backup_YYYYMMDD_HHMMSS.sql.gz
|
|
|
|
# Health check
|
|
./scripts/health-check.sh prod
|
|
|
|
# Reiniciar servicios
|
|
docker-compose -f docker-compose.prod.yml restart
|
|
|
|
# Detener servicios
|
|
docker-compose -f docker-compose.prod.yml down
|
|
```
|
|
|
|
## API Endpoints
|
|
|
|
La API REST está disponible en `/api/`. Principales endpoints:
|
|
|
|
- `/api/token/` - Obtener token JWT
|
|
- `/api/token/refresh/` - Refrescar token JWT
|
|
- `/api/customers/` - Gestión de clientes
|
|
- `/api/products/` - Gestión de productos
|
|
- `/api/sales/` - Gestión de ventas
|
|
- `/admin/` - Panel de administración Django
|
|
|
|
## Integración con Tryton ERP
|
|
|
|
El sistema se integra con Tryton ERP para sincronización de:
|
|
- Clientes
|
|
- Productos
|
|
- Ventas
|
|
|
|
Configurar las variables de entorno de Tryton en `.env.development` o `.env.production`:
|
|
```bash
|
|
TRYTON_HOST=your-tryton-server
|
|
TRYTON_DATABASE=your-database
|
|
TRYTON_USERNAME=your-username
|
|
TRYTON_PASSWORD=your-password
|
|
```
|
|
|
|
## Backup y Restore
|
|
|
|
### Crear Backup
|
|
```bash
|
|
./scripts/backup-db.sh
|
|
```
|
|
Los backups se guardan en `backups/` y se mantienen por 7 días.
|
|
|
|
### Restaurar Backup
|
|
```bash
|
|
./scripts/restore-backup.sh backups/backup_file.sql.gz
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
Ver la sección de Troubleshooting en [AGENTS.md](AGENTS.md) para soluciones a problemas comunes.
|
|
|
|
### Problemas Comunes
|
|
|
|
1. **Error de conexión a base de datos**: Verificar que PostgreSQL esté corriendo
|
|
2. **CSRF errors**: Verificar `CSRF_TRUSTED_ORIGINS` en `.env.production`
|
|
3. **Static files no cargan**: Ejecutar `collectstatic`
|
|
4. **Errores de migración**: Verificar estado con `showmigrations`
|
|
|
|
## Seguridad
|
|
|
|
### Checklist de Producción
|
|
|
|
Antes de desplegar a producción:
|
|
|
|
- [ ] `DEBUG=False` en `.env.production`
|
|
- [ ] `SECRET_KEY` única y segura generada
|
|
- [ ] `ALLOWED_HOSTS` configurado correctamente
|
|
- [ ] `CORS_ALLOWED_ORIGINS` limitado a dominios confiables
|
|
- [ ] Contraseñas de base de datos seguras
|
|
- [ ] HTTPS habilitado con certificados SSL/TLS válidos
|
|
- [ ] Firewall configurado
|
|
- [ ] Backups automáticos configurados
|
|
- [ ] Monitoreo de logs configurado
|
|
|
|
## Desarrollo
|
|
|
|
### Agregar nuevas dependencias
|
|
|
|
```bash
|
|
# Agregar a requirements.txt
|
|
echo "nueva-dependencia==version" >> requirements.txt
|
|
|
|
# Reconstruir contenedor
|
|
docker-compose -f docker-compose.dev.yml build --no-cache
|
|
```
|
|
|
|
### Tests
|
|
|
|
```bash
|
|
# Ejecutar todos los tests
|
|
docker-compose -f docker-compose.dev.yml run --rm django python manage.py test
|
|
|
|
# Ejecutar tests de una app específica
|
|
docker-compose -f docker-compose.dev.yml run --rm django python manage.py test don_confiao
|
|
|
|
# Con coverage
|
|
docker-compose -f docker-compose.dev.yml run --rm django coverage run --source='.' manage.py test
|
|
docker-compose -f docker-compose.dev.yml run --rm django coverage report
|
|
```
|
|
|
|
## Contribuir
|
|
|
|
1. Fork el proyecto
|
|
2. Crear branch de feature (`git checkout -b feature/AmazingFeature`)
|
|
3. Commit cambios (`git commit -m 'Add some AmazingFeature'`)
|
|
4. Push al branch (`git push origin feature/AmazingFeature`)
|
|
5. Abrir Pull Request
|
|
|
|
## Licencia
|
|
|
|
[Especificar licencia]
|
|
|
|
## Contacto
|
|
|
|
[Información de contacto]
|
|
|
|
## Documentación Adicional
|
|
|
|
- [AGENTS.md](AGENTS.md) - Contexto completo del proyecto y troubleshooting
|
|
- [.env.production.example](.env.production.example) - Ejemplo de variables de producción
|