MukeshKapoor25's picture
minio doc store
9b11567
"""
StoredObject SQLAlchemy ORM model for documents and images storage.
"""
from datetime import datetime
import uuid
from sqlalchemy import (
BigInteger,
Boolean,
Column,
Index,
String,
Text,
TIMESTAMP,
UniqueConstraint,
text,
)
from sqlalchemy.dialects.postgresql import UUID
from app.core.database import Base
class StoredObject(Base):
"""
ORM model for trans.stored_objects table.
Represents uploaded documents/images with metadata, visibility, soft delete,
and legal hold support for audit compliance.
"""
__tablename__ = "stored_objects"
__table_args__ = (
UniqueConstraint(
"tenant_id",
"domain",
"entity_id",
"object_key",
"deleted_at",
name="uq_stored_object_active_key",
),
Index(
"ix_stored_objects_active",
"tenant_id",
"domain",
"entity_id",
postgresql_where=text("deleted_at IS NULL"),
),
Index(
"ix_stored_objects_checksum",
"tenant_id",
"checksum_sha256",
postgresql_where=text("deleted_at IS NULL"),
),
{"schema": "trans"},
)
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
tenant_id = Column(Text, nullable=False)
domain = Column(Text, nullable=False)
entity_id = Column(Text, nullable=False)
bucket_name = Column(Text, nullable=False)
object_key = Column(Text, nullable=False)
category = Column(Text, nullable=False)
file_name = Column(Text, nullable=False)
mime_type = Column(Text, nullable=False)
file_size = Column(BigInteger, nullable=True)
checksum_sha256 = Column(Text, nullable=True)
visibility = Column(String(16), nullable=False, default="private")
created_by = Column(Text, nullable=False)
created_at = Column(TIMESTAMP, nullable=False, default=datetime.utcnow)
deleted_at = Column(TIMESTAMP, nullable=True)
legal_hold = Column(Boolean, nullable=False, default=False)
def __repr__(self) -> str:
return f"<StoredObject id={self.id} tenant={self.tenant_id} key={self.object_key}>"