From 31f0fb4ceb64085c0f2b0aa1b31f9e3051e0e21b Mon Sep 17 00:00:00 2001 From: ryan Date: Tue, 9 Jun 2026 11:26:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=84=E7=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-image.yml | 2 +- .github/workflows/cleanup-prerelease-tags.yml | 2 +- Agents.md | 459 +++++++++--------- CLAUDE.md | 267 +++++++--- config.example.yaml | 2 +- docs/docs.go | 376 ++++++++++++++ docs/swagger.json | 376 ++++++++++++++ docs/swagger.yaml | 231 +++++++++ internal/apps/oauth/routers.go | 2 + 9 files changed, 1411 insertions(+), 306 deletions(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index cb5b1ac9..c02dee6a 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -1,4 +1,4 @@ -name: Docker image build (Server) +name: Build Image on: workflow_dispatch: diff --git a/.github/workflows/cleanup-prerelease-tags.yml b/.github/workflows/cleanup-prerelease-tags.yml index 5de62e4d..ad32e2e4 100644 --- a/.github/workflows/cleanup-prerelease-tags.yml +++ b/.github/workflows/cleanup-prerelease-tags.yml @@ -1,4 +1,4 @@ -name: Cleanup prerelease tags +name: Cleanup Prerelease on: workflow_dispatch: diff --git a/Agents.md b/Agents.md index a74c1a1f..602adc4f 100644 --- a/Agents.md +++ b/Agents.md @@ -1,6 +1,6 @@ # 项目开发规范 -> 本文档面向 AI 代理(Agent)和开发者,描述项目的目录结构、模块职责与开发规范。 +> 本文档面向 AI 代理(Agent)与开发者,描述项目的目录结构、模块职责、代码规范与开发流程。 --- @@ -34,9 +34,11 @@ --- -## 二、顶层目录结构 +## 二、项目目录结构 -以下是项目的顶层目录结构及其职责, 如果有新增目录或文件,请务必在此处同步更新: +### 2.1 顶层目录结构 + +以下是项目的顶层目录结构及其职责: ``` wavelet/ # 项目根目录(模块名: github.com/Rain-kl/Wavelet) @@ -45,7 +47,7 @@ wavelet/ # 项目根目录(模块名: github.com/Rai ├── config.yaml # 运行时配置(不提交到 Git) ├── config.example.yaml # 配置模板(需提交) ├── DEPLOYMENT_zh.md # 部署说明文档(中文版) -├── Makefile # 常用命令(swagger/tidy/license) +├── Makefile # 常用命令(swagger/tidy/license/code-check) ├── docker/ # Docker 镜像构建文件(集成/前端/后端) │ ├── Dockerfile # 标准集成镜像(前端静态导出嵌入后端) │ ├── Dockerfile.frontend # 仅前端镜像(Next.js) @@ -60,11 +62,9 @@ wavelet/ # 项目根目录(模块名: github.com/Rai └── support-files/ # 辅助文件(如 nginx 配置等) ``` ---- +### 2.2 后端 `internal/` 目录结构 -## 三、后端 `internal/` 目录结构 - -以下是 `internal/` 目录的结构及其职责, 如果有新增目录或文件,请务必在此处同步更新: +以下是 `internal/` 目录的结构及其职责: ``` internal/ @@ -156,9 +156,7 @@ internal/ └── ... # Span 创建、Exporter 配置 ``` ---- - -## 四、`apps/` 模块内部文件规范 +### 2.3 `apps/` 业务模块文件规范 每个业务模块(`apps//`)内部按照以下约定组织文件: @@ -174,7 +172,7 @@ internal/ > - 路由 **不在** 模块内部注册,统一在 `internal/router/router.go` 中注册。 > - `errs.go` 只定义字符串常量,不定义 `error` 类型值,错误通过 `response.RespondFailure(c, errMsg)` 输出。 -### `admin/` 子模块结构示例 +#### `admin/` 子模块结构示例: ``` apps/admin/ @@ -193,11 +191,9 @@ apps/admin/ └── routers.go ``` ---- +### 2.4 前端 `frontend/` 目录结构 -## 五、前端 `frontend/` 目录结构 - -以下是前端 `frontend/` 目录的结构, 如果需要调整请在此处同步更改: +以下是前端 `frontend/` 目录的结构: ``` frontend/ @@ -231,11 +227,9 @@ frontend/ └── .env.example # 环境变量模板(需提交) ``` ---- +### 2.5 前端 `components/common/` 通用业务组件详解 -## 5.1 前端 `components/common/` 通用业务组件详解 - -`common/` 目录存放跨页面复用的业务组件,按功能域分为五个子目录。以下是每个文件的职责说明: +`common/` 目录存放跨页面复用的业务组件,按功能域分为五个子目录: ``` components/common/ @@ -249,7 +243,7 @@ components/common/ │ └── users.tsx # UsersManager — 用户管理页面,提供分页、搜索、筛选的用户列表表格, │ # 支持在侧边抽屉查看用户详情,以及启用/禁用(封禁/解封)切换 │ -├── docs/ # 文档页面组件,包括法律文档(隐私政策/服务条款)和接口文档 +├── docs/ # 文档页面组件,包括法律文档(隐私政策/服务条款)和接口文档 │ ├── general/ # 通用框架组件 │ ├── manage-pannel.tsx # ManagePage(泛型)— 通用管理页面框架,封装"列表 + 详情面板"布局, @@ -280,9 +274,9 @@ components/common/ --- -## 六、开发规范 +## 三、后端开发规范 -### 6.1 命名规范 +### 3.1 命名规范 | 对象 | 规范 | 示例 | |------|------|------| @@ -295,7 +289,7 @@ components/common/ | 任务类型常量 | 全大写蛇形 | `CleanupUnusedUploadsTask` | | 配置 Key | 全小写蛇形(YAML) | `session_cookie_name`、`max_idle_conn` | -### 6.2 HTTP Handler 规范 +### 3.2 HTTP Handler 规范 ```go // Handler 函数命名:动词 + 名词(PascalCase) @@ -317,16 +311,9 @@ func ListUsers(c *gin.Context) { **响应格式约定**: - 成功:`util.OK(data)` 或 `util.OKNil()` - 失败:`util.Err(msg)` + 对应 HTTP 状态码 -- 通过 `response.RespondSuccess / RespondFailure` 也可(两套工具共存) +- 通过 `response.RespondSuccess / RespondFailure` 均可(两套工具共存) -### 6.4 错误处理规范 - -- **模块内错误消息**:定义在本模块 `errs.go` 中,使用 `const` 字符串。 -- **跨模块错误消息**:定义在 `internal/common/errs.go` 或 `common/constants.go`。 -- **数据库错误**:直接 `err.Error()` 返回给响应(开发阶段),生产环境应屏蔽详情。 -- **gorm.ErrRecordNotFound**:显式判断,返回 404。 - -### 6.5 中间件使用规范 +### 3.3 中间件使用规范 | 中间件 | 位置 | 作用 | |--------|------|------| @@ -337,20 +324,20 @@ func ListUsers(c *gin.Context) { | `oauth.LoginRequired()` | 路由组 | 登录校验 | | `admin.LoginAdminRequired()` | Admin 路由组 | 管理员校验 | -### 6.6 配置访问规范 +### 3.4 配置访问规范 - 所有配置通过 `config.Config.
.` 访问(全局单例)。 - 不允许在业务代码中使用 `os.Getenv()` 读取配置,统一通过 Viper 加载。 - 新增配置项:先在 `config.example.yaml` 添加注释模板,再在 `internal/config/model.go` 添加结构体字段。 -### 6.7 数据库访问规范 +### 3.5 数据库访问规范 - 直接使用 GORM:`model.DB.Where(...).Find(&result)`(适合简单查询)。 - 通过 `db.DB(ctx)` 获取带链路追踪的 DB 实例(Admin 模块推荐)。 - 禁止在 Handler 层直接写复杂 SQL,应封装到 `model/` 层方法或 `service/` 层。 - 数据库迁移使用 `db/migrator/` 中的 AutoMigrate,不允许手动执行 DDL。 -### 6.8 异步任务规范 +### 3.6 异步任务规范 **定义任务**: 1. 在 `internal/task/constants.go` 中定义任务类型常量。 @@ -360,12 +347,15 @@ func ListUsers(c *gin.Context) { **队列优先级**(从高到低):`webhook` > `whitelist_only` > `default` -### 6.9 前端组件样式规范 +--- -**基础组件必须遵循系统的色彩主题系统。** 所有基于 shadcn/ui 的基础组件(Button、Dialog、Input 等)应使用组件内置的 `variant` 属性来控制样式,禁止通过 `className` 手写颜色或背景等样式。 +## 四、前端开发规范 + +### 4.1 组件样式规范 + +**基础组件必须遵循系统的色彩主题系统。** 所有基于 shadcn/ui 的基础组件(Button、Dialog、Input 等)应使用组件内置 of `variant` 属性来控制样式,禁止通过 `className` 手写颜色或背景等样式。 **错误示例(禁止)**: - ```tsx // ❌ 禁止通过 className 手写颜色、背景、阴影等样式