# Generated by Django 5.2.6 on 2025-09-30 07:53 import django.db.models.deletion import django.utils.timezone from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('authentication', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='AuditLog', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('timestamp', models.DateTimeField(db_index=True, default=django.utils.timezone.now)), ('category', models.CharField(choices=[('AUTH', 'Autenticación'), ('ACCESS', 'Control de Acceso'), ('DATA', 'Modificación de Datos'), ('SECURITY', 'Evento de Seguridad'), ('SYSTEM', 'Sistema')], db_index=True, max_length=20)), ('severity', models.CharField(choices=[('INFO', 'Información'), ('WARNING', 'Advertencia'), ('ERROR', 'Error'), ('CRITICAL', 'Crítico')], db_index=True, default='INFO', max_length=20)), ('action', models.CharField(choices=[('LOGIN_SUCCESS', 'Login exitoso'), ('LOGIN_FAILED', 'Login fallido'), ('LOGOUT', 'Logout'), ('TOKEN_REFRESH', 'Token refrescado'), ('ACCESS_DENIED', 'Acceso denegado'), ('RATE_LIMITED', 'Rate limit excedido'), ('ATTENDANCE_CREATE', 'Asistencia registrada'), ('ATTENDANCE_UPDATE', 'Asistencia actualizada'), ('ATTENDANCE_DELETE', 'Asistencia eliminada'), ('EVENT_CREATE', 'Evento creado'), ('EVENT_UPDATE', 'Evento actualizado'), ('EVENT_DELETE', 'Evento eliminado'), ('EXTERNAL_USER_REGISTER', 'Usuario externo registrado'), ('EXTERNAL_USER_APPROVE', 'Usuario externo aprobado'), ('EXTERNAL_USER_REJECT', 'Usuario externo rechazado'), ('PERMISSION_CHANGE', 'Cambio de permisos'), ('DATA_EXPORT', 'Exportación de datos'), ('OTHER', 'Otro')], max_length=50)), ('username', models.CharField(blank=True, max_length=150)), ('ip_address', models.GenericIPAddressField(blank=True, null=True)), ('user_agent', models.TextField(blank=True)), ('path', models.CharField(blank=True, max_length=255)), ('method', models.CharField(blank=True, max_length=10)), ('message', models.TextField()), ('details', models.JSONField(blank=True, default=dict)), ('success', models.BooleanField(default=True)), ('status_code', models.IntegerField(blank=True, null=True)), ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='audit_logs', to=settings.AUTH_USER_MODEL)), ], options={ 'verbose_name': 'Registro de Auditoría', 'verbose_name_plural': 'Registros de Auditoría', 'ordering': ['-timestamp'], 'indexes': [models.Index(fields=['-timestamp', 'category'], name='authenticat_timesta_506bb9_idx'), models.Index(fields=['-timestamp', 'severity'], name='authenticat_timesta_5cf4a0_idx'), models.Index(fields=['-timestamp', 'user'], name='authenticat_timesta_721c38_idx'), models.Index(fields=['ip_address', '-timestamp'], name='authenticat_ip_addr_d5daa5_idx')], }, ), ]