Files
Neo-ZQYY/docs/roadmap/2026-02-24__fdw-dwd-to-core-migration-plan.md
Neo b25308c3f4 feat: P1-P3 全栈集成 — 数据库基础 + DWS 扩展 + 小程序鉴权 + 工程化体系
## P1 数据库基础
- zqyy_app: 创建 auth/biz schema、FDW 连接 etl_feiqiu
- etl_feiqiu: 创建 app schema RLS 视图、商品库存预警表
- 清理 assistant_abolish 残留数据

## P2 ETL/DWS 扩展
- 新增 DWS 助教订单贡献度表 (dws.assistant_order_contribution)
- 新增 assistant_order_contribution_task 任务及 RLS 视图
- member_consumption 增加充值字段、assistant_daily 增加处罚字段
- 更新 ODS/DWD/DWS 任务文档及业务规则文档
- 更新 consistency_checker、flow_runner、task_registry 等核心模块

## P3 小程序鉴权系统
- 新增 xcx_auth 路由/schema(微信登录 + JWT)
- 新增 wechat/role/matching/application 服务层
- zqyy_app 鉴权表迁移 + 角色权限种子数据
- auth/dependencies.py 支持小程序 JWT 鉴权

## 文档与审计
- 新增 DOCUMENTATION-MAP 文档导航
- 新增 7 份 BD_Manual 数据库变更文档
- 更新 DDL 基线快照(etl_feiqiu 6 schema + zqyy_app auth)
- 新增全栈集成审计记录、部署检查清单更新
- 新增 BACKLOG 路线图、FDW→Core 迁移计划

## Kiro 工程化
- 新增 5 个 Spec(P1/P2/P3/全栈集成/核心业务)
- 新增审计自动化脚本(agent_on_stop/build_audit_context/compliance_prescan)
- 新增 6 个 Hook(合规检查/会话日志/提交审计等)
- 新增 doc-map steering 文件

## 运维与测试
- 新增 ops 脚本:迁移验证/API 健康检查/ETL 监控/集成报告
- 新增属性测试:test_dws_contribution / test_auth_system
- 清理过期 export 报告文件
- 更新 .gitignore 排除规则
2026-02-26 08:03:53 +08:00

86 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FDW 数据源迁移方案DWD → Core
> 创建日期2026-02-24
> 状态:已决策(上线后迭代)
> 关联 SPECminiapp-db-foundation
---
## 背景
当前 `miniapp-db-foundation` SPEC 中FDW 外部表映射的数据源链路为:
```
ETL 库 dwd.dim_* / dws.dws_*
→ app.v_dim_* / app.v_dws_*RLS 视图site_id 过滤)
→ 业务库 fdw_etl.v_dim_* / fdw_etl.v_dws_*FDW 外部表)
```
ETL 六层 Schema 中,`core` 层的定位是"跨门店标准化维度/事实",是 DWD 层的精简子集。长远来看,小程序读取的维度数据应从 `core` 层获取,而非直接读 `dwd` 层。
## 决策
上线时保持现状(`app` 视图指向 `dwd.*` / `dws.*`),上线后再迭代切换到 `core`
## 理由
1. Core 层当前仅 7 张表(`dim_site``dim_member``dim_assistant``dim_table``dim_goods_category``fact_settlement``fact_payment`),小程序需要的 11 张 DWD + 24 张 DWS 远超 Core 覆盖范围
2. Core 层字段是精简子集(如 `core.dim_member``card_balance``total_consumption` 等),小程序前期需要 DWD 的完整字段
3. `app` 视图层本身就是抽象层——后端通过 `fdw_etl.v_dim_member` 访问数据,底层视图定义可随时切换,后端代码零改动
4. 上线关键路径是 P0 阶段(基础设施 → 微信配置 → 后端核心功能Core 层完善属于 P2 范畴
## 迁移路径
### Phase 0上线前当前
按 SPEC 原样执行:
- `app.v_dim_member``SELECT * FROM dwd.dim_member WHERE site_id = ...`
- `app.v_dws_*``SELECT * FROM dws.dws_* WHERE site_id = ...`
- FDW 通过 `IMPORT FOREIGN SCHEMA app` 映射
### Phase 1上线后 — 补齐 Core 层表
- 盘点小程序实际用到的维度表,确认 Core 层需要补齐哪些字段
- 对照 DWD 层的 `dim_member``dim_assistant` 等,在 Core 层补全小程序所需的业务字段
- 新增 Core 层缺失的维度表(如 `core.dim_member_card_account``core.dim_staff` 等)
### Phase 2上线后 — ETL 填充任务
- 在 ETL Connector 中新增 DWD → Core 的填充任务
- 确保 Core 层数据与 DWD 层保持同步
- 验证 Core 层数据完整性和正确性
### Phase 3上线后 — 切换视图定义
- 修改 `app` 视图定义,将维度表从 `dwd.*` 切换到 `core.*`
```sql
-- 修改前
CREATE OR REPLACE VIEW app.v_dim_member AS
SELECT * FROM dwd.dim_member
WHERE site_id = current_setting('app.current_site_id')::bigint;
-- 修改后
CREATE OR REPLACE VIEW app.v_dim_member AS
SELECT * FROM core.dim_member
WHERE site_id = current_setting('app.current_site_id')::bigint;
```
- DWS 汇总表保持不变(它们本身就在 DWS 层Core 层不涉及汇总)
- 重新执行 `IMPORT FOREIGN SCHEMA app INTO fdw_etl` 同步外部表
- 后端和小程序代码无需任何改动
## 风险与缓解
| 风险 | 缓解措施 |
|------|---------|
| Core 层字段不全导致小程序功能缺失 | Phase 1 先盘点再补齐,确保字段覆盖 |
| DWD → Core 填充任务引入数据延迟 | Core 填充任务纳入 ETL 调度链,与 DWD 同步执行 |
| 切换视图时短暂不可用 | 使用 `CREATE OR REPLACE VIEW` 原子替换,无停机 |
| Core 层数据与 DWD 不一致 | 切换前运行数据一致性校验脚本 |
## 关键设计优势
`app` 视图层是整个方案的"切换开关"
- 后端只看到 `fdw_etl.v_dim_member`,不关心底层是 DWD 还是 Core
- 切换只需修改视图 SQL + 重新 IMPORT零代码改动
- 可以逐表切换(先切 `dim_member`,验证通过后再切其他表),降低风险