2026-09-12 11:24:50 +08:00
|
|
|
|
"""开户风险问卷画像的模型出口(re-export)。
|
2026-09-11 12:57:07 +08:00
|
|
|
|
|
2026-09-12 11:24:50 +08:00
|
|
|
|
⚠️ 2026-09-12 修复的**重复定义缺陷**
|
|
|
|
|
|
===================================
|
2026-09-11 12:57:07 +08:00
|
|
|
|
|
2026-09-12 11:24:50 +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
|
2026-09-12 11:24:50 +08:00
|
|
|
|
from app.model.profile import ProfileSnapshot
|
2026-09-11 12:57:07 +08:00
|
|
|
|
|
|
|
|
|
|
__all__ = ["ProfileSnapshot", "RiskAssessment"]
|