from __future__ import annotations import uuid from datetime import datetime from sqlalchemy import DateTime, ForeignKey, Integer, JSON from sqlalchemy.dialects.postgresql import JSONB, UUID from sqlalchemy.orm import Mapped, mapped_column from cpv3.db.base import Base, utcnow STATE_JSON_TYPE = JSON().with_variant(JSONB(), "postgresql") class ProjectWorkspace(Base): __tablename__ = "project_workspaces" project_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("projects.id", ondelete="CASCADE"), primary_key=True, ) revision: Mapped[int] = mapped_column(Integer, default=0, nullable=False) state: Mapped[dict] = mapped_column(STATE_JSON_TYPE, default=dict, nullable=False) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=utcnow, onupdate=utcnow, )