from datetime import datetime from enum import Enum from typing import Optional from pydantic import BaseModel, Field class PriorityEnum(int, Enum): LOW = 1 MEDIUM = 2 HIGH = 3 class TaskBase(BaseModel): title: str = Field(..., min_length=1, max_length=255, description="Title of the task") description: Optional[str] = Field(None, description="Detailed description of the task") priority: PriorityEnum = Field(PriorityEnum.MEDIUM, description="Priority level of the task") due_date: Optional[datetime] = Field(None, description="Due date for the task") class TaskCreate(TaskBase): pass class TaskUpdate(BaseModel): title: Optional[str] = Field(None, min_length=1, max_length=255) description: Optional[str] = None is_completed: Optional[bool] = None priority: Optional[PriorityEnum] = None due_date: Optional[datetime] = None class TaskInDB(TaskBase): id: int is_completed: bool created_at: datetime updated_at: datetime completed_at: Optional[datetime] = None class Config: from_attributes = True class TaskResponse(TaskInDB): """Task schema for response""" pass