import uuid from datetime import datetime from sqlalchemy import String, Integer, Text, DateTime, Float, JSON, Enum as SAEnum from sqlalchemy.orm import Mapped, mapped_column from app.database import Base import enum class ScriptSource(str, enum.Enum): builtin = "builtin" ai_generated = "ai_generated" uploaded = "uploaded" creator = "creator" class ScriptStatus(str, enum.Enum): draft = "draft" published = "published" disabled = "disabled" class Script(Base): __tablename__ = "scripts" id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) title: Mapped[str] = mapped_column(String(200)) type: Mapped[str] = mapped_column(String(50)) difficulty: Mapped[int] = mapped_column(Integer) min_players: Mapped[int] = mapped_column(Integer) max_players: Mapped[int] = mapped_column(Integer) duration_min: Mapped[int] = mapped_column(Integer) background: Mapped[str] = mapped_column(Text) config: Mapped[str] = mapped_column(JSON) source: Mapped[str] = mapped_column(String(20), default=ScriptSource.builtin.value) creator_id: Mapped[str] = mapped_column(String(36), nullable=True) status: Mapped[str] = mapped_column(String(20), default=ScriptStatus.published.value) rating_avg: Mapped[float] = mapped_column(Float, default=0.0) play_count: Mapped[int] = mapped_column(Integer, default=0) created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)