在准备环境前提交次全部更改。
This commit is contained in:
@@ -1,60 +1,62 @@
|
||||
---
|
||||
inclusion: always
|
||||
---
|
||||
|
||||
# 技术栈与构建
|
||||
|
||||
## 语言与运行时
|
||||
- Python 3.10+(测试缓存中观察到 3.13)
|
||||
- 未提交虚拟环境;用户自行管理
|
||||
- Python 3.10+
|
||||
- uv workspace 统一依赖管理(根 `pyproject.toml` 声明 3 个 workspace 成员)
|
||||
|
||||
## 核心依赖(requirements.txt)
|
||||
- `psycopg2-binary>=2.9.0` — PostgreSQL 驱动
|
||||
- `requests>=2.28.0` — 上游 API 的 HTTP 客户端
|
||||
- `python-dateutil>=2.8.0` / `tzdata>=2023.0` — 日期解析与时区处理
|
||||
- `python-dotenv` — `.env` 文件加载
|
||||
- `openpyxl>=3.1.0` — Excel 导入导出(DWS 数据)
|
||||
- `PySide6>=6.5.0` — Qt 桌面 GUI 框架
|
||||
- `flask>=2.3` — 可选 Web API
|
||||
- `pyinstaller>=6.0.0` — 可选,仅打包 EXE 时需要
|
||||
## 核心依赖
|
||||
- ETL:`psycopg2-binary`、`requests`、`python-dateutil`、`tzdata`、`python-dotenv`、`openpyxl`
|
||||
- 后端:`fastapi`、`uvicorn[standard]`、`psycopg2-binary`、`python-dotenv`
|
||||
- 管理后台:`React`、`Vite`、`Ant Design`(`apps/admin-web/`,独立 pnpm 管理)
|
||||
- 共享包:`neozqyy-shared`(workspace 内部引用)
|
||||
- 测试:`pytest`、`hypothesis`
|
||||
|
||||
## 数据库
|
||||
- PostgreSQL(连接远程实例)
|
||||
- Schema:`billiards_ods`(ODS 原始数据)、`billiards_dwd`(明细数据)、`billiards_dws`(汇总数据)、`etl_admin`(调度/运行记录)
|
||||
- DDL 文件位于 `database/schema_*.sql`,种子脚本位于 `database/seed_*.sql`
|
||||
- 迁移脚本位于 `database/migrations/`(纯 SQL,日期前缀命名)
|
||||
- PostgreSQL(远程实例)
|
||||
- 六层 Schema 架构:`meta`(调度元数据)、`ods`(原始数据)、`dwd`(明细数据)、`core`(跨门店标准化)、`dws`(汇总数据)、`app`(RLS 视图层)
|
||||
- 业务数据库:`zqyy_app`(用户/RBAC/任务/审批),通过 FDW 只读映射 ETL 数据
|
||||
- DDL 文件位于 `db/etl_feiqiu/schemas/`,迁移脚本位于 `db/etl_feiqiu/migrations/`
|
||||
- 种子数据位于 `db/etl_feiqiu/seeds/`
|
||||
|
||||
## 测试
|
||||
- 框架:`pytest`(未固定在 requirements 中,需单独安装)
|
||||
- 配置:`pytest.ini` 设置 `pythonpath = .`
|
||||
- 结构:`tests/unit/`(基于 mock,无需数据库)、`tests/integration/`(需要 `TEST_DB_DSN`)
|
||||
- 测试工具:`tests/unit/task_test_utils.py` 提供 FakeDB/FakeAPI 辅助类
|
||||
- ETL 单元测试:`cd apps/etl/connectors/feiqiu && pytest tests/unit`
|
||||
- ETL 集成测试:`TEST_DB_DSN="..." pytest tests/integration`
|
||||
- Monorepo 属性测试:`pytest tests/ -v`(根目录,hypothesis)
|
||||
- 测试工具:`apps/etl/connectors/feiqiu/tests/unit/task_test_utils.py` 提供 FakeDB/FakeAPI
|
||||
|
||||
## 常用命令
|
||||
```bash
|
||||
# 安装依赖
|
||||
pip install -r requirements.txt
|
||||
uv sync
|
||||
|
||||
# 在线全流程 ETL(抓取 + 入库)
|
||||
python -m cli.main --pg-dsn "$PG_DSN" --store-id "$STORE_ID" --api-token "$API_TOKEN"
|
||||
|
||||
# 运行指定任务
|
||||
python -m cli.main --tasks INIT_ODS_SCHEMA,MANUAL_INGEST --data-source offline
|
||||
|
||||
# 试运行(不写库)
|
||||
# ETL 开发
|
||||
cd apps/etl/connectors/feiqiu
|
||||
python -m cli.main --dry-run --tasks DWD_LOAD_FROM_ODS
|
||||
|
||||
# 单元测试
|
||||
pytest tests/unit
|
||||
# 后端开发
|
||||
cd apps/backend
|
||||
uvicorn app.main:app --reload
|
||||
|
||||
# 集成测试(需要数据库)
|
||||
TEST_DB_DSN="postgresql://..." pytest tests/integration
|
||||
# ETL 单元测试
|
||||
cd apps/etl/connectors/feiqiu && pytest tests/unit
|
||||
|
||||
# 启动 GUI
|
||||
python -m gui.main
|
||||
# 属性测试
|
||||
cd C:\NeoZQYY && pytest tests/ -v
|
||||
```
|
||||
|
||||
## 配置体系
|
||||
- 分层叠加:`config/defaults.py` < `.env` / 环境变量 < CLI 参数
|
||||
- 配置类:`config.settings.AppConfig`,支持点号路径访问(`config.get("db.dsn")`)
|
||||
- 敏感值(DSN、API Token)放在 `.env` 中,禁止提交
|
||||
- 分层叠加:根 `.env` < 应用 `.env.local` < 环境变量 < CLI 参数
|
||||
- ETL 配置类:`apps/etl/connectors/feiqiu/config/settings.py` → `AppConfig`
|
||||
- 敏感值放在 `.env` / `.env.local` 中,禁止提交;`.env.template` 提供模板
|
||||
|
||||
## 打包
|
||||
- 已移除 EXE 打包支持(`build_exe.py`、`setup.py` 已归档至 `.Deleted/`)
|
||||
- 直接通过 `python -m cli.main` 或 `python -m gui.main` 运行
|
||||
## 脚本执行规范
|
||||
- 需要执行多步操作、文件处理、数据库操作等脚本级任务时,优先编写 Python 脚本(`.py`)再通过 `python script.py` 执行
|
||||
- 避免直接使用 PowerShell 编写复杂逻辑,防止转义符、编码、管道等语法陷阱
|
||||
- 以下情况可以直接用 shell 命令:
|
||||
- 用户明确指定使用 PowerShell / CMD
|
||||
- 操作本身是单条简单命令(如 `pytest`、`uv sync`、`git status`)
|
||||
- Python 脚本放置遵循"两层分治"原则:一次性运维脚本放 `scripts/ops/`,模块专属脚本放模块内 `scripts/`的合理目录下
|
||||
|
||||
Reference in New Issue
Block a user