Spaces:
Sleeping
Sleeping
| 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 services.execution_service import ( | |
| ExecutionService | |
| ) | |
| from models.workflow import Workflow | |
| from models.workflow_run import WorkflowRun | |
| router = APIRouter( | |
| prefix="/executions", | |
| tags=["Executions"] | |
| ) | |
| execution_service = ExecutionService() | |
| # RUN WORKFLOW | |
| async def run_workflow( | |
| workflow_id: int, | |
| db: Session = Depends(get_db), | |
| current_user = Depends( | |
| get_current_user | |
| ) | |
| ): | |
| return await execution_service.run_workflow( | |
| workflow_id, | |
| current_user.id, | |
| db | |
| ) | |
| # GET ALL EXECUTIONS OF CURRENT USER | |
| def get_execution_history( | |
| db: Session = Depends(get_db), | |
| current_user = Depends( | |
| get_current_user | |
| ) | |
| ): | |
| runs = ( | |
| db.query( | |
| WorkflowRun | |
| ) | |
| .join( | |
| Workflow, | |
| Workflow.id == | |
| WorkflowRun.workflow_id | |
| ) | |
| .filter( | |
| Workflow.user_id == | |
| current_user.id | |
| ) | |
| .order_by( | |
| WorkflowRun.started_at.desc() | |
| ) | |
| .all() | |
| ) | |
| return runs | |
| # GET EXECUTION HISTORY OF A WORKFLOW | |
| def get_workflow_runs( | |
| workflow_id: int, | |
| db: Session = Depends(get_db), | |
| current_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" | |
| ) | |
| runs = ( | |
| db.query( | |
| WorkflowRun | |
| ) | |
| .filter( | |
| WorkflowRun.workflow_id == | |
| workflow_id | |
| ) | |
| .order_by( | |
| WorkflowRun.started_at.desc() | |
| ) | |
| .all() | |
| ) | |
| return runs | |
| # GET SINGLE EXECUTION | |
| def get_execution( | |
| run_id: int, | |
| db: Session = Depends(get_db), | |
| current_user = Depends( | |
| get_current_user | |
| ) | |
| ): | |
| run = ( | |
| db.query( | |
| WorkflowRun | |
| ) | |
| .join( | |
| Workflow, | |
| Workflow.id == | |
| WorkflowRun.workflow_id | |
| ) | |
| .filter( | |
| WorkflowRun.id == | |
| run_id, | |
| Workflow.user_id == | |
| current_user.id | |
| ) | |
| .first() | |
| ) | |
| if not run: | |
| raise HTTPException( | |
| status_code=404, | |
| detail="Execution not found" | |
| ) | |
| return run |