Files
group_fqcd_jr/app/api/controllers/recommendation_plans.py

56 lines
2.0 KiB
Python

"""Reviewed publication workflow for client-facing recommendation plans."""
from fastapi import APIRouter, Depends, Header, Query, status
from app.api.dependencies.auth import build_request_context
from app.api.schemas.recommendation_plans import (
RecommendationPlanGenerate,
RecommendationPlanReview,
)
from app.core.contracts import RequestContext
from app.service.recommendation_plan_service import RecommendationPlanService
router = APIRouter(
prefix="/api/v1/advisor/recommendation-plans",
tags=["advisor-recommendation-plans"],
)
admin_router = APIRouter(
prefix="/api/v1/admin/advisor/recommendation-plans",
tags=["advisor-recommendation-plan-review"],
)
@router.post("", status_code=status.HTTP_201_CREATED)
async def generate_plan(
payload: RecommendationPlanGenerate,
context: RequestContext = Depends(build_request_context), # noqa: B008
key: str | None = Header(default=None, alias="Idempotency-Key"),
) -> dict[str, object]:
return await RecommendationPlanService().generate(payload, context, key)
@router.get("/published")
async def published_plans(
limit: int = Query(default=20, ge=1, le=100),
context: RequestContext = Depends(build_request_context), # noqa: B008
) -> dict[str, object]:
return await RecommendationPlanService().published(context, limit=limit)
@admin_router.get("/review-queue")
async def pending_plans(
limit: int = Query(default=100, ge=1, le=100),
context: RequestContext = Depends(build_request_context), # noqa: B008
) -> dict[str, object]:
return await RecommendationPlanService().pending(context, limit=limit)
@admin_router.post("/{content_id}/reviews")
async def review_plan(
content_id: int,
payload: RecommendationPlanReview,
context: RequestContext = Depends(build_request_context), # noqa: B008
key: str | None = Header(default=None, alias="Idempotency-Key"),
) -> dict[str, object]:
return await RecommendationPlanService().review(content_id, payload, context, key)