from datetime import datetime from typing import List, Optional from pydantic import BaseModel from app.models.todo import PriorityLevel from app.schemas.category import Category from app.schemas.tag import Tag # Shared properties class TodoBase(BaseModel): title: Optional[str] = None description: Optional[str] = None is_completed: Optional[bool] = False priority: Optional[PriorityLevel] = PriorityLevel.MEDIUM due_date: Optional[datetime] = None category_id: Optional[int] = None # Properties to receive on item creation class TodoCreate(TodoBase): title: str tags: Optional[List[int]] = None # List of tag IDs # Properties to receive on item update class TodoUpdate(TodoBase): tags: Optional[List[int]] = None # List of tag IDs # Properties shared by models stored in DB class TodoInDBBase(TodoBase): id: int title: str owner_id: int class Config: from_attributes = True # Properties to return to client class Todo(TodoInDBBase): category: Optional[Category] = None tags: List[Tag] = [] # Properties properties stored in DB class TodoInDB(TodoInDBBase): pass