from datetime import datetime from typing import Optional import uuid from sqlalchemy import JSON, Column, DateTime, ForeignKey, String, Boolean from sqlmodel import Field, SQLModel from utils.datetime_utils import get_current_utc_datetime class MasterDeckModel(SQLModel, table=True): __tablename__ = "master_decks" id: uuid.UUID = Field(primary_key=True, default_factory=uuid.uuid4) client_id: uuid.UUID = Field(sa_column=Column(ForeignKey("clients.id"))) name: str description: Optional[str] = Field( sa_column=Column(String, nullable=True), default=None ) original_file_path: str thumbnail_path: Optional[str] = Field( sa_column=Column(String, nullable=True), default=None ) parsed_config: Optional[dict] = Field(sa_column=Column(JSON), default=None) layouts: Optional[list] = Field(sa_column=Column(JSON), default=None) parse_mode: Optional[str] = Field( sa_column=Column(String, nullable=True), default="slides" ) # "slides" (actual slides, default) or "layouts" (all slideLayouts) parse_status: str = Field(default="pending") # pending, processing, completed, failed is_active: bool = Field(sa_column=Column(Boolean, default=True, nullable=False)) created_at: datetime = Field( sa_column=Column( DateTime(timezone=True), nullable=False, default=get_current_utc_datetime ), ) updated_at: datetime = Field( sa_column=Column( DateTime(timezone=True), nullable=False, default=get_current_utc_datetime, onupdate=get_current_utc_datetime, ), )