MediaRouter / app /projects /models /editor.py
basyx's picture
Upload 794 files
1b2323a verified
Raw
History Blame Contribute Delete
1.66 kB
from __future__ import annotations
from datetime import datetime
from uuid import uuid4
from sqlalchemy import (
DateTime,
ForeignKey,
Index,
Integer,
JSON,
String,
UniqueConstraint,
)
from sqlalchemy.orm import Mapped, mapped_column
from app.security.models import Base, utcnow
class ProjectEditorState(Base):
"""The one authoritative current editor document for a project."""
__tablename__ = "project_editor_states"
__table_args__ = (
UniqueConstraint("project_id", name="uq_project_editor_state_project"),
Index("ix_project_editor_states_workspace_project", "workspace_id", "project_id"),
)
id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
workspace_id: Mapped[str] = mapped_column(
String(36), ForeignKey("workspaces.id", ondelete="RESTRICT"), nullable=False
)
project_id: Mapped[str] = mapped_column(
String(36), ForeignKey("projects.id", ondelete="RESTRICT"), nullable=False
)
revision: Mapped[int] = mapped_column(Integer, nullable=False, default=1)
schema_version: Mapped[int] = mapped_column(Integer, nullable=False)
state_json: Mapped[dict[str, object]] = mapped_column(
"state", JSON, nullable=False, default=dict
)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=utcnow)
updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=utcnow, onupdate=utcnow)
updated_by: Mapped[str] = mapped_column(
String(36), ForeignKey("users.id", ondelete="RESTRICT"), nullable=False
)