emcp/.trae/skills/python-fullstack-scaffold/SKILL.md
2026-05-18 09:12:14 +08:00

455 lines
11 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.

---
name: "python-fullstack-scaffold"
description: "为 FastAPI + WebSocket + Web 前端系统生成前后端开发框架。用户需要搭建或重构 RK3568 电气量测控平台的 Python 全栈代码结构时调用。"
---
# Python Fullstack Scaffold
## 适用场景
当用户出现以下意图时,调用此技能:
- 要根据需求文档搭建 `FastAPI + WebSocket + Web前端` 的项目骨架
- 要为 `RK3568 / Ubuntu 20.04 / Python 3.8` 平台设计前后端分层结构
- 要从接口文档反推后端路由、数据模型、配置存储和前端页面模块
- 要统一实时数据、设备状态、报警事件、参数配置的代码组织方式
- 要为嵌入式 C 程序与 Python 服务之间的适配层预留稳定接口
如果用户只是修一个接口、改一个组件、补一个测试,不要调用此技能。
## 技能目标
基于“电气量测控平台系统需求分析与架构设计技术方案”,输出一套可直接落地的前后端开发框架,覆盖:
- 后端目录结构
- 前端目录结构
- 核心领域模型
- RESTful API 路由分层
- WebSocket 推送框架
- JSON/SQLite 数据存储组织
- 嵌入式适配层抽象
- 开发顺序、验收点与最小可运行骨架
## 固定技术约束
在生成方案或代码时,默认遵循以下约束,除非用户明确要求变更:
- 平台:`RK3568`,系统为 `Ubuntu 20.04`
- 后端:`Python 3.8`、`FastAPI`、`Uvicorn`
- 前端Web 前端,优先采用当前项目已有技术栈;若项目未定型,则使用轻量、易部署的前端组织方式
- 通信:`HTTP RESTful API + WebSocket`
- 配置存储:`JSON`
- 报警存储:`SQLite`
- 实时数据:仅内存缓存,不落盘
- 实时刷新周期:`0.5 秒`
- 指令下发响应目标:`1 秒内`
- 系统需支持 `7 x 24` 连续运行
## 总体架构原则
始终按下面的职责边界组织代码:
1. 硬件层:`RK3568 + AI/AO + 开关量 + 网络/串口 + 显示屏`
2. 嵌入式 C 程序层:采集、控制执行、状态监测、报警生成
3. Python 服务层:接口、业务编排、缓存、存储、推送
4. Web 界面层:配置、状态、实时数据、报警、控制
禁止把以下职责混在一起:
- 路由层里直接写文件读写和数据库细节
- WebSocket 推送逻辑散落在多个业务模块中
- 前端页面组件里直接硬编码接口路径和协议细节
- C 程序适配逻辑与业务规则耦合
## 后端推荐目录
当用户要求搭建后端框架时,优先生成或对齐为如下结构:
```text
backend/
app/
main.py
core/
config.py
logging.py
security.py
response.py
exceptions.py
api/
deps.py
router.py
routes/
realtime.py
status.py
config_device.py
config_channel.py
config_alarm.py
config_system.py
alarms.py
control.py
schemas/
common.py
realtime.py
status.py
device_config.py
channel_config.py
alarm_setting.py
system_config.py
alarm_event.py
control.py
services/
realtime_service.py
status_service.py
config_service.py
alarm_service.py
control_service.py
sync_service.py
repositories/
json_config_repo.py
alarm_repo.py
adapters/
c_device_client.py
mock_device_client.py
protocol_models.py
ws/
manager.py
realtime_publisher.py
alarm_publisher.py
db/
sqlite.py
models.py
cache/
memory_store.py
tasks/
polling.py
utils/
time_utils.py
backup.py
config/
device.json
channel.json
setting.json
data/
alarm.db
tests/
```
## 前端推荐目录
当用户要求搭建前端框架时,优先生成或对齐为如下结构:
```text
frontend/
src/
main.ts
App.vue
router/
index.ts
api/
http.ts
realtime.ts
status.ts
config.ts
alarm.ts
control.ts
websocket/
realtime.ts
alarm.ts
reconnect.ts
stores/
realtime.ts
status.ts
alarm.ts
config.ts
views/
RealtimeView.vue
StatusView.vue
DeviceConfigView.vue
ChannelConfigView.vue
AlarmSettingView.vue
AlarmHistoryView.vue
ControlView.vue
SystemConfigView.vue
components/
status/
realtime/
alarm/
config/
control/
types/
api.ts
realtime.ts
status.ts
config.ts
alarm.ts
utils/
format.ts
validators.ts
```
如果仓库已有前端目录,则优先复用现有技术栈、构建工具和状态管理方式,不要无意义重建。
## 领域模型拆分
构建代码框架时,必须先把需求拆成以下核心模型:
### 1. 实时数据模型
- `line_list`
- `switch`
- `ai_collect`
其中 `line_list` 需要体现:
- `line_no`
- 一次值 `pri_val`
- 二次值 `sec_val`
### 2. 设备状态模型
- `self_check`
- `net1`
- `net2`
- `uart1`
- `uart2`
### 3. 设备基础配置模型
- 操作密码
- 硬件版本信息
- 软件版本信息
- 网口配置
- 串口配置
### 4. 通道配置模型
- `ai_channel`
- `ao_channel`
### 5. 定值与 AI 报警设置模型
- 线路告警阈值
- 故障告警设置
- AI 通道报警设置
### 6. 系统配置模型
- 对时设置
- 亮度设置
- 屏保时间
### 7. 报警事件模型
- `alarm_type`
- `time`
- `no`
- `type`
- `content`
- `level`
### 8. 控制指令模型
- `ch`
- `action`
## API 设计规则
生成后端接口时,统一遵守以下规范:
- 所有 HTTP 接口统一响应结构:`code`、`msg`、`data`
- 路由层仅负责参数校验、调用服务、返回标准响应
- `GET /api/real-time-data` 作为实时数据备用查询接口
- `GET /api/device-status` 用于设备状态读取
- `POST /api/config/device` 持久化设备基础配置并下发设备
- `POST /api/config/channel` 持久化 AI/AO 通道配置并下发设备
- `POST /api/config/line_alarm_setting` 持久化线路定值与故障告警设置
- `POST /api/config/ai_alarm_setting` 持久化 AI 告警设置
- `POST /api/config/system` 处理对时、亮度、屏保配置,并实时下发
- `GET /api/alarm/list` 分页查询报警历史
- `POST /api/control/switch` 下发开关量控制指令
如果用户要求生成代码优先先搭出路由、Schema、Service、Repository 的闭环,再补设备适配与前端页面。
## WebSocket 设计规则
必须把 WebSocket 当作一等公民设计,不要退化为轮询替代品。
### 实时数据通道
- 地址:`/ws/real-time`
- 推送周期:`0.5 秒`
- 推送内容:`real_time`
- 数据来源:内存缓存中的最新采样结果
### 报警通道
- 地址:`/ws/alarm`
- 触发方式:报警事件产生即推送
- 推送内容:单条报警事件或标准化事件消息
### WebSocket 实现要求
- 统一连接管理器
- 支持多客户端广播
- 支持断线清理
- 前端必须具备自动重连
- 推送数据结构必须和前端类型定义一致
## 存储设计规则
### JSON 配置
以下配置默认存放在 `config/`
- `device.json`
- `channel.json`
- `setting.json`
要求:
- 保存前先做 Schema 校验
- 写入时支持原子替换
- 修改后自动备份旧版本
- 关键字段变更后调用设备下发接口
### SQLite 报警库
报警事件单独存放在 SQLite 中,至少包含:
- `id`
- `alarm_type`
- `time`
- `no`
- `type`
- `content`
- `level`
要求:
- 写入逻辑集中在 Repository
- 查询支持分页
- 前端历史页调用分页接口,不直接访问数据库
### 内存缓存
以下数据只保存在内存中:
- 实时量测数据
- 实时设备状态
- 最近待推送报警缓冲
## 嵌入式适配层规则
当用户要落地与 C 程序交互的代码框架时,必须建立设备适配层,不要让业务层直接依赖具体协议细节。
至少抽象以下能力:
- 读取实时数据
- 读取设备状态
- 读取报警事件
- 下发基础配置
- 下发通道配置
- 下发系统设置
- 下发开关控制
推荐做法:
- 定义统一客户端接口,例如 `DeviceClient`
- 提供 `MockDeviceClient` 供联调和前端开发使用
- 提供 `CDeviceClient` 作为真实嵌入式对接实现
- 通过配置切换 mock / real 模式
## 安全与可靠性规则
必须纳入以下要求:
- 密码不得明文长期存储,至少做哈希处理
- 配置接口增加基本权限校验能力
- WebSocket 支持断线重连
- 配置写入支持备份
- 服务异常场景需易于接入守护或自动重启机制
## 推荐开发顺序
当用户要求“开始搭框架”时,按以下顺序推进:
1. 先梳理接口、数据模型、目录结构
2. 再生成后端基础工程:配置、日志、异常、统一响应
3. 再生成 Schema、Repository、Service、Router
4. 再搭建内存缓存、轮询任务、WebSocket 管理器
5. 再补 SQLite 与 JSON 持久化
6. 再抽象设备适配层和 mock 数据源
7. 最后生成前端 API 封装、状态管理、页面骨架与 WebSocket 客户端
## 输出要求
调用本技能后,输出内容应尽量包含以下几项:
### 如果用户要“方案”
输出:
- 建议目录结构
- 模块职责划分
- 核心数据模型清单
- API / WebSocket 对应关系
- 开发阶段拆分
### 如果用户要“直接写代码”
输出并执行:
- 先识别现有仓库中 `backend/`、`frontend/` 的当前结构
- 尽量增量修改,不要推倒重来
- 先落最小可运行骨架,再补细节
- 优先保证接口契约、模块边界、可测试性
## 生成代码时的验收清单
生成或修改后,至少检查:
- 后端是否存在统一应用入口
- 路由、服务、仓储、适配层是否职责分离
- 是否覆盖需求文档中的全部 API
- 是否存在 `/ws/real-time``/ws/alarm`
- 实时数据是否只走内存缓存
- 报警历史是否落 SQLite
- 配置是否落 JSON
- 前端是否拆出页面、API、WebSocket、类型定义
- 是否保留 mock 联调能力
## 常用提示模板
### 模板 1搭建完整框架
```text
请基于当前仓库和需求文档,搭建 RK3568 电气量测控平台的前后端代码框架。
后端使用 FastAPI前端沿用仓库现有技术栈。
要求包含目录结构、统一响应、配置读写、SQLite 告警存储、WebSocket 实时推送、设备适配层与 mock 数据源。
```
### 模板 2只搭后端骨架
```text
请按 python-fullstack-scaffold 技能,为该项目生成后端骨架。
要求覆盖 realtime、status、config、alarm、control 五类能力,并预留嵌入式 C 程序适配层。
```
### 模板 3只搭前端骨架
```text
请按 python-fullstack-scaffold 技能,为该项目生成前端页面骨架和 API/WebSocket 接入层。
要求覆盖实时数据、设备状态、基础配置、通道配置、报警历史和控制页面。
```
## 执行提醒
在实际执行前,先确认以下信息:
- 当前仓库是否已经存在 `backend/``frontend/`
- 前端当前使用的具体技术栈和构建工具
- 后端是否已有可复用入口、配置系统和测试结构
- 用户要的是“技能文件”、 “设计方案” 还是 “直接生成代码”
若信息不足,先补充上下文;若仓库已有实现,优先做兼容式演进,而不是重建。