todo_chatbot / src /api /recurring.py
Awais68
Deploy FastAPI backend with MCP and OpenAI agents
cccf200
Raw
History Blame Contribute Delete
4.13 kB
"""
Recurring tasks API endpoints.
"""
from typing import List
from fastapi import APIRouter, Depends, HTTPException
from sqlmodel import Session
from pydantic import BaseModel
from src.db.session import get_session
from src.mcp.tools import (
create_recurring_task,
list_recurring_tasks,
pause_recurring_task,
resume_recurring_task,
delete_recurring_task
)
router = APIRouter()
class RecurringTaskCreate(BaseModel):
"""Request model for creating recurring task."""
title: str
description: str = ""
frequency: str # 'daily', 'weekly', 'monthly'
frequency_value: int = None
class RecurringTaskUpdate(BaseModel):
"""Request model for updating recurring task."""
is_active: bool
class RecurringTaskResponse(BaseModel):
"""Response model for recurring task."""
recurring_task_id: int
title: str
description: str
frequency: str
frequency_value: int = None
is_active: bool
last_generated: str = None
created_at: str
@router.post("/{user_id}/recurring", response_model=dict)
async def create_recurring(
user_id: int,
request: RecurringTaskCreate,
session: Session = Depends(get_session)
):
"""
Create a new recurring task.
Args:
user_id: User ID
request: Recurring task creation request
session: Database session
Returns:
Created recurring task info
"""
result = create_recurring_task(
user_id=user_id,
title=request.title,
description=request.description,
frequency=request.frequency,
frequency_value=request.frequency_value,
session=session
)
if "error" in result:
raise HTTPException(status_code=400, detail=result["message"])
return result
@router.get("/{user_id}/recurring", response_model=dict)
async def list_recurring(
user_id: int,
session: Session = Depends(get_session)
):
"""
List all recurring tasks for a user.
Args:
user_id: User ID
session: Database session
Returns:
List of recurring tasks
"""
result = list_recurring_tasks(user_id=user_id, session=session)
return result
@router.patch("/{user_id}/recurring/{recurring_task_id}/pause", response_model=dict)
async def pause_recurring(
user_id: int,
recurring_task_id: int,
session: Session = Depends(get_session)
):
"""
Pause a recurring task.
Args:
user_id: User ID
recurring_task_id: Recurring task ID
session: Database session
Returns:
Status
"""
result = pause_recurring_task(
user_id=user_id,
recurring_task_id=recurring_task_id,
session=session
)
if "error" in result:
raise HTTPException(status_code=404, detail=result["message"])
return result
@router.patch("/{user_id}/recurring/{recurring_task_id}/resume", response_model=dict)
async def resume_recurring(
user_id: int,
recurring_task_id: int,
session: Session = Depends(get_session)
):
"""
Resume a paused recurring task.
Args:
user_id: User ID
recurring_task_id: Recurring task ID
session: Database session
Returns:
Status
"""
result = resume_recurring_task(
user_id=user_id,
recurring_task_id=recurring_task_id,
session=session
)
if "error" in result:
raise HTTPException(status_code=404, detail=result["message"])
return result
@router.delete("/{user_id}/recurring/{recurring_task_id}", response_model=dict)
async def delete_recurring(
user_id: int,
recurring_task_id: int,
session: Session = Depends(get_session)
):
"""
Delete a recurring task.
Args:
user_id: User ID
recurring_task_id: Recurring task ID
session: Database session
Returns:
Status
"""
result = delete_recurring_task(
user_id=user_id,
recurring_task_id=recurring_task_id,
session=session
)
if "error" in result:
raise HTTPException(status_code=404, detail=result["message"])
return result