nexus-5/core/models/session_image.py
2026-01-26 11:09:40 -05:00

62 lines
2.3 KiB
Python

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']),
]