Automated Action f19a6fea04 Build complete Personal Task Management API with FastAPI
- Implemented user authentication with JWT tokens
- Created comprehensive task management with CRUD operations
- Added category system for task organization
- Set up SQLite database with SQLAlchemy ORM
- Configured Alembic for database migrations
- Added API documentation with OpenAPI/Swagger
- Implemented proper authorization and user scoping
- Created health check and root endpoints
- Updated README with complete documentation
2025-06-21 16:16:40 +00:00

87 lines
2.7 KiB
Python

from typing import List
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from app.db.session import get_db
from app.core.deps import get_current_active_user
from app.models.user import User
from app.models.category import Category as CategoryModel
from app.schemas.category import Category, CategoryCreate, CategoryUpdate
router = APIRouter()
@router.post("/", response_model=Category)
def create_category(
category: CategoryCreate,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_active_user)
):
db_category = CategoryModel(**category.dict(), owner_id=current_user.id)
db.add(db_category)
db.commit()
db.refresh(db_category)
return db_category
@router.get("/", response_model=List[Category])
def read_categories(
skip: int = 0,
limit: int = 100,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_active_user)
):
categories = db.query(CategoryModel).filter(
CategoryModel.owner_id == current_user.id
).offset(skip).limit(limit).all()
return categories
@router.get("/{category_id}", response_model=Category)
def read_category(
category_id: int,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_active_user)
):
category = db.query(CategoryModel).filter(
CategoryModel.id == category_id,
CategoryModel.owner_id == current_user.id
).first()
if category is None:
raise HTTPException(status_code=404, detail="Category not found")
return category
@router.put("/{category_id}", response_model=Category)
def update_category(
category_id: int,
category_update: CategoryUpdate,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_active_user)
):
category = db.query(CategoryModel).filter(
CategoryModel.id == category_id,
CategoryModel.owner_id == current_user.id
).first()
if category is None:
raise HTTPException(status_code=404, detail="Category not found")
update_data = category_update.dict(exclude_unset=True)
for field, value in update_data.items():
setattr(category, field, value)
db.commit()
db.refresh(category)
return category
@router.delete("/{category_id}")
def delete_category(
category_id: int,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_active_user)
):
category = db.query(CategoryModel).filter(
CategoryModel.id == category_id,
CategoryModel.owner_id == current_user.id
).first()
if category is None:
raise HTTPException(status_code=404, detail="Category not found")
db.delete(category)
db.commit()
return {"message": "Category deleted successfully"}