用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/ViewWay/MiniHES --skill backend-development命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | backend-development |
| description | MiniHES 后端开发规范。当用户进行 FastAPI 后端开发、API 设计、数据库操作、 DLMS 协议实现、数据采集任务开发时自动激活。 涵盖分层架构、编码原则、安全要求、数据库规范。 |
严格遵循单向依赖,禁止跨层调用:
api/v1/endpoints/ → 路由层(HTTP 处理)
↓
schemas/ → 数据验证层(Pydantic)
↓
services/ → 业务逻辑层
↓
models/ → 数据访问层(SQLAlchemy ORM)
↓
core/ → 基础设施(config, database, security)
| 层 | 职责 | 禁止 |
|---|---|---|
| endpoints | 参数接收、调用 service、返回响应 | 直接操作 ORM、写业务逻辑 |
| schemas | 请求/响应模型、数据验证 | 访问数据库 |
| services | 业务逻辑、事务管理、跨模型协调 | 直接处理 HTTP 请求 |
| models | ORM 定义、表结构 | 包含业务逻辑 |
| core | 配置、数据库连接、安全工具 | 依赖业务层 |
禁止:未确认方案就直接改数据库或写代码。
| 类型 | 规范 | 示例 |
|---|---|---|
| 表名 | {模块前缀}_{名称} | dev_meter, col_task |
| 模型类 | PascalCase | MeterComm, TaskLog |
| 字段名 | snake_case | meter_id, created_at |
| API 路径 | kebab-case 复数 | /api/v1/meter-points |
| Service 方法 | 动词_名词 | get_meter, create_task |
| Schema 类 | {动作}{资源}{Request/Response} | CreateMeterRequest |
| 前缀 | 模块 | 示例 |
|---|---|---|
sys_ | 系统管理 | sys_user, sys_role, sys_audit_log |
dev_ | 设备管理 | dev_meter, dev_meter_comm |
col_ | 数据采集 | col_task, col_meter_reading |
lab_ | 实验室测试 | lab_test_task, lab_defect |
直接返回数据,使用标准 HTTP 状态码:
# 200 OK - 查询
@router.get("/meters")
async def list_meters(...):
return {"items": [...], "total": 100}
# 201 Created - 创建
@router.post("/meters", status_code=201)
async def create_meter(...):
return meter
HTTP 状态码 + 业务码:
{
"detail": "错误描述",
"error_code": 10001
}
| 范围 | 模块 | 示例 |
|---|---|---|
| 10001-10999 | 设备管理 | 10001=设备不存在 |
| 20001-20999 | 数据采集 | 20001=任务执行失败 |
| 30001-30999 | 系统管理 | 30001=认证失败 |
from app.core.database import Base, TimestampMixin
class Meter(Base, TimestampMixin):
__tablename__ = "dev_meter"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
serial_number: Mapped[str] = mapped_column(String(50), unique=True, index=True)
# ... 其他字段
# relationship 使用字符串引用避免循环导入
comm: Mapped["MeterComm | None"] = relationship(back_populates="meter", uselist=False)
Base,需要时间戳的加 TimestampMixinMapped 类型注解,必须指定 nullableMapped[dict] + mapped_column(JSON, ...)ondelete 约束app/models/__init__.py 注册# 1. 生成迁移(先确认模型变更正确)
uv run alembic revision --autogenerate -m "描述"
# 2. 检查迁移文件(特别是 nullable、default、现有数据)
# 3. 应用迁移
uv run alembic upgrade head
迁移注意:
构建后端功能时,按以下格式输出:
uv add xxx).env 配置Schema 层:
# schemas/meter.py
from pydantic import BaseModel, Field
class CreateMeterRequest(BaseModel):
serial_number: str = Field(..., max_length=50)
meter_name: str = Field(..., max_length=100)
meter_type_id: int | None = None
class MeterDetail(BaseModel):
id: int
serial_number: str
meter_name: str
current_status: str
model_config = {"from_attributes": True}
Service 层:
# services/meter_service.py
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.models import Meter
from app.schemas.meter import CreateMeterRequest
async def create_meter(db: AsyncSession, data: CreateMeterRequest) -> Meter:
meter = Meter(**data.model_dump())
db.add(meter)
await db.flush()
return meter
Endpoint 层:
# api/v1/endpoints/meters.py
from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.dependencies import get_db, get_current_user
from app.schemas.meter import CreateMeterRequest, MeterDetail
from app.services.meter_service import create_meter
router = APIRouter(prefix="/meters", tags=["meters"])
@router.post("", response_model=MeterDetail, status_code=201)
async def create(
data: CreateMeterRequest,
db: AsyncSession = Depends(get_db),
user=Depends(get_current_user),
):
return await create_meter(db, data)
依赖安装:
uv add <package> # 如果需要新包
uv run alembic revision --autogenerate -m "add xxx"
uv run alembic upgrade head
app/
├── api/v1/endpoints/ # 每个业务一个文件
│ ├── auth.py
│ ├── meters.py
│ ├── tasks.py
│ └── ...
├── schemas/ # 对应 endpoint 的请求/响应模型
│ ├── auth.py
│ ├── meter.py
│ └── ...
├── services/ # 业务逻辑,按模块组织
│ ├── meter_service.py
│ ├── task_service.py
│ └── ...
├── models/ # ORM 模型
├── core/ # 基础设施
│ ├── config.py # Settings
│ ├── database.py # engine, session, Base
│ ├── security.py # JWT, password
│ ├── dependencies.py # get_db, get_current_user
│ └── exceptions.py # 自定义异常
└── main.py
基于 SOC 职业分类