from pydantic import BaseModel from typing import Optional, Literal class TaskCreate(BaseModel): date: str # YYYY-MM-DD title: str repeat_weekly: bool = False copy_to_weekdays: Optional[list[int]] = None # список дней недели для копирования class EventCreate(BaseModel): date: str # YYYY-MM-DD start_time: str # HH:MM duration_min: int title: str repeat_weekly: bool = False class TaskResponse(BaseModel): id: int date: str title: str kind: Literal["task"] = "task" repeat_weekly: bool = False class EventResponse(BaseModel): id: int date: str start_time: str duration_min: int title: str kind: Literal["event"] = "event" repeat_weekly: bool = False class ScheduleItem(BaseModel): kind: Literal["task", "event"] id: int date: str source_date: Optional[str] = None title: str start_time: Optional[str] = None duration_min: Optional[int] = None repeat_weekly: Optional[bool] = None class ScheduleResponse(BaseModel): items: list[ScheduleItem] class UpdateRequest(BaseModel): title: Optional[str] = None date: Optional[str] = None start_time: Optional[str] = None duration_min: Optional[int] = None occurrence_date: Optional[str] = None scope: Optional[Literal["one_date", "series"]] = None # для weekly tasks