Initial commit with Phase 0 Scaffolding
Some checks failed
Automated Container Build / build-and-push (push) Failing after 3s
CI / Backend (Python) (push) Failing after 28s
CI / Frontend (TypeScript) (push) Failing after 5m8s

This commit is contained in:
Elijah 2026-06-10 18:28:17 -07:00
parent b393607602
commit c545d4b17d
51 changed files with 7064 additions and 4 deletions

View file

@ -0,0 +1,32 @@
"""AnnotationState model — current working annotation layer per document."""
from datetime import datetime, timezone
from sqlalchemy import ForeignKey, Text
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.db import Base
def _now_iso() -> str:
return datetime.now(timezone.utc).isoformat()
class AnnotationState(Base):
"""
Current working annotation state for a document.
One row per document. `data` is a JSON text column containing
the full annotation array opaque to the server except during export.
"""
__tablename__ = "annotation_states"
document_id: Mapped[str] = mapped_column(
Text, ForeignKey("documents.id", ondelete="CASCADE"), primary_key=True
)
data: Mapped[str] = mapped_column(Text, default="[]") # JSON array
updated_at: Mapped[str] = mapped_column(Text, default=_now_iso, onupdate=_now_iso)
# Relationships
document: Mapped["Document"] = relationship("Document", back_populates="annotation_state")