Feat/Fix: Scheduler actions more strictly defined. Commands now working.
This commit is contained in:
@@ -482,6 +482,83 @@ async def get_project_schedules(
|
||||
})
|
||||
|
||||
|
||||
@router.post("/{project_id}/schedules/{schedule_id}/execute")
|
||||
async def execute_scheduled_action(
|
||||
project_id: str,
|
||||
schedule_id: str,
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""
|
||||
Manually execute a scheduled action now.
|
||||
"""
|
||||
from backend.services.scheduler import get_scheduler
|
||||
|
||||
action = db.query(ScheduledAction).filter_by(
|
||||
id=schedule_id,
|
||||
project_id=project_id,
|
||||
).first()
|
||||
|
||||
if not action:
|
||||
raise HTTPException(status_code=404, detail="Action not found")
|
||||
|
||||
if action.execution_status != "pending":
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail=f"Action is not pending (status: {action.execution_status})",
|
||||
)
|
||||
|
||||
# Execute via scheduler service
|
||||
scheduler = get_scheduler()
|
||||
result = await scheduler.execute_action_by_id(schedule_id)
|
||||
|
||||
# Refresh from DB to get updated status
|
||||
db.refresh(action)
|
||||
|
||||
return JSONResponse({
|
||||
"success": result.get("success", False),
|
||||
"message": f"Action executed: {action.action_type}",
|
||||
"result": result,
|
||||
"action": {
|
||||
"id": action.id,
|
||||
"execution_status": action.execution_status,
|
||||
"executed_at": action.executed_at.isoformat() if action.executed_at else None,
|
||||
"error_message": action.error_message,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@router.post("/{project_id}/schedules/{schedule_id}/cancel")
|
||||
async def cancel_scheduled_action(
|
||||
project_id: str,
|
||||
schedule_id: str,
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""
|
||||
Cancel a pending scheduled action.
|
||||
"""
|
||||
action = db.query(ScheduledAction).filter_by(
|
||||
id=schedule_id,
|
||||
project_id=project_id,
|
||||
).first()
|
||||
|
||||
if not action:
|
||||
raise HTTPException(status_code=404, detail="Action not found")
|
||||
|
||||
if action.execution_status != "pending":
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail=f"Can only cancel pending actions (status: {action.execution_status})",
|
||||
)
|
||||
|
||||
action.execution_status = "cancelled"
|
||||
db.commit()
|
||||
|
||||
return JSONResponse({
|
||||
"success": True,
|
||||
"message": "Action cancelled successfully",
|
||||
})
|
||||
|
||||
|
||||
@router.get("/{project_id}/sessions", response_class=HTMLResponse)
|
||||
async def get_project_sessions(
|
||||
project_id: str,
|
||||
|
||||
Reference in New Issue
Block a user