TaskWeaver / api /workflow_routes.py
PocketSkye's picture
Initial deployment
0242ab2
Raw
History Blame Contribute Delete
2.9 kB
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from core.database import get_db
from core.deps import get_current_user
from models.workflow import Workflow
from models.user import User
from models.workflow_schedule import WorkflowSchedule
from models.workflow_run import WorkflowRun
from models.execution_log import ExecutionLog
from schemas.workflow_schema import WorkflowRequest
from services.workflow_service import WorkflowService
router = APIRouter(
prefix="/workflows",
tags=["Workflows"]
)
workflow_service = WorkflowService()
# CREATE WORKFLOW
@router.post("/")
def create_workflow(
request: WorkflowRequest,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
return workflow_service.create_workflow(
prompt=request.prompt,
user_id=current_user.id,
db=db
)
# GET ALL WORKFLOWS (USER ONLY)
@router.get("")
def get_workflows(
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
workflows = db.query(
Workflow
).filter(
Workflow.user_id == current_user.id
).all()
return workflows
# GET SINGLE WORKFLOW
@router.get("/{workflow_id}")
def get_workflow(
workflow_id: int,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
workflow = db.query(
Workflow
).filter(
Workflow.id == workflow_id,
Workflow.user_id == current_user.id
).first()
if not workflow:
raise HTTPException(
status_code=404,
detail="Workflow not found"
)
return workflow
# DELETE WORKFLOW
@router.delete("/{workflow_id}")
def delete_workflow(
workflow_id: int,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
workflow = db.query(
Workflow
).filter(
Workflow.id == workflow_id,
Workflow.user_id == current_user.id
).first()
if not workflow:
raise HTTPException(
status_code=404,
detail="Workflow not found"
)
# Fetch all runs for this workflow
runs = db.query(
WorkflowRun
).filter(
WorkflowRun.workflow_id == workflow.id
).all()
# Delete execution logs first
for run in runs:
db.query(
ExecutionLog
).filter(
ExecutionLog.run_id == run.id
).delete()
# Delete workflow runs
db.query(
WorkflowRun
).filter(
WorkflowRun.workflow_id == workflow.id
).delete()
# Delete workflow schedules
db.query(
WorkflowSchedule
).filter(
WorkflowSchedule.workflow_id == workflow.id
).delete()
# Delete workflow
db.delete(workflow)
db.commit()
return {
"message": "Workflow deleted"
}