import uuid from django.conf import settings from django.db import models class FileIndex(models.Model): """Tracks every user file so media stays organized and served only through the gated FileRequest endpoint (never direct /media/ access).""" uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) owner = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True, related_name='files', ) kind = models.CharField(max_length=64, default='file', db_index=True) stored_path = models.CharField(max_length=1024) original_filename = models.CharField(max_length=255, blank=True, default='') content_type = models.CharField(max_length=128, blank=True, default='') size = models.IntegerField(default=0) md5 = models.CharField(max_length=32, db_index=True) created_at = models.DateTimeField(auto_now_add=True) class Meta: indexes = [ models.Index(fields=['owner', 'kind']), ] def __str__(self): return f'{self.kind} {self.uuid} ({self.owner})' @property def file_path(self): return self.stored_path