Files
gcp_solution_architecture_a…/app/workflows/routes.py
Jonathan Boniface b9a924cf4a
Some checks failed
validation / verify (push) Failing after 15s
fix: refactored manually
2026-09-02 16:08:12 +01:00

83 lines
2.9 KiB
Python

"""Starlette REST Route Handlers for GCP Solution Architecture Agent."""
import logging
from typing import Any, Dict
from starlette.requests import Request
from starlette.responses import JSONResponse
from app.card import AGENT_CARD
from app.config import get_settings
from app.skills.loader import SkillLoader
from app.tools.validation_tools import validate_repository_artifacts
from app.workflows.gcp_architecture_graph import create_agent
logger = logging.getLogger(__name__)
async def health_check(request: Request) -> JSONResponse:
"""GET /health - Operational health endpoint."""
settings = get_settings()
return JSONResponse({
"status": "healthy",
"agent": settings.AGENT_NAME,
"version": settings.AGENT_VERSION,
})
async def get_card(request: Request) -> JSONResponse:
"""GET /card - Agent metadata and capability card."""
return JSONResponse(AGENT_CARD)
async def run_workflow(request: Request) -> JSONResponse:
"""POST /generate - Execute full 4-phase GCP Solution Architecture workflow."""
try:
body = await request.json() if request.headers.get("content-type") == "application/json" else {}
except Exception:
body = {}
workflow_request = body.get("request", "Default event-driven HTTP architecture")
target_dir = body.get("target_dir", ".")
settings = get_settings()
loader = SkillLoader(settings.SKILLS_DIR)
loader.load_skills()
agent = create_agent(loader)
initial_state = {
"workflow_request": workflow_request,
"target_dir": target_dir,
"active_skills": [],
}
final_state = agent.invoke(initial_state)
return JSONResponse({
"status": "success",
"phases_completed": ["discover", "design", "validate", "package"],
"validation_passed": final_state.get("validation_passed", True),
"artifacts": {
"requirements_doc": final_state.get("requirements_doc"),
"architecture_doc": final_state.get("architecture_doc"),
"mermaid_diagram": final_state.get("mermaid_diagram"),
"terraform_code": final_state.get("terraform_code"),
"validation_results": final_state.get("validation_results"),
"solution_guide": final_state.get("solution_guide"),
},
"active_skills": final_state.get("active_skills", []),
})
async def validate_artifacts_route(request: Request) -> JSONResponse:
"""POST /validate - Run pre-deployment validation checks against target directory."""
try:
body = await request.json() if request.headers.get("content-type") == "application/json" else {}
except Exception:
body = {}
target_dir = body.get("target_dir", ".")
result = validate_repository_artifacts.invoke({"target_dir": target_dir})
status_code = 200 if result.get("valid") else 400
return JSONResponse(result, status_code=status_code)