diff --git a/src/documents/migrations/1076_add_deletionrequest_performance_indexes.py b/src/documents/migrations/1076_add_deletionrequest_performance_indexes.py new file mode 100644 index 000000000..c3913d2c3 --- /dev/null +++ b/src/documents/migrations/1076_add_deletionrequest_performance_indexes.py @@ -0,0 +1,55 @@ +# Generated manually for DeletionRequest performance optimization + +from django.db import migrations, models + + +class Migration(migrations.Migration): + """ + Add performance indexes for DeletionRequest model. + + These indexes optimize common query patterns: + - Filtering by user + status + created_at (most common listing query) + - Filtering by reviewed_at (for finding reviewed requests) + - Filtering by completed_at (for finding completed requests) + + Expected performance improvement: + - List queries: <100ms + - Filter queries: <50ms + + Addresses Issue: [AI Scanner] Índices de Performance para DeletionRequest + Epic: Migraciones de Base de Datos + """ + + dependencies = [ + ("documents", "1075_add_performance_indexes"), + ] + + operations = [ + # Composite index for user + status + created_at (most common query pattern) + # This supports queries like: DeletionRequest.objects.filter(user=user, status='pending').order_by('-created_at') + migrations.AddIndex( + model_name="deletionrequest", + index=models.Index( + fields=["user", "status", "created_at"], + name="delreq_user_status_created_idx", + ), + ), + # Index for reviewed_at (for filtering reviewed requests) + # Supports queries like: DeletionRequest.objects.filter(reviewed_at__isnull=False) + migrations.AddIndex( + model_name="deletionrequest", + index=models.Index( + fields=["reviewed_at"], + name="delreq_reviewed_at_idx", + ), + ), + # Index for completed_at (for filtering completed requests) + # Supports queries like: DeletionRequest.objects.filter(completed_at__isnull=False) + migrations.AddIndex( + model_name="deletionrequest", + index=models.Index( + fields=["completed_at"], + name="delreq_completed_at_idx", + ), + ), + ] diff --git a/src/documents/models.py b/src/documents/models.py index a31ce2e4d..78feb30bb 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -1676,6 +1676,13 @@ class DeletionRequest(models.Model): verbose_name = _("deletion request") verbose_name_plural = _("deletion requests") indexes = [ + # Composite index for common listing queries (by user, filtered by status, sorted by date) + models.Index(fields=['user', 'status', 'created_at'], name='delreq_user_status_created_idx'), + # Index for queries filtering by review date + models.Index(fields=['reviewed_at'], name='delreq_reviewed_at_idx'), + # Index for queries filtering by completion date + models.Index(fields=['completed_at'], name='delreq_completed_at_idx'), + # Legacy indexes kept for backward compatibility models.Index(fields=['status', 'user']), models.Index(fields=['created_at']), ]