بنقرة واحدة
new-api
Wavelet 项目专用:当新增或修改自定义业务 API、新增业务路由、新增 service 层核心逻辑时必须使用。本技能指导包职责划分、推荐文件结构、路由解耦、Swagger 文档生成与质量门禁验证。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Wavelet 项目专用:当新增或修改自定义业务 API、新增业务路由、新增 service 层核心逻辑时必须使用。本技能指导包职责划分、推荐文件结构、路由解耦、Swagger 文档生成与质量门禁验证。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Wavelet 项目专用:当新增或修改业务缓存(RAM/Redis/DB 三层读路径)、缓存失效、多节点 pub/sub 同步、或评估高频读是否应接入缓存时必须使用。本技能说明系统标准缓存框架、参考实现、禁止写法与分布式一致性要求。
Wavelet 项目专用:当新增或修改 ClickHouse 批量写入、接入 internal/db/batchwriter、将业务域异步 flush 到分析表、迁移 risk_control/节点访问日志/可观测时序写入、或评估 async_insert 与背压策略时必须使用。本技能指导分层职责、各域独立 Writer 实例、repository 批量 API 与禁止写法。
Wavelet 项目专用:当新增或修改数据库表结构、索引、初始化数据、系统配置 seed、模板 seed、默认管理员、goose SQL 迁移、internal/db/migrator、ClickHouse 分析库 DDL 或数据库升级流程时必须使用。本技能指导在 internal/db/migrator/goose 下编写 PostgreSQL/SQLite 双方言 SQL 迁移,以及在 goose/clickhouse 下编写 ClickHouse 单方言分析表迁移,并完成验证。
Provides comprehensive code review guidance for React 19, Vue 3, Angular 17+, Svelte 5, Rust, TypeScript, Java, PHP, Python, Django, Go, C#/.NET, Kotlin, Swift, NestJS, C/C++, and more. Helps catch bugs, improve code quality, and give constructive feedback. Use when: reviewing pull requests, conducting PR reviews, code review, reviewing code changes, establishing review standards, mentoring developers, architecture reviews, security audits, checking code quality, finding bugs, giving feedback on code.
Wavelet 项目专用:当业务需要上传文件、读取已上传文件、在 Worker/任务中程序化摄取字节流、选择存储引擎能力、或排查 w_uploads / 文件统计异常时必须使用。本技能指导 storage 与 upload 分层、upload.Ingest 策略选型、前后端接入与禁止旁路写表。
Use when reviewing Go code or checking code against community style standards. Also use proactively before submitting a Go PR or when reviewing any Go code changes, even if the user doesn't explicitly request a style review. Does not cover language-specific syntax — delegates to specialized skills.
| name | new-api |
| description | Wavelet 项目专用:当新增或修改自定义业务 API、新增业务路由、新增 service 层核心逻辑时必须使用。本技能指导包职责划分、推荐文件结构、路由解耦、Swagger 文档生成与质量门禁验证。 |
本技能是 Wavelet 项目接口开发与路由注册的唯一指导规范。在开发任何新接口前,请严格按照本指南进行架构决策与路由注册。
Wavelet 后端路由采用了严格的框架层与业务层隔离机制。请牢记以下开发原则:
internal/router/router.go(核心入口委派)internal/router/root/default.go(公开文件服务、robots.txt、Swagger 及 /api/health 路由)internal/router/root/frontend.go(前端静态服务)internal/router/v1/v1.go(V1 分发层协调器)internal/router/v1/admin.go(框架管理员端管理接口)internal/router/v1/user.go(框架普通用户端基础接口、OAuth及公开接口)custom.go 中注册业务接口:
根据接口的访问路径特征和访问身份/限制条件,决定将新开发的 API 挂载至何处:
| 目标 API 路径特征 | 访问身份/条件限制 | 对应的路由注册入口 | 是否允许修改 |
|---|---|---|---|
/my-custom-path (挂载在根路径下的特殊业务接口) | 自定义控制 | root/custom.go 中的 RegisterCustomRootRoutes | 允许修改 (业务自定义入口) |
/api/v1/custom/... (API v1 下的定制业务接口) | 自定义控制 | v1/custom.go 中的 RegisterCustomRoutes | 允许修改 (业务自定义入口) |
/api/v1/admin/... (系统管理员管理端接口) | 需要管理员登录 (admin.LoginAdminRequired()) | v1/admin.go | 禁止修改 (仅限系统框架路由) |
/api/v1/user/... (框架普通用户基础接口) | 需要普通用户登录 (oauth.LoginRequired()) | v1/user.go | 禁止修改 (仅限系统框架路由) |
/api/v1/public/... (Captcha、Config 等系统公开接口) | 所有人 (无条件 / 公开) | v1/user.go | 禁止修改 (仅限系统框架路由) |
GET /f/:id, GET /robots.txt, GET /api/health (系统级默认及公开接口) | 所有人 (无条件 / 公开) | root/default.go | 禁止修改 (仅限系统框架路由) |
root/custom.go/api/v1 前缀)。package root
import (
"github.com/Rain-kl/Wavelet/internal/apps/custom"
"github.com/gin-gonic/gin"
)
// RegisterCustomRootRoutes registers custom business routes that belong to the root path.
func RegisterCustomRootRoutes(r *gin.Engine) {
// 挂载到根路径下,如 GET /my-custom-webhook
r.GET("/my-custom-webhook", custom.HandleRootWebhook)
}
(注:该函数已由 root.go 自动加载,你无需修改任何其他核心文件。)v1/custom.go/api/v1/custom/... 前缀,可选择性配置用户/管理员登录中间件)。package v1
import (
"github.com/Rain-kl/Wavelet/internal/apps/custom"
"github.com/gin-gonic/gin"
)
// RegisterCustomRoutes registers standard custom API routes under /api/v1.
func RegisterCustomRoutes(apiV1Router *gin.RouterGroup) {
customRouter := apiV1Router.Group("/custom")
{
// 挂载到 /api/v1/custom 下,例如:POST /api/v1/custom/action
customRouter.POST("/action", custom.DoActionHandler)
}
}
(注:该函数已由 v1/v1.go 自动加载,你无需修改任何其他核心文件。)当新增一套定制的业务接口(例如名为 custom 的业务模块)时,建议采用以下标准文件结构:
internal/
├── router/
│ ├── root/
│ │ └── custom.go # [修改] 若为根路径 API,在此处注册,将路由委派给 apps/custom
│ └── v1/
│ └── custom.go # [修改] 若为 v1 API,在此处注册,将路由委派给 apps/custom
└── apps/
└── custom/
├── routers.go # [新建] HTTP Handlers (Gin),负责参数绑定、校验与响应
├── logics.go # [新建] 业务逻辑层:承载模块内闭环的纯 Go 业务逻辑,不依赖 gin.Context
└── errs.go # [新建] 存放模块特有的业务错误常量定义(可选)
如果自定义功能涉及新表或字段,请参考 database-migration 技能,在 internal/db/migrator/goose/ 目录下编写迁移文件并在 internal/model/ 中定义 GORM 数据模型。
logics.go / service.go)业务逻辑逻辑应当实现于 internal/apps/custom/ 目录下:
logics.go):定义接收 context.Context 且不依赖 *gin.Context 的函数,易于单元测试与 Worker 复用。参考 internal/apps/user/logics.go。service.go):若需注入依赖(如 DB 连接、外部客户端等),可定义 Service 结构体和构造函数。internal/listener 发射域事件,禁止直接 import push 模块;装配在 internal/bootstrap 完成(参见 push-notification skill)。routers.go)在 internal/apps/custom/routers.go 中编写 Handler:
ShouldBindJSON/ShouldBindQuery)。github.com/Rain-kl/Wavelet/internal/common/response 统一返回响应:
response.OK(data) 或 response.OKNil()response.Err(msg)根据 路由归属判定表,在 root/custom.go 或 v1/custom.go 中编写注册代码,将路由路径绑定到步骤 3 中编写的 Handler。
每次新增或修改接口后,必须运行并验证以下各项:
make license(新增 Go 文件时自动添加许可头)make swagger(若有 Swagger 注释修改)make code-check(确保通过 golangci-lint 和前端 TS 检查)go test ./...(确保所有测试 100% 通过)