Files
group_fqcd_jr/app/model/risk_questionnaire.py
T

40 lines
2.0 KiB
Python
Raw Normal View History

"""开户风险问卷画像的模型出口(re-export)。
2026-09-11 12:57:07 +08:00
⚠️ 2026-09-12 修复的**重复定义缺陷**
===================================
2026-09-11 12:57:07 +08:00
本模块原先**自己定义**了一个 `ProfileSnapshot` 类,映射的却是主干
`app/model/profile.py` 里已有的同名表 `profile_snapshots`。
SQLAlchemy 不允许两个类映射同一张表,因此**任何同时导入本模块与
`app.model.profile` 的进程都会抛**:
InvalidRequestError: Table 'profile_snapshots' is already defined
for this MetaData instance.
**实测影响(不是理论风险)**:
- 单独导入 `app.main` / `app.worker.runtime` 都正常;但
`profile_assembly_service` 与 `risk_questionnaire_service` **同时**导入即崩。
- Worker 在同一个进程里既要处理 `profile.rebuild_requested`(走 `app.model.profile`),
又要处理投顾风险问卷(走本模块)——因此这是**会打挂 Worker 的缺陷**。
- 库里已留痕:`memory_sync_outbox` 中 `target_store='neo4j'` 的行
`last_error='InvalidRequestError'` 就是这个原因,不是图库故障。
**修法**:本模块不再重复定义,改为从 `app.model.profile` 转出(re-export)。
因此 `from app.model.risk_questionnaire import ProfileSnapshot` 的既有调用点
**无需改动**(4 处:`risk_questionnaire_repository`、`profile_governance_service`、
`risk_questionnaire_service` 与对应单测)。
**字段等价性核查**:原定义比 `app.model.profile` 多映射了一个 `current_customer_id`。
经全仓核查**无人使用**该属性(投顾线只用到 `id` / `customer_id` / `version` / `is_current`),
且 `app.model.profile` 明确注明该列由数据库维护、**故意不映射**,故不保留。
`app.model.profile` 的列类型(`CHAR(36)` / `CHAR(64)` / `Boolean`)与库中实际 DDL 一致,
比原定义的 `String(36)` / `String(64)` 更准确。
"""
2026-09-11 12:57:07 +08:00
from app.model.fund import FundRiskAssessment as RiskAssessment
from app.model.profile import ProfileSnapshot
2026-09-11 12:57:07 +08:00
__all__ = ["ProfileSnapshot", "RiskAssessment"]