CoolFace
Apppublic

TalhaRafique1/Full-stack-Todo

sourceHugging Faceupdated 8mo agoView on Hugging Face
0likes
todos.py141 linesDownload Raw Back to api
1"""Todo API endpoints with CRUD operations."""2 3from typing import List4from fastapi import APIRouter, HTTPException, status, Depends5from fastapi.security import HTTPAuthorizationCredentials6from sqlmodel import Session7from ..middleware.auth import security8from ..database import get_db9from ..models.todo import Task, TaskCreate, TaskUpdate, TaskResponse10from ..services.todo_service import create_todo_service11from ..middleware.auth import get_current_user, verify_user_access12from ..models.user import UserResponse13 14 15router = APIRouter(prefix="/api/{user_id}/tasks", tags=["todos"])16 17 18@router.get("", response_model=List[TaskResponse])19async def get_tasks(20    user_id: str,21    current_user: UserResponse = Depends(get_current_user),22    credentials: HTTPAuthorizationCredentials = Depends(security),23    db: Session = Depends(get_db)24):25    """Get all tasks for the authenticated user."""26    # Verify user owns the requested data27    await verify_user_access(user_id, credentials)28 29    service = create_todo_service(db, user_id)30    tasks = service.get_all()31    return tasks32 33 34@router.post("", response_model=TaskResponse, status_code=status.HTTP_201_CREATED)35async def create_task(36    user_id: str,37    task_data: TaskCreate,38    current_user: UserResponse = Depends(get_current_user),39    credentials: HTTPAuthorizationCredentials = Depends(security),40    db: Session = Depends(get_db)41):42    """Create a new task for the authenticated user."""43    await verify_user_access(user_id, credentials)44 45    service = create_todo_service(db, user_id)46    task = service.create(task_data)47    return task48 49 50@router.get("/{task_id}", response_model=TaskResponse)51async def get_task(52    user_id: str,53    task_id: str,54    current_user: UserResponse = Depends(get_current_user),55    credentials: HTTPAuthorizationCredentials = Depends(security),56    db: Session = Depends(get_db)57):58    """Get a specific task by ID."""59    await verify_user_access(user_id, credentials)60 61    service = create_todo_service(db, user_id)62    task = service.get_by_id(task_id)63 64    if not task:65        raise HTTPException(66            status_code=status.HTTP_404_NOT_FOUND,67            detail="Task not found"68        )69 70    return task71 72 73@router.put("/{task_id}", response_model=TaskResponse)74async def update_task(75    user_id: str,76    task_id: str,77    task_data: TaskUpdate,78    current_user: UserResponse = Depends(get_current_user),79    credentials: HTTPAuthorizationCredentials = Depends(security),80    db: Session = Depends(get_db)81):82    """Update a task."""83    await verify_user_access(user_id, credentials)84 85    service = create_todo_service(db, user_id)86    task = service.update(task_id, task_data)87 88    if not task:89        raise HTTPException(90            status_code=status.HTTP_404_NOT_FOUND,91            detail="Task not found"92        )93 94    return task95 96 97@router.patch("/{task_id}/complete", response_model=TaskResponse)98async def toggle_complete(99    user_id: str,100    task_id: str,101    current_user: UserResponse = Depends(get_current_user),102    credentials: HTTPAuthorizationCredentials = Depends(security),103    db: Session = Depends(get_db)104):105    """Toggle task completion status."""106    await verify_user_access(user_id, credentials)107 108    service = create_todo_service(db, user_id)109    task = service.toggle_completion(task_id)110 111    if not task:112        raise HTTPException(113            status_code=status.HTTP_404_NOT_FOUND,114            detail="Task not found"115        )116 117    return task118 119 120@router.delete("/{task_id}", status_code=status.HTTP_204_NO_CONTENT)121async def delete_task(122    user_id: str,123    task_id: str,124    current_user: UserResponse = Depends(get_current_user),125    credentials: HTTPAuthorizationCredentials = Depends(security),126    db: Session = Depends(get_db)127):128    """Delete a task."""129    await verify_user_access(user_id, credentials)130 131    service = create_todo_service(db, user_id)132    success = service.delete(task_id)133 134    if not success:135        raise HTTPException(136            status_code=status.HTTP_404_NOT_FOUND,137            detail="Task not found"138        )139 140    return None141