- 新增多个 API 路由:`/api/customers`, `/api/products`, `/api/advisors`, `/api/compliance`, `/api/staff`,支持客户信息、产品详情、理财师客户列表、合规判定及员工上下文查询。 - 引入平台服务层,封装核心只读操作,支持数据脱敏功能。 - 更新依赖注入,确保各 API 路由的权限控制与数据访问一致性。 - 添加相应的单元测试,确保新接口的功能完整性与稳定性。 此更新为代销平台提供了基础的 REST API 支持,增强了系统的可扩展性与可维护性。
56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
"""代销平台 · 合规判定(canonical 适当性 · 与 /api/risk/suitability/check 并存过渡)。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Depends, Request
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.api.deps import (
|
|
AuthContext,
|
|
assert_platform_customer_access,
|
|
get_platform_auth_context,
|
|
)
|
|
from app.repository.core_ro import CoreReadOnlyRepository
|
|
from app.repository.risk_repository import RiskRepository
|
|
from app.service.platform import compliance_service
|
|
from app.utils.response import ok
|
|
|
|
router = APIRouter(prefix="/api/compliance", tags=["platform-compliance"])
|
|
|
|
|
|
class SuitabilityCheckRequest(BaseModel):
|
|
customer_id: str = Field(..., min_length=1)
|
|
product_id: str = Field(..., min_length=1)
|
|
|
|
|
|
def _core_ro() -> CoreReadOnlyRepository:
|
|
return CoreReadOnlyRepository()
|
|
|
|
|
|
def _risk_repo() -> RiskRepository:
|
|
return RiskRepository()
|
|
|
|
|
|
def _trace_id(request: Request) -> str:
|
|
return getattr(request.state, "trace_id", "unknown")
|
|
|
|
|
|
@router.post("/suitability-check")
|
|
def suitability_check_api(
|
|
req: SuitabilityCheckRequest,
|
|
request: Request,
|
|
auth: AuthContext = Depends(get_platform_auth_context),
|
|
) -> dict:
|
|
core = _core_ro()
|
|
repo = _risk_repo()
|
|
assert_platform_customer_access(auth, req.customer_id, core_ro=core, risk_repo=repo)
|
|
result = compliance_service.run_suitability_check(
|
|
req.customer_id,
|
|
req.product_id,
|
|
actor_id=auth.actor_id,
|
|
core_ro=core,
|
|
risk_repo=repo,
|
|
)
|
|
body = compliance_service.suitability_check_payload(result)
|
|
return ok(body, _trace_id(request)).model_dump()
|