import datetime from fansifter_common.utils import timezone from fansifter_common.utils.uuid import uuid_string from sqlalchemy.orm import Mapped, mapped_column from ows_text_campaigns.adapters.db import Model from ows_text_campaigns.assets.utils import get_assets_url class Asset(Model, kw_only=True): __tablename__ = "text_campaign_asset" id: Mapped[str] = mapped_column(primary_key=True, default_factory=uuid_string) object_type: Mapped[str] object_id: Mapped[str] original_filename: Mapped[str] key: Mapped[str] content_type: Mapped[str] extension: Mapped[str] file_size: Mapped[int] image_width: Mapped[int | None] = mapped_column(default=None) image_height: Mapped[int | None] = mapped_column(default=None) created_at: Mapped[datetime.datetime] = mapped_column(default_factory=timezone.now) created_by: Mapped[str | None] = mapped_column(default=None) @property def url(self) -> str | None: if self.key: return get_assets_url(self.key) return None