import uuid from datetime import date, datetime from typing import Optional from pydantic import BaseModel, ConfigDict, Field from app.schemas.user import UserDisplay class SiteDisplay(BaseModel): id: uuid.UUID name: Optional[str] = None model_config = ConfigDict(from_attributes=True) class MilestoneCreate(BaseModel): type: str name: Optional[str] = None planned_date: Optional[date] = None owner_id: Optional[uuid.UUID] = None site_id: Optional[uuid.UUID] = None notes: Optional[str] = None status: str = Field(default="NOT_STARTED") class MilestoneUpdate(BaseModel): name: Optional[str] = None planned_date: Optional[date] = None actual_date: Optional[date] = None status: Optional[str] = None owner_id: Optional[uuid.UUID] = None site_id: Optional[uuid.UUID] = None notes: Optional[str] = None class MilestoneRead(BaseModel): id: uuid.UUID study_id: uuid.UUID type: str name: str planned_date: Optional[date] actual_date: Optional[date] status: str owner_id: Optional[uuid.UUID] site_id: Optional[uuid.UUID] = None owner: Optional[UserDisplay] = None site: Optional[SiteDisplay] = None notes: Optional[str] created_at: datetime updated_at: datetime model_config = ConfigDict(from_attributes=True)