## 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 排除规则
6.4 KiB
6.4 KiB
实现计划:小程序数据库基础设施层(miniapp-db-foundation)
概述
按照"ETL 库先行 → 业务库跟进 → FDW 桥接 → 验证收尾"的顺序,将设计拆分为可增量执行的编码任务。每个迁移脚本使用幂等语法,所有连接参数通过环境变量驱动。
任务
-
1. ETL 库:创建 app Schema 与 RLS 视图
-
1.1 编写迁移脚本
db/etl_feiqiu/migrations/YYYY-MM-DD__p1_create_app_schema_rls_views.sql- 创建
appSchema(CREATE SCHEMA IF NOT EXISTS app) - 创建
app_reader角色(条件创建,DO $$ ... IF NOT EXISTS ... END $$) - 为 11 张 DWD 表创建 RLS 视图(
CREATE OR REPLACE VIEW app.v_<表名> AS SELECT * FROM dwd.<表名> WHERE site_id = current_setting('app.current_site_id')::bigint) - 为 24 张 DWS 表创建 RLS 视图(同上模式;
cfg_*配置表若无site_id列则直接SELECT *不加过滤) - 在脚本末尾以注释形式预留 P2 待建表位置(
dws_member_spending_power_index、dws_assistant_order_contribution) - 授予
app_reader对appSchema 的 USAGE + SELECT 权限 + ALTER DEFAULT PRIVILEGES - 包含回滚语句(注释形式)
- Requirements: 2.1, 2.2, 2.3, 2.4, 2.7, 2.8, 4.1, 4.3, 4.4, 4.5, 4.6
- 创建
-
1.2 编写属性测试:RLS 视图定义包含 site_id 过滤
- Property 3: RLS 视图定义包含 site_id 过滤
- 遍历
appSchema 所有视图,查询pg_views.definition,验证含site_id列的源表对应视图包含current_setting过滤条件 - Validates: Requirements 2.4
-
1.3 编写属性测试:未设置 site_id 时 RLS 视图拒绝访问
- Property 5: 未设置 site_id 时 RLS 视图拒绝访问
- 遍历所有含
site_id过滤的 RLS 视图,在新会话(未设置app.current_site_id)中执行SELECT,验证抛出错误 - Validates: Requirements 2.6
-
-
2. 业务库:创建 auth/biz Schema 与权限
-
2.1 编写迁移脚本
db/zqyy_app/migrations/YYYY-MM-DD__p1_create_auth_biz_schemas.sql- 创建
authSchema(CREATE SCHEMA IF NOT EXISTS auth) - 创建
bizSchema(CREATE SCHEMA IF NOT EXISTS biz) - 授予
app_user对auth/biz的 USAGE + CRUD 权限 - 设置 ALTER DEFAULT PRIVILEGES 自动授权未来新表
- 包含回滚语句(注释形式)
- Requirements: 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 4.2, 4.3, 4.4, 4.5, 4.6
- 创建
-
2.2 编写属性测试:默认权限自动授予
- Property 1: 默认权限自动授予
- 使用 hypothesis 生成随机合法表名,在
auth/biz中创建临时表,验证app_user自动获得 SELECT/INSERT/UPDATE/DELETE 权限,测试后清理 - Validates: Requirements 1.5
-
-
3. 业务库:配置 FDW 跨库映射
-
3.1 编写迁移脚本
db/zqyy_app/migrations/YYYY-MM-DD__p1_setup_fdw_etl.sql- 安装
postgres_fdw扩展 - 创建外部服务器
etl_feiqiu_server(host/dbname/port 使用占位符'***',按环境替换) - 创建
app_user→app_reader用户映射 - 创建
fdw_etlSchema - 执行
IMPORT FOREIGN SCHEMA app FROM SERVER etl_feiqiu_server INTO fdw_etl - 授予
app_user对fdw_etl的 USAGE + SELECT 权限 + ALTER DEFAULT PRIVILEGES - 包含回滚语句(注释形式)
- Requirements: 3.1, 3.2, 3.3, 3.4, 3.7, 4.2, 4.3, 4.4, 4.5, 4.6
- 安装
-
3.2 编写属性测试:FDW 外部表完整性与数据一致性
- Property 6: FDW 外部表完整性与数据一致性
- 遍历 ETL 库
appSchema 所有视图,验证fdw_etl中存在对应外部表且可查询;在相同site_id下对比数据一致性 - Validates: Requirements 3.4, 3.5, 3.6
-
-
4. Checkpoint — 迁移脚本验证
- 确保三个迁移脚本均可在测试环境中成功执行(按顺序:ETL 库 → 业务库 Schema → 业务库 FDW)
- 验证重复执行不报错(幂等性)
- 如有问题请告知用户
-
5. 编写端到端验证脚本
-
5.1 创建
scripts/ops/validate_p1_db_foundation.py- 通过
load_dotenv()加载根.env,读取PG_DSN和APP_DB_DSN,缺失时RuntimeError终止 - 检查业务库中
auth、bizSchema 存在性 - 检查 ETL 库中
appSchema 及所有 RLS 视图存在性(对照设计文档中的 35 张视图清单) - 检查业务库中
fdw_etlSchema 及所有外部表存在性 - 对每张外部表执行
SELECT count(*)验证可查询性 - 设置
app.current_site_id后验证 RLS 视图过滤正确性 - 验证
app_user和app_reader角色权限配置 - 输出结构化验证结果(通过/失败/跳过),失败项附带错误信息
- Requirements: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8
- 通过
-
5.2 编写属性测试:RLS 过滤正确性
- Property 4: RLS 过滤正确性
- 使用 hypothesis 生成随机
site_id,设置app.current_site_id后查询含site_id的 RLS 视图,验证返回结果中所有行的site_id等于设置值 - Validates: Requirements 2.5
-
5.3 编写属性测试:环境变量缺失报错
- Property 9: 环境变量缺失时验证脚本报错
- 使用 hypothesis 生成
PG_DSN/APP_DB_DSN的缺失组合,验证脚本抛出RuntimeError - Validates: Requirements 5.8
-
5.4 编写属性测试:迁移脚本结构合规性
- Property 7: 迁移脚本结构合规性
- 遍历本次新增的迁移脚本文件,验证文件名匹配
YYYY-MM-DD__*.sql模式,且内容包含回滚语句注释 - Validates: Requirements 4.3, 4.4
-
5.5 编写属性测试:迁移脚本幂等性
- Property 8: 迁移脚本幂等性
- 对每个迁移脚本连续执行两次,验证第二次执行无错误
- Validates: Requirements 4.5
-
-
6. Final checkpoint — 全量验证
- 运行验证脚本
python scripts/ops/validate_p1_db_foundation.py,确认所有检查项通过 - 运行属性测试
cd C:\NeoZQYY && pytest tests/ -v -k p1,确认所有属性测试通过 - 如有问题请告知用户
- 运行验证脚本
说明
- 标记
*的子任务为可选,可跳过以加速 MVP - 每个任务引用具体的需求编号,确保可追溯
- Checkpoint 确保增量验证
- 属性测试使用 Python hypothesis 框架,测试文件放在根目录
tests/下 - 迁移脚本中的数据库连接参数(host/dbname/port/password)均使用占位符,按环境替换