import uuid from datetime import datetime from typing import Literal, Optional from pydantic import BaseModel, ConfigDict, Field StudyStatus = Literal["DRAFT", "ACTIVE", "CLOSED"] class StudyCreate(BaseModel): code: str = Field(min_length=1) name: str = Field(min_length=1) sponsor: Optional[str] = None protocol_no: Optional[str] = None phase: Optional[str] = None status: StudyStatus = "DRAFT" class StudyUpdate(BaseModel): code: Optional[str] = None name: Optional[str] = None sponsor: Optional[str] = None protocol_no: Optional[str] = None phase: Optional[str] = None status: Optional[StudyStatus] = None class StudyRead(BaseModel): id: uuid.UUID code: str name: str sponsor: Optional[str] protocol_no: Optional[str] phase: Optional[str] status: StudyStatus created_by: Optional[uuid.UUID] created_at: datetime model_config = ConfigDict(from_attributes=True)