from sqlalchemy import Column, String, DateTime, func, ForeignKey, Enum from sqlalchemy.dialects.postgresql import UUID, JSONB import uuid from sqlalchemy.orm import relationship import enum from app.db.session import Base class AssetType(str, enum.Enum): Character = "Character" Location = "Location" Object = "Object" Style = "Style" class Ingredient(Base): __tablename__ = "ingredients" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) project_id = Column(UUID(as_uuid=True), ForeignKey("projects.id", ondelete="CASCADE"), nullable=False) name = Column(String, nullable=False) type = Column(Enum(AssetType, name="asset_type"), nullable=False) s3_key = Column(String, nullable=False) s3_bucket = Column(String, default="auteur-assets") thumbnail_key = Column(String, nullable=True) metadata_ = Column("metadata", JSONB, default={}) # 'metadata' is reserved in SQLAlchemy Base created_at = Column(DateTime, default=func.now()) project = relationship("Project", back_populates="ingredients")