Amal Nimmy Lal
feat : updated pages
698b2c1
"""Task-related MCP tools."""
from sqlalchemy.orm import Session
from sqlalchemy import desc
from app.database import SessionLocal
from app.models import Task, TaskStatus, Project, LogEntry
def create_task(project_id: str, title: str, description: str = None, assigned_to: str = None) -> dict:
"""
Create a new task in a project.
Args:
project_id: ID of the project
title: Task title
description: Optional task description
assigned_to: Optional user ID to assign the task to
Returns:
Created task data
"""
db: Session = SessionLocal()
try:
# Verify project exists
project = db.query(Project).filter(Project.id == project_id).first()
if not project:
return {"error": f"Project {project_id} not found"}
# Create task
task = Task(
project_id=project_id,
title=title,
description=description,
assigned_to=assigned_to,
status=TaskStatus.todo
)
db.add(task)
db.commit()
return {
"id": task.id,
"project_id": task.project_id,
"title": task.title,
"description": task.description,
"status": task.status.value,
"assigned_to": task.assigned_to,
"working_by": task.working_by,
"created_at": task.created_at.isoformat()
}
finally:
db.close()
def list_tasks(project_id: str, status: str = None) -> dict:
"""
List all tasks for a project, optionally filtered by status.
Args:
project_id: ID of the project
status: Optional status filter ("todo", "in_progress", "done")
Returns:
List of tasks
"""
db: Session = SessionLocal()
try:
# Build query
query = db.query(Task).filter(Task.project_id == project_id)
# Apply status filter if provided
if status:
try:
status_enum = TaskStatus(status)
query = query.filter(Task.status == status_enum)
except ValueError:
return {"error": f"Invalid status: {status}. Must be one of: todo, in_progress, done"}
# Order by created_at descending
tasks = query.order_by(desc(Task.created_at)).all()
return {
"tasks": [
{
"id": task.id,
"project_id": task.project_id,
"title": task.title,
"description": task.description,
"status": task.status.value,
"assigned_to": task.assigned_to,
"working_by": task.working_by,
"created_at": task.created_at.isoformat(),
"completed_at": task.completed_at.isoformat() if task.completed_at else None
}
for task in tasks
]
}
finally:
db.close()
def list_activity(project_id: str, limit: int = 20) -> dict:
"""
Get recent activity (log entries) for a project.
Args:
project_id: ID of the project
limit: Maximum number of entries to return (default 20)
Returns:
List of recent log entries
"""
db: Session = SessionLocal()
try:
# Query log entries ordered by most recent
entries = (
db.query(LogEntry)
.filter(LogEntry.project_id == project_id)
.order_by(desc(LogEntry.created_at))
.limit(limit)
.all()
)
return {
"activity": [
{
"id": entry.id,
"project_id": entry.project_id,
"task_id": entry.task_id,
"user_id": entry.user_id,
"actor_type": entry.actor_type.value,
"action_type": entry.action_type.value,
"raw_input": entry.raw_input,
"generated_doc": entry.generated_doc,
"tags": entry.tags,
"created_at": entry.created_at.isoformat()
}
for entry in entries
]
}
finally:
db.close()