from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy.orm import Session from typing import List import crud import models import schemas from database import get_db router = APIRouter( prefix="/tasks", tags=["tasks"] ) @router.post("/", response_model=schemas.Task) def create_task(task: schemas.TaskCreate, db: Session = Depends(get_db)): return crud.create_task(db=db, task=task) @router.get("/", response_model=List[schemas.Task]) def read_tasks( skip: int = 0, limit: int = 100, telegram_user_id: str = Query(None, description="Filter by Telegram User ID"), status: models.TaskStatus = Query(None, description="Filter by task status"), db: Session = Depends(get_db) ): tasks = crud.get_tasks(db, skip=skip, limit=limit, telegram_user_id=telegram_user_id, status=status) return tasks @router.get("/{task_id}", response_model=schemas.Task) def read_task(task_id: int, telegram_user_id: str = Query(None, description="Telegram User ID for authorization"), db: Session = Depends(get_db)): db_task = crud.get_task(db, task_id=task_id, telegram_user_id=telegram_user_id) if db_task is None: raise HTTPException(status_code=404, detail="Task not found") return db_task @router.put("/{task_id}", response_model=schemas.Task) def update_task_endpoint(task_id: int, task: schemas.TaskUpdate, telegram_user_id: str = Query(None, description="Telegram User ID for authorization"), db: Session = Depends(get_db)): db_task = crud.update_task(db, task_id=task_id, task_update=task, telegram_user_id=telegram_user_id) if db_task is None: raise HTTPException(status_code=404, detail="Task not found or you don't have access") return db_task @router.delete("/{task_id}") def delete_task_endpoint(task_id: int, telegram_user_id: str = Query(None, description="Telegram User ID for authorization"), db: Session = Depends(get_db)): success = crud.delete_task(db, task_id=task_id, telegram_user_id=telegram_user_id) if not success: raise HTTPException(status_code=404, detail="Task not found or you don't have access") return {"message": "Task successfully deleted"}