36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
from dataclasses import dataclass, field
|
|
from datetime import UTC, datetime
|
|
|
|
from dataclasses_ujson.dataclasses_ujson import UJsonMixin # type: ignore
|
|
from sqlalchemy import BigInteger, Boolean, Column, DateTime, String
|
|
|
|
from server.config import get_app_config
|
|
from server.infra.db.db_mapper import mapper_registry
|
|
|
|
|
|
@mapper_registry.mapped
|
|
@dataclass
|
|
class Attachment(UJsonMixin):
|
|
__sa_dataclass_metadata_key__ = "sa"
|
|
__tablename__ = "attachments"
|
|
|
|
id: str = field(metadata={"sa": Column(String(), primary_key=True, nullable=False)})
|
|
size: int = field(metadata={"sa": Column(BigInteger(), nullable=False)})
|
|
storage_driver_name: str = field(metadata={"sa": Column(String(), nullable=False)})
|
|
path: str = field(metadata={"sa": Column(String(), nullable=False)})
|
|
media_type: str = field(metadata={"sa": Column(String(), nullable=False)})
|
|
content_type: str = field(metadata={"sa": Column(String(), nullable=False)})
|
|
|
|
created_at: datetime = field(
|
|
default=datetime.now(UTC),
|
|
metadata={"sa": Column(DateTime(timezone=True), nullable=False)},
|
|
)
|
|
updated_at: datetime = field(
|
|
default=datetime.now(UTC),
|
|
metadata={"sa": Column(DateTime(timezone=True), nullable=False)},
|
|
)
|
|
is_deleted: bool = field(default=False, metadata={"sa": Column(Boolean(), nullable=False, default=False)})
|
|
|
|
def __str__(self):
|
|
return f"{get_app_config().app_public_url}/api/v0/attachment/{self.id}.original.ext"
|