import os import uuid from django.db import models from core.models.base import Image from core.models.session import ServiceSession, ProjectSession def _service_session_upload_to(instance: "ServiceSessionImage", filename: str) -> str: base, ext = os.path.splitext(filename) ext = ext.lower() or ".jpg" sid = instance.service_session_id or "unassigned" return f"uploads/service_session/{sid}/{uuid.uuid4().hex}{ext}" def _service_session_thumb_upload_to(instance: "ServiceSessionImage", _filename: str) -> str: sid = instance.service_session_id or "unassigned" return f"uploads/service_session/{sid}/thumb/{uuid.uuid4().hex}.jpg" def _project_session_upload_to(instance: "ProjectSessionImage", filename: str) -> str: base, ext = os.path.splitext(filename) ext = ext.lower() or ".jpg" sid = instance.project_session_id or "unassigned" return f"uploads/project_session/{sid}/{uuid.uuid4().hex}{ext}" def _project_session_thumb_upload_to(instance: "ProjectSessionImage", _filename: str) -> str: sid = instance.project_session_id or "unassigned" return f"uploads/project_session/{sid}/thumb/{uuid.uuid4().hex}.jpg" class ServiceSessionImage(Image): service_session = models.ForeignKey(ServiceSession, on_delete=models.PROTECT, related_name='service_session_images') image = models.ImageField(upload_to=_service_session_upload_to) thumbnail = models.ImageField(upload_to=_service_session_thumb_upload_to, blank=True, null=True) def __str__(self) -> str: return self.title or f"ServiceSessionImage {self.id}" class Meta: ordering = ('-created_at',) indexes = [ models.Index(fields=['service_session', 'created_at']), models.Index(fields=['created_at']), ] class ProjectSessionImage(Image): project_session = models.ForeignKey(ProjectSession, on_delete=models.PROTECT, related_name='project_session_images') image = models.ImageField(upload_to=_project_session_upload_to) thumbnail = models.ImageField(upload_to=_project_session_thumb_upload_to, blank=True, null=True) def __str__(self) -> str: return self.title or f"ProjectSessionImage {self.id}" class Meta: ordering = ('-created_at',) indexes = [ models.Index(fields=['project_session', 'created_at']), models.Index(fields=['created_at']), ]