Sistema completo de gestión de tickets con autenticación, panel de administración y panel de usuario. Desarrollado con FastAPI (backend), Next.js (frontend), SQL Server y Redis.
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Next.js │────▶│ FastAPI │────▶│ SQL Server │
│ Frontend │ │ API │ │ Database │
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ Redis │
│ Cache │
└─────────────┘
▲
│
┌─────────────┐
│ Batch │
│ Worker │
└─────────────┘
- ✅ Autenticación JWT con bcrypt
- ✅ Sistema de roles (Admin/Usuario)
- ✅ API RESTful completa
- ✅ Validación con Pydantic
- ✅ Caché con Redis
- ✅ Conexión segura a SQL Server
- ✅ Interfaz moderna con Tailwind CSS 4
- ✅ Panel de administración completo
- ✅ Dashboard de usuario
- ✅ Sistema de autenticación
- ✅ Gestión de tickets en tiempo real
- ✅ Sistema de comentarios
- ✅ Modelo relacional completo
- ✅ Sistema de roles y permisos
- ✅ Triggers para auditoría
- ✅ Índices optimizados
- ✅ Vistas para reportes
- ✅ Procedimientos almacenados
- ✅ Sistema de backups automatizados
- Docker & Docker Compose
- 4GB RAM mínimo
- Puertos disponibles: 1433, 6379, 8000, 3000
git https://github.com/Ame314/Tickets_ame
git https://github.com/Ame314/Tickets_back
mkdirmkdir -p backups
mkdir -p dbColoca los siguientes archivos en la carpeta db/:
init.sql- Estructura de base de datossecurity.sql- Configuración de seguridad y backups
docker-compose up -dEspera 30 segundos para que SQL Server inicie completamente, luego:
# Conectarse a SQL Server
docker exec -it sqlserver /opt/mssql-tools/bin/sqlcmd \
-S localhost -U sa -P "Password123!" \
-i /db/init.sql
# Configurar seguridad
docker exec -it sqlserver /opt/mssql-tools/bin/sqlcmd \
-S localhost -U sa -P "Password123!" \
-i /db/security.sqlcd frontend
npm install
cd ..- Frontend: http://localhost:3000
- API Docs: http://localhost:8000/docs
- SQL Server: localhost:1433
- Redis: localhost:6379
Administrador:
- Email:
admin@soporte.com - Password:
Admin123!
Usuario:
- Email:
user@demo.com - Password:
User123!
adb_practica/
├── api/
│ ├── Dockerfile
│ ├── main.py # API FastAPI completa
│ └── requirements.txt
├── batch/
│ ├── Dockerfile
│ ├── worker.py # Worker para tareas batch
│ └── requirements.txt
├── db/
│ ├── init.sql # Estructura de base de datos
│ ├── security.sql # Seguridad y backups
│ ├── roles.sql # (deprecated)
│ └── transactions.sql # Ejemplos de transacciones
├── frontend/
│ ├── app/
│ │ ├── login/
│ │ │ └── page.tsx
│ │ ├── registro/
│ │ │ └── page.tsx
│ │ ├── dashboard/
│ │ │ └── page.tsx
│ │ ├── admin/
│ │ │ └── page.tsx
│ │ ├── tickets/
│ │ │ └── [id]/
│ │ │ └── page.tsx
│ │ ├── globals.css
│ │ └── page.tsx
│ ├── Dockerfile
│ ├── package.json
│ └── next.config.ts
├── backups/ # Carpeta para backups automáticos
├── docker-compose.yml
└── README.md
ROL API (rol_api):
- SELECT en todas las tablas principales
- INSERT/UPDATE en Usuarios, Tickets, Interacciones
- DENY DELETE para proteger datos históricos
ROL BATCH (rol_batch):
- SELECT limitado
- INSERT en Interacciones
- Ejecución de procedimientos específicos
ROL ADMIN (rol_admin):
- Control total sobre la base de datos
- Gestión de usuarios y permisos
- Acceso a funciones administrativas
ROL READONLY (rol_readonly):
- Solo lectura en todas las tablas
- Acceso a vistas y reportes
El sistema incluye procedimientos para:
-- Backup completo
EXEC sp_BackupCompleto;
-- Backup diferencial
EXEC sp_BackupDiferencial;
-- Backup transaccional (log)
EXEC sp_BackupTransaccional;
-- Mantenimiento diario
EXEC sp_MantenimientoDiario;Los backups se guardan en /var/opt/mssql/backup (mapeado a ./backups)
- Contraseñas hasheadas con bcrypt
- Tokens JWT con expiración
- Validación de roles en cada endpoint
- HTTPS recomendado en producción
- Variables de entorno para secretos
curl http://localhost:8000/healthcurl -H "Authorization: Bearer <token>" \
http://localhost:8000/admin/estadisticas# Ver logs de la API
docker logs api -f
# Ver logs de SQL Server
docker logs sqlserver -f
# Ver logs del worker
docker logs batch -fdocker exec sqlserver /opt/mssql-tools/bin/sqlcmd \
-S localhost -U sa -P "Password123!" \
-Q "EXEC sp_BackupCompleto"docker exec sqlserver /opt/mssql-tools/bin/sqlcmd \
-S localhost -U sa -P "Password123!" \
-Q "USE soporte; EXEC sp_LimpiarSesionesExpiradas"# Reiniciar todo
docker-compose restart
# Reiniciar servicio específico
docker-compose restart api# Verificar logs
docker logs sqlserver
# Aumentar memoria del contenedor
# En docker-compose.yml agregar:
# deploy:
# resources:
# limits:
# memory: 2G# Verificar que SQL Server esté listo
docker exec sqlserver /opt/mssql-tools/bin/sqlcmd \
-S localhost -U sa -P "Password123!" \
-Q "SELECT 1"
# Reiniciar API
docker-compose restart api- Verificar que API esté corriendo:
curl http://localhost:8000/health - Verificar CORS en
api/main.py - Verificar variables de entorno en frontend
POST /auth/registro- Registrar nuevo usuarioPOST /auth/login- Iniciar sesiónGET /auth/me- Obtener usuario actual
GET /tickets- Listar tickets (con filtros)POST /tickets- Crear ticketGET /tickets/{id}- Obtener ticket específicoPUT /tickets/{id}- Actualizar ticket
GET /tickets/{id}/interacciones- Listar comentariosPOST /tickets/{id}/interacciones- Agregar comentario
GET /admin/estadisticas- Estadísticas generalesGET /admin/usuarios- Listar usuarios
- Cambiar JWT_SECRET:
export JWT_SECRET="tu-secreto-super-seguro-aleatorio"- Usar contraseñas fuertes:
- Cambiar
SA_PASSWORDen docker-compose.yml - Actualizar contraseñas de usuarios de BD en
security.sql
- Habilitar HTTPS:
- Usar nginx como reverse proxy
- Obtener certificados SSL con Let's Encrypt
- Configurar backups externos:
- Sincronizar carpeta
/backupscon almacenamiento en la nube - Configurar cron jobs para backups automáticos
- Monitoreo:
- Implementar Prometheus + Grafana
- Configurar alertas de errores
- Logs centralizados con ELK Stack
- Fork del proyecto
- Crear rama feature (
git checkout -b feature/AmazingFeature) - Commit cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abrir Pull Request
Este proyecto es parte de una práctica académica de Arquitectura de Datos.
- FastAPI por el excelente framework
- Next.js por el desarrollo frontend moderno
- Microsoft SQL Server por la robustez empresarial
- Redis por el caché de alto rendimiento