"""客户权益 controller(`docs/05` §19 T 段)。 | § | 端点 | 权限码 | 摘要 | |---|---|---|---| | T010 | `GET /api/v1/users/me/entitlements` | `benefit:read:self` | 我的客户层级与应享权益 | 设计要点(与 `trading.py` 的 §T 端点保持一致): - 走 `build_request_context`(数据范围 `self`),权限检查在 **Service 层** (`CustomerBenefitService.entitlements_for` → `AuthorizationService.require`); - 不走限流依赖 —— 低频只读查询,由底座网关层限流; - 信封用 `envelope`(`docs/05` §3.3)。 """ from __future__ import annotations from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from app.api.dependencies.auth import build_request_context from app.api.dependencies.database import get_session from app.api.views.envelope import envelope from app.core.contracts import RequestContext from app.service.customer_benefit_service import CustomerBenefitService router = APIRouter(prefix="/api/v1/users/me", tags=["benefit"]) # T010 我的权益 @router.get("/entitlements") async def get_my_entitlements( context: RequestContext = Depends(build_request_context), # noqa: B008 session: AsyncSession = Depends(get_session), # noqa: B008 ) -> dict[str, object]: data = await CustomerBenefitService(session).entitlements_for(context) return envelope(data, context)