from datetime import datetime from enum import Enum from typing import Optional from pydantic import BaseModel, ConfigDict, Field class Priority(str, Enum): low = "low" medium = "medium" high = "high" class TaskBase(BaseModel): title: str = Field(..., min_length=1, max_length=200) description: Optional[str] = None date: str = Field(..., pattern=r"^\d{4}-\d{2}-\d{2}$") time: Optional[str] = Field(None, pattern=r"^\d{2}:\d{2}$") priority: Priority = Priority.medium class TaskCreate(TaskBase): pass class TaskUpdate(BaseModel): title: Optional[str] = Field(None, min_length=1, max_length=200) description: Optional[str] = None date: Optional[str] = Field(None, pattern=r"^\d{4}-\d{2}-\d{2}$") time: Optional[str] = Field(None, pattern=r"^\d{2}:\d{2}$") priority: Optional[Priority] = None is_done: Optional[bool] = None class TaskResponse(TaskBase): model_config = ConfigDict(from_attributes=True) id: str is_done: bool created_at: Optional[datetime] updated_at: Optional[datetime] class RescheduleRequest(BaseModel): target_date: str = Field(..., pattern=r"^\d{4}-\d{2}-\d{2}$") class HealthResponse(BaseModel): status: str = "ok"