107 lines
6.0 KiB
Python
107 lines
6.0 KiB
Python
"""PMFlow Project Launch models."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from typing import Any, Optional
|
|
|
|
from sqlalchemy import BigInteger, Float, ForeignKey, Integer, Text, TIMESTAMP, UniqueConstraint, VARCHAR
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from .base import Base
|
|
from .types import JSONB
|
|
|
|
|
|
class PMFlowLaunchDraft(Base):
|
|
__tablename__ = "pmflow_launch_drafts"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
user_id: Mapped[int] = mapped_column(BigInteger, ForeignKey("users.id"), nullable=False, index=True)
|
|
draft_id: Mapped[str] = mapped_column(VARCHAR(64), nullable=False, index=True)
|
|
input_text: Mapped[str] = mapped_column(Text, nullable=False)
|
|
input_type: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="text")
|
|
source: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="web")
|
|
attachments: Mapped[Any] = mapped_column(JSONB, nullable=False, default=list)
|
|
draft_payload: Mapped[Any] = mapped_column(JSONB, nullable=False)
|
|
edited_payload: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
status: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="draft", index=True)
|
|
confidence: Mapped[Optional[float]] = mapped_column(Float, nullable=True)
|
|
warnings: Mapped[Any] = mapped_column(JSONB, nullable=False, default=list)
|
|
confirmed_project_id: Mapped[Optional[int]] = mapped_column(BigInteger, ForeignKey("projects.id"), nullable=True, index=True)
|
|
expires_at: Mapped[datetime] = mapped_column(TIMESTAMP, nullable=False, index=True)
|
|
confirmed_at: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True)
|
|
confirm_request_hash: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True)
|
|
|
|
__table_args__ = (
|
|
UniqueConstraint("tenant_id", "draft_id", name="uq_pmflow_launch_drafts_tenant_draft_id"),
|
|
)
|
|
|
|
|
|
class PMFlowLaunchDraftJob(Base):
|
|
__tablename__ = "pmflow_launch_draft_jobs"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
user_id: Mapped[int] = mapped_column(BigInteger, ForeignKey("users.id"), nullable=False, index=True)
|
|
job_id: Mapped[str] = mapped_column(VARCHAR(64), nullable=False, index=True)
|
|
revision_id: Mapped[str] = mapped_column(VARCHAR(64), nullable=False, index=True)
|
|
parent_draft_id: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True, index=True)
|
|
superseded_by_job_id: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True, index=True)
|
|
result_draft_id: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True, index=True)
|
|
input_text: Mapped[str] = mapped_column(Text, nullable=False)
|
|
input_type: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="text")
|
|
source: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="web")
|
|
attachments: Mapped[Any] = mapped_column(JSONB, nullable=False, default=list)
|
|
mode: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="create")
|
|
revision_note: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
status: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="queued", index=True)
|
|
result_payload: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
changed_fields: Mapped[Any] = mapped_column(JSONB, nullable=False, default=list)
|
|
error_code: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True)
|
|
error_message: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
started_at: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True)
|
|
completed_at: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True)
|
|
expires_at: Mapped[datetime] = mapped_column(TIMESTAMP, nullable=False, index=True)
|
|
|
|
__table_args__ = (
|
|
UniqueConstraint("tenant_id", "job_id", name="uq_pmflow_launch_draft_jobs_tenant_job_id"),
|
|
UniqueConstraint("tenant_id", "revision_id", name="uq_pmflow_launch_draft_jobs_tenant_revision_id"),
|
|
)
|
|
|
|
|
|
class PMFlowThread(Base):
|
|
__tablename__ = "pmflow_threads"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
project_id: Mapped[int] = mapped_column(BigInteger, ForeignKey("projects.id"), nullable=False, index=True)
|
|
launch_draft_id: Mapped[Optional[int]] = mapped_column(
|
|
BigInteger, ForeignKey("pmflow_launch_drafts.id"), nullable=True, index=True
|
|
)
|
|
title: Mapped[str] = mapped_column(VARCHAR(255), nullable=False)
|
|
objective: Mapped[str] = mapped_column(Text, nullable=False)
|
|
status: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="active", index=True)
|
|
source: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="project_launch", index=True)
|
|
|
|
__table_args__ = (
|
|
UniqueConstraint("tenant_id", "project_id", "source", name="uq_pmflow_threads_tenant_project_source"),
|
|
)
|
|
|
|
|
|
class PMFlowThreadMessage(Base):
|
|
__tablename__ = "pmflow_thread_messages"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
thread_id: Mapped[int] = mapped_column(BigInteger, ForeignKey("pmflow_threads.id"), nullable=False, index=True)
|
|
project_id: Mapped[int] = mapped_column(BigInteger, ForeignKey("projects.id"), nullable=False, index=True)
|
|
launch_draft_id: Mapped[Optional[int]] = mapped_column(
|
|
BigInteger, ForeignKey("pmflow_launch_drafts.id"), nullable=True, index=True
|
|
)
|
|
role: Mapped[str] = mapped_column(VARCHAR(32), nullable=False)
|
|
content: Mapped[str] = mapped_column(Text, nullable=False)
|
|
source: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="project_launch")
|
|
attachments: Mapped[Any] = mapped_column(JSONB, nullable=False, default=list)
|
|
message_metadata: Mapped[Any] = mapped_column(JSONB, nullable=False, default=dict)
|
|
status: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="sent", index=True)
|
|
|
|
|
|
__all__ = ["PMFlowLaunchDraft", "PMFlowLaunchDraftJob", "PMFlowThread", "PMFlowThreadMessage"]
|