Files
group_xinghuo_jinrong/app/service/platform/common.py
T
zhanghongyu_0626 ef56c56435 feat(api): 实现代销平台 API v0.1,包括客户、产品、理财师、合规及员工接口
- 新增多个 API 路由:`/api/customers`, `/api/products`, `/api/advisors`, `/api/compliance`, `/api/staff`,支持客户信息、产品详情、理财师客户列表、合规判定及员工上下文查询。
- 引入平台服务层,封装核心只读操作,支持数据脱敏功能。
- 更新依赖注入,确保各 API 路由的权限控制与数据访问一致性。
- 添加相应的单元测试,确保新接口的功能完整性与稳定性。

此更新为代销平台提供了基础的 REST API 支持,增强了系统的可扩展性与可维护性。
2026-09-08 21:01:07 +08:00

47 lines
1.4 KiB
Python

"""Platform Service 公共:JSON 序列化与可选脱敏。"""
from __future__ import annotations
import datetime as _dt
from decimal import Decimal
from typing import Any
from app.config.settings import settings
from app.utils import desensitize as d
def to_jsonable(value: Any) -> Any:
if isinstance(value, Decimal):
return float(round(value, 2))
if isinstance(value, (_dt.datetime, _dt.date)):
return value.isoformat()
if isinstance(value, dict):
return {k: to_jsonable(v) for k, v in value.items()}
if isinstance(value, list):
return [to_jsonable(v) for v in value]
return value
def maybe_desensitize_row(row: dict[str, Any] | None) -> dict[str, Any] | None:
if row is None or not settings.platform_response_desensitize:
return row
out = dict(row)
for key, masker in (
("display_name", d.mask_name),
("full_name", d.mask_name),
("mobile_phone", d.mask_phone),
("phone", d.mask_phone),
("id_card_no", d.mask_id_card),
("id_no", d.mask_id_card),
("bank_card_no", d.mask_bank_card),
):
if key in out and out[key]:
out[key] = masker(str(out[key]))
return out
def prepare_row(row: dict[str, Any] | None) -> dict[str, Any] | None:
if row is None:
return None
return to_jsonable(maybe_desensitize_row(row) or row)