38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
"""Plans routes: GET /plans/playbook and GET /plans/playbook/{plan_id}."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
|
|
from app.api.deps import get_current_user
|
|
from app.core.execution_plan import plan_cache
|
|
from app.schemas import ExecutionPlan, UserProfile
|
|
|
|
router = APIRouter(prefix="/plans", tags=["plans"])
|
|
|
|
|
|
@router.get("/playbook", response_model=list[ExecutionPlan])
|
|
async def list_playbooks(
|
|
current_user: UserProfile = Depends(get_current_user),
|
|
) -> list[ExecutionPlan]:
|
|
"""Return all cached execution plan playbooks for the authenticated user.
|
|
|
|
TODO(Step11): filter by tier — power+ plans gated behind batch_builder feature.
|
|
"""
|
|
return plan_cache.get_all_playbooks()
|
|
|
|
|
|
@router.get("/playbook/{plan_id}", response_model=ExecutionPlan)
|
|
async def get_playbook(
|
|
plan_id: str,
|
|
current_user: UserProfile = Depends(get_current_user),
|
|
) -> ExecutionPlan:
|
|
"""Return a specific execution plan playbook by ID."""
|
|
plan = plan_cache.get_plan(plan_id)
|
|
if plan is None:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail=f"Plan not found: {plan_id}",
|
|
)
|
|
return plan
|