from fastapi import APIRouter from pydantic import BaseModel router = APIRouter() class Workflow(BaseModel): name: str steps: list @router.get("/list") async def get_automation_list(): return [] @router.post("/trigger/{id}") async def trigger_automation_route(id: str): from backend.services.automation_service import trigger_automation await trigger_automation(id) return {"status": "triggered"} @router.post("/pause_all") async def pause_all(): from backend.services.automation_service import pause_all_automations await pause_all_automations() return {"status": "paused"} @router.post("/resume_all") async def resume_all(): from backend.services.automation_service import resume_all_automations await resume_all_automations() return {"status": "resumed"} @router.post("/jobs/{job_id}/pause") async def pause_single_job(job_id: str): from backend.services.automation_service import pause_job pause_job(job_id) return {"status": f"job {job_id} paused"} @router.post("/jobs/{job_id}/resume") async def resume_single_job(job_id: str): from backend.services.automation_service import resume_job resume_job(job_id) return {"status": f"job {job_id} resumed"} @router.delete("/jobs/{job_id}") async def delete_single_job(job_id: str): from backend.services.automation_service import delete_job delete_job(job_id) return {"status": f"job {job_id} deleted"} @router.post("/save") async def save_workflow(w: Workflow): return {"status": "saved"} @router.get("/history") async def get_history(): return [] @router.post("/dry-run") async def dry_run_workflow(w: Workflow): """ Simulates workflow execution without side effects. Returns a preview of the steps and their expected mock results. """ import asyncio preview_steps = [] for i, step in enumerate(w.steps): # Determine a mock result based on step type if present step_type = step.get('type', 'unknown') if isinstance(step, dict) else 'unknown' mock_result = f"Mock result for {step_type}" if step_type == 'api_call': mock_result = "HTTP 200 OK (Mock)" elif step_type == 'script': mock_result = "Script execution simulated" elif step_type == 'agent': mock_result = "Agent reasoning simulated" preview_steps.append({ "step_index": i, "step_config": step, "expected_status": "success", "mock_result": mock_result }) # Simulate minor delay await asyncio.sleep(0.1) return { "status": "dry-run-complete", "total_steps": len(w.steps), "execution_preview": preview_steps }