
- Add Category model with id, name, description, color fields - Update Todo model with category_id foreign key relationship - Create Category CRUD operations with full validation - Add Category API endpoints with complete REST functionality - Update Todo API and CRUD to support category filtering - Create Alembic migration to add categories table - Clean up code structure and remove unused references - Update all import files and maintain proper relationships Categories system enables better todo organization and filtering capabilities.
55 lines
1.1 KiB
Python
55 lines
1.1 KiB
Python
from datetime import datetime
|
|
from typing import Optional, TYPE_CHECKING
|
|
from pydantic import BaseModel
|
|
|
|
from app.models.todo import Priority
|
|
|
|
if TYPE_CHECKING:
|
|
from app.schemas.category import Category
|
|
from app.schemas.project import Project
|
|
|
|
|
|
class TodoBase(BaseModel):
|
|
title: str
|
|
description: Optional[str] = None
|
|
completed: bool = False
|
|
priority: Priority = Priority.MEDIUM
|
|
category_id: Optional[int] = None
|
|
|
|
|
|
class TodoCreate(TodoBase):
|
|
pass
|
|
|
|
|
|
class TodoUpdate(BaseModel):
|
|
title: Optional[str] = None
|
|
description: Optional[str] = None
|
|
completed: Optional[bool] = None
|
|
priority: Optional[Priority] = None
|
|
category_id: Optional[int] = None
|
|
|
|
|
|
# Forward declaration to handle circular reference
|
|
class Todo(TodoBase):
|
|
id: int
|
|
created_at: datetime
|
|
updated_at: Optional[datetime] = None
|
|
category: Optional["Category"] = None
|
|
project: Optional["Project"] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class TodoListResponse(BaseModel):
|
|
items: list[Todo]
|
|
total: int
|
|
page: int
|
|
per_page: int
|
|
has_next: bool
|
|
has_prev: bool
|
|
|
|
|
|
# Update forward references
|
|
Todo.model_rebuild()
|