import uuid from datetime import datetime from pydantic import BaseModel, ConfigDict from app.models.enums import CitationConfidence class SourceCreate(BaseModel): title: str author: str | None = None source_type: str | None = None repository: str | None = None url: str | None = None citation_text: str | None = None publication_info: str | None = None quality_note: str | None = None class SourceRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: uuid.UUID tree_id: uuid.UUID title: str author: str | None source_type: str | None repository: str | None url: str | None citation_text: str | None publication_info: str | None quality_note: str | None created_at: datetime class SourceUpdate(BaseModel): title: str | None = None author: str | None = None source_type: str | None = None repository: str | None = None url: str | None = None citation_text: str | None = None publication_info: str | None = None quality_note: str | None = None class CitationUpdate(BaseModel): page: str | None = None detail: str | None = None confidence: CitationConfidence | None = None class CitationCreate(BaseModel): source_id: uuid.UUID # Exactly one target fact. person_id: uuid.UUID | None = None event_id: uuid.UUID | None = None name_id: uuid.UUID | None = None relationship_id: uuid.UUID | None = None page: str | None = None detail: str | None = None confidence: CitationConfidence | None = None class CitationRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: uuid.UUID tree_id: uuid.UUID source_id: uuid.UUID person_id: uuid.UUID | None event_id: uuid.UUID | None name_id: uuid.UUID | None relationship_id: uuid.UUID | None page: str | None detail: str | None confidence: CitationConfidence | None created_at: datetime