import enum import uuid from datetime import datetime from typing import Optional from pydantic import BaseModel, ConfigDict from app.schemas.user import UserDisplay class DocumentVersionStatus(str, enum.Enum): DRAFT = "DRAFT" SUBMITTED = "SUBMITTED" APPROVED = "APPROVED" EFFECTIVE = "EFFECTIVE" SUPERSEDED = "SUPERSEDED" ARCHIVED = "ARCHIVED" WITHDRAWN = "WITHDRAWN" class DocumentVersionSummary(BaseModel): id: uuid.UUID version_no: str status: DocumentVersionStatus model_config = ConfigDict(from_attributes=True) class DocumentVersionRead(BaseModel): id: uuid.UUID document_id: uuid.UUID version_no: str parent_version_id: Optional[uuid.UUID] = None derived_from_version_id: Optional[uuid.UUID] = None status: DocumentVersionStatus effective_at: Optional[datetime] = None superseded_at: Optional[datetime] = None file_uri: str original_filename: Optional[str] = None file_hash: str file_size: int mime_type: Optional[str] = None change_summary: Optional[str] = None created_by: Optional[uuid.UUID] = None created_by_user: Optional[UserDisplay] = None submitted_at: Optional[datetime] = None approved_at: Optional[datetime] = None withdrawn_at: Optional[datetime] = None created_at: datetime model_config = ConfigDict(from_attributes=True)