""" DataExport model — GDPR data portability requests. Maps to AGENT.md DBML: `data_exports` table (Lines 442-451). """ from django.conf import settings from django.db import models from core.models import BaseModel class DataExport(BaseModel): """ Tracks a user's data export request (GDPR Article 20). Goes through: pending → processing → completed → expired. """ class Status(models.TextChoices): PENDING = "pending", "Pending" PROCESSING = "processing", "Processing" COMPLETED = "completed", "Completed" FAILED = "failed", "Failed" EXPIRED = "expired", "Expired" user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="data_exports", ) org = models.ForeignKey( "organizations.Organization", on_delete=models.SET_NULL, null=True, blank=True, related_name="data_exports", ) status = models.CharField( max_length=20, choices=Status.choices, default=Status.PENDING, ) file_path = models.CharField(max_length=500, blank=True, default="") requested_at = models.DateTimeField(auto_now_add=True) completed_at = models.DateTimeField(null=True, blank=True) expires_at = models.DateTimeField(null=True, blank=True) class Meta: db_table = "data_exports" ordering = ["-requested_at"] def __str__(self) -> str: return f"Export {self.pk} ({self.get_status_display()})"