""" POST /api/planning/exercise-suggest — planungsgebundene Übungssuche (Hybrid + Profil + optional LLM-Rerank). """ from fastapi import APIRouter, Depends from db import get_db, get_cursor from tenant_context import TenantContext, get_tenant_context from planning_exercise_suggest import PlanningExerciseSuggestRequest, suggest_planning_exercises from planning_exercise_path_builder import ProgressionPathSuggestRequest, suggest_progression_path from club_features import probe_club_feature_access, resolve_club_id_for_probe router = APIRouter(prefix="/api/planning", tags=["planning_exercise_suggest"]) @router.post("/exercise-suggest") def post_planning_exercise_suggest( body: PlanningExerciseSuggestRequest, tenant: TenantContext = Depends(get_tenant_context), ): if body.include_llm_intent or body.include_llm_rank: probe_club_feature_access( feature_id="ai_calls", action="planning_suggest", club_id=resolve_club_id_for_probe(tenant), profile_id=tenant.profile_id, endpoint="POST /planning/exercise-suggest", ) with get_db() as conn: cur = get_cursor(conn) return suggest_planning_exercises(cur, tenant=tenant, body=body) @router.post("/progression-path-suggest") def post_progression_path_suggest( body: ProgressionPathSuggestRequest, tenant: TenantContext = Depends(get_tenant_context), ): if ( body.include_llm_intent or body.include_llm_path_qa or body.include_ai_gap_fill ): probe_club_feature_access( feature_id="ai_calls", action="progression_path_suggest", club_id=resolve_club_id_for_probe(tenant), profile_id=tenant.profile_id, endpoint="POST /planning/progression-path-suggest", ) with get_db() as conn: cur = get_cursor(conn) return suggest_progression_path(cur, tenant=tenant, body=body)