Files

37 lines
1.4 KiB
Python
Raw Permalink Normal View History

"""客户权益 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)