API REST desarrollada con FastAPI para el Sistema de Alertas Tempranas de la Universidad de Pamplona.
- Python 3.14+
- PostgreSQL (Neon Database)
- Clonar el repositorio y acceder al directorio:
cd AT-Backend- Crear un entorno virtual:
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows- Instalar dependencias:
pip install -r requirements.txt- Instalar psycopg2 (requerido para PostgreSQL):
pip install psycopg2-binary- Copiar el archivo de ejemplo de configuración:
cp .env.example .env- Editar
.envcon los valores correspondientes:
# Database (Neon PostgreSQL)
DATABASE_URL=postgresql://user:password@host.neon.tech/neondb?sslmode=require
# JWT Configuration
JWT_SECRET_KEY=your_super_secret_key_min_32_characters
JWT_ALGORITHM=HS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=15
JWT_REFRESH_TOKEN_EXPIRE_DAYS=7
# Fernet Encryption (datos sensibles)
FERNET_KEY=your_fernet_key_here
# App Configuration
APP_NAME=Sistema de Alertas Tempranas
APP_VERSION=1.0.0
DEBUG=false# Generar JWT_SECRET_KEY (32+ caracteres)
openssl rand -hex 32
# Generar FERNET_KEY
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"uvicorn app.main:app --reload --port 8000uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4El servidor estará disponible en:
- API: http://localhost:8000
- Documentación Swagger: http://localhost:8000/docs
- Documentación ReDoc: http://localhost:8000/redoc
Ejecutar el script de seed para crear datos iniciales:
python seed.pyEsto creará:
- 29 permisos del sistema
- 3 usuarios de prueba (admin, docente, apoyo)
| Contraseña | Rol | |
|---|---|---|
| admin@unipamplona.edu.co | Admin123! | ADMINISTRADOR |
| docente@unipamplona.edu.co | Docente123! | DOCENTE |
| apoyo@unipamplona.edu.co | Apoyo123! | APOYO |
| pruebas@unipamplona.edu.co | Pruebas123! | DOCENTE |
AT-Backend/
├── app/
│ ├── config.py # Configuración del proyecto
│ ├── database.py # Conexión a la base de datos
│ ├── main.py # Aplicación FastAPI principal
│ ├── models/ # Modelos SQLAlchemy
│ │ ├── user.py # Modelo de usuario
│ │ ├── estudiante.py # Modelo de estudiante
│ │ ├── alerta.py # Modelo de alertas
│ │ └── sistema.py # Modelos del sistema
│ ├── routers/ # Endpoints de la API
│ │ ├── auth.py # Autenticación
│ │ ├── estudiantes.py # Gestión de estudiantes
│ │ ├── alertas.py # Gestión de alertas
│ │ ├── admin.py # Administración
│ │ └── dashboard.py # Dashboard
│ ├── schemas/ # Schemas Pydantic
│ │ ├── auth.py # Schemas de autenticación
│ │ ├── estudiante.py # Schemas de estudiantes
│ │ └── alerta.py # Schemas de alertas
│ └── utils/ # Utilidades
│ ├── auth.py # Funciones JWT
│ ├── security.py # Encriptación
│ ├── permisos.py # Gestión de permisos
│ └── audit.py # Auditoría
├── seed.py # Script de inicialización
├── requirements.txt # Dependencias Python
└── .env.example # Ejemplo de configuración
El sistema cuenta con 29 permisos granulares:
- Gestionan usuarios, estudiantes, alertas, actividades
- Acceso completo a encuestas, artefactos y parametrización
- Solo
create_estudiante- Crear estudiantes - Solo
crear_alerta- Crear alertas
POST /api/auth/login- Iniciar sesiónPOST /api/auth/logout- Cerrar sesiónPOST /api/auth/refresh- Renovar token
GET /api/estudiantes- Listar estudiantesPOST /api/estudiantes- Crear estudiante
GET /api/alertas- Listar alertasPOST /api/alertas- Crear alertaGET /api/alertas/stats- Estadísticas
GET /api/admin/usuarios- Listar usuariosPOST /api/admin/usuarios- Crear usuarioGET /api/admin/permisos- Listar permisos
- Framework: FastAPI
- ORM: SQLAlchemy 2.0
- Base de Datos: PostgreSQL (Neon)
- Autenticación: JWT con refresh tokens
- Seguridad: bcrypt, Fernet encryption
- Validación: Pydantic v2
- El sistema está diseñado para Python 3.14+
- Requiere pydantic==2.13.4 por compatibilidad
- Usa CORS para permitir conexiones desde el frontend
- Incluye rate limiting para protección de login