from datetime import datetime, timezone from typing import Optional from beanie import Document, PydanticObjectId from pydantic import BaseModel, Field class CheckupItem(BaseModel): title: str week: int date: Optional[str] = None items: list[str] = Field(default_factory=list) preparations: list[str] = Field(default_factory=list) notes: str = "" status: str = "upcoming" # upcoming / completed / missed importance: str = "medium" # high / medium / low report_ids: list[str] = Field(default_factory=list) # linked report IDs class CheckupPlan(Document): user_id: PydanticObjectId checkups: list[CheckupItem] = Field(default_factory=list) created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) class Settings: name = "checkup_plans" indexes = [ "user_id", ]