shinkan-jinkendo/backend/routers/planning_exercise_suggest.py
Lars 7cfbca40bb
All checks were successful
Deploy Development / deploy (push) Successful in 41s
Test Suite / pytest-backend (push) Successful in 40s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 13s
Test Suite / k6 /health Baseline (push) Successful in 34s
Test Suite / playwright-tests (push) Successful in 1m42s
Implement Club Feature Access Probing and Inventory Count
- Introduced `probe_club_feature_access` to check club feature limits and log access attempts without blocking by default.
- Added `_live_inventory_count` function to retrieve current counts for specific features, enhancing feature limit management.
- Updated various endpoints to utilize the new probing functionality, ensuring compliance with club feature access rules.
- Incremented version to 1.1.0 in version.py to reflect these enhancements in club feature management.
2026-06-06 21:00:42 +02:00

53 lines
1.9 KiB
Python

"""
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)