from __future__ import annotations from fastapi import APIRouter, Depends, HTTPException from auth import require_admin_dep, require_auth from db import get_db, row_to_dict from entitlements import EntitlementError, check_feature_access, subscription_for router = APIRouter(prefix="/api", tags=["subscription"]) @router.get("/subscription") def get_subscription(session: dict = Depends(require_auth)): return subscription_for(session["profile_id"]) @router.get("/features") def list_features(session: dict = Depends(require_admin_dep)): with get_db() as conn: rows = conn.execute("SELECT * FROM features ORDER BY id").fetchall() return [row_to_dict(row) for row in rows] @router.get("/features/{feature_id}/access") def feature_access(feature_id: str, session: dict = Depends(require_auth)): try: return check_feature_access(session["profile_id"], feature_id) except EntitlementError as exc: raise HTTPException(status_code=exc.status_code, detail={"code": exc.code, "message": exc.message}) from exc