Files
2026-05-28 10:54:47 +08:00

72 lines
2.0 KiB
Python

import enum
import uuid
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, ConfigDict, Field
from app.schemas.document_version import DocumentVersionRead, DocumentVersionSummary
from app.schemas.distribution import DistributionStats
from app.schemas.user import UserDisplay
class DocumentScopeType(str, enum.Enum):
GLOBAL = "GLOBAL"
SITE = "SITE"
DERIVED = "DERIVED"
class DocumentStatus(str, enum.Enum):
DRAFT = "DRAFT"
ACTIVE = "ACTIVE"
ARCHIVED = "ARCHIVED"
class DocumentCreate(BaseModel):
trial_id: uuid.UUID
site_id: Optional[uuid.UUID] = None
etmf_node_id: Optional[uuid.UUID] = None
doc_no: str
doc_type: str
title: str
scope_type: DocumentScopeType = DocumentScopeType.GLOBAL
owner_id: Optional[uuid.UUID] = None
description: Optional[str] = None
class DocumentUpdate(BaseModel):
title: Optional[str] = None
doc_type: Optional[str] = None
scope_type: Optional[DocumentScopeType] = None
owner_id: Optional[uuid.UUID] = None
site_id: Optional[uuid.UUID] = None
etmf_node_id: Optional[uuid.UUID] = None
status: Optional[DocumentStatus] = None
description: Optional[str] = None
class DocumentSummary(BaseModel):
id: uuid.UUID
trial_id: uuid.UUID
site_id: Optional[uuid.UUID] = None
etmf_node_id: Optional[uuid.UUID] = None
doc_type: str
title: str
scope_type: DocumentScopeType
owner_id: Optional[uuid.UUID]
current_effective_version_id: Optional[uuid.UUID]
current_effective_version: Optional[DocumentVersionSummary] = None
created_at: datetime
updated_at: datetime
model_config = ConfigDict(from_attributes=True)
class DocumentDetail(DocumentSummary):
description: Optional[str] = None
owner: Optional[UserDisplay] = None
version_timeline: list[DocumentVersionRead] = Field(default_factory=list)
distribution_stats: DistributionStats = Field(default_factory=DistributionStats)
model_config = ConfigDict(from_attributes=True)