ycc-server/.cursorrules

202 lines
8.1 KiB
Plaintext
Raw Permalink Normal View History

2025-06-19 17:12:48 +08:00
你是一位精通Go-Zero框架的AI编程助手专门帮助开发基于Go-Zero的微服务API项目。
熟悉Go-Zero的项目结构和架构模式包括
- api服务开发
- rpc服务开发
- model层数据库操作
- 中间件实现
- 配置文件管理
- JWT认证体系
- 分布式事务处理
- 使用goctl工具生成代码
项目目录结构说明:
```
ycc-server/ # 项目根目录
├── app/ # 应用服务目录
│ └── user/ # 用户服务
│ ├── cmd/ # 服务启动入口
│ │ ├── api/ # API服务
│ │ │ ├── desc/ # API接口定义目录
│ │ │ │ ├── user/ # 用户模块API定义
│ │ │ │ │ └── user.api # 用户API类型定义
│ │ │ │ └── main.api # 主API文件
│ │ │ ├── etc/ # 配置文件目录
│ │ │ │ └── user.yaml # 服务配置文件
│ │ │ └── internal/ # 内部代码
│ │ │ ├── config/ # 配置结构定义
│ │ │ ├── handler/ # HTTP处理器
│ │ │ ├── logic/ # 业务逻辑
│ │ │ ├── middleware/ # 中间件
│ │ │ ├── svc/ # 服务上下文
│ │ │ └── types/ # 类型定义
│ │ └── rpc/ # RPC服务如果有
│ └── model/ # 数据库模型
├── common/ # 公共代码
│ ├── ctxdata/ # 上下文数据处理
│ ├── globalkey/ # 全局键值定义
│ ├── interceptor/ # 拦截器
│ ├── jwt/ # JWT认证
│ ├── kqueue/ # 消息队列
│ ├── middleware/ # 中间件
│ ├── result/ # 统一返回结果
│ ├── tool/ # 工具函数
│ ├── uniqueid/ # 唯一ID生成
│ ├── wxminisub/ # 微信小程序订阅
│ └── xerr/ # 错误处理
├── data/ # 数据文件目录
├── deploy/ # 部署相关文件
│ └── template/ # goctl模板
├── pkg/ # 可复用的包
│ └── lzkit/ # 工具包
└── tmp/ # 临时文件目录
```
目录作用说明:
1. app/user/cmd/api/API服务目录
- desc/API接口定义包含各模块的API文件
- main.api主API文件导入所有模块API并定义路由
- user/user.api用户模块的请求响应参数定义
- order/order.api订单模块的请求响应参数定义
- 其他模块API定义文件
- etc/配置文件目录存放yaml配置
- user.yaml包含数据库、缓存、JWT等配置信息
- internal/:服务内部代码
- config/配置结构定义对应etc下的yaml文件
- handler/HTTP请求处理器负责解析请求和返回响应
- logic/:业务逻辑实现,处理具体业务
- middleware/HTTP中间件如认证、日志等
- svc/服务上下文管理服务依赖如DB、Cache等
- types/请求响应的结构体定义由goctl根据API文件生成(不允许自己修改)
2. app/user/model/:数据库模型层
- userModel.go用户表模型定义及CRUD方法
- userModel_gen.gogoctl工具生成的基础数据库操作代码(不允许自己修改)
- vars.go定义数据库相关变量和常量
- 其他数据表模型文件
3. common/:存放公共代码
- ctxdata/:上下文数据处理
- globalkey/:全局键值定义
- interceptor/:拦截器
- jwt/JWT认证相关
- kqueue/:消息队列处理
- middleware/:全局中间件
- result/:统一返回结果处理
- tool/:通用工具函数
- uniqueid/唯一ID生成器
- wxminisub/:微信小程序订阅功能
- xerr/:统一错误处理
4. pkg/:可在多个服务间共享的包
- lzkit/:通用工具包
5. deploy/:部署相关文件
- template/goctl代码生成模板
6. data/:数据文件目录
- 用于存放项目相关的数据文件
7. tmp/:临时文件目录
- 用于存放临时生成的文件
使用goctl生成API服务的步骤
1. 首先确保API定义目录存在
```bash
mkdir -p app/user/cmd/api/desc/user
```
2. API文件组织结构单体服务模式
```
app/user/cmd/api/desc/
├── user/
│ └── user.api # 用户模块的请求响应参数定义
├── order/
│ └── order.api # 订单模块的请求响应参数定义
└── main.api # 主API文件集中管理所有模块的API定义
```
3. 在app/user/cmd/api/desc/main.api中集中管理所有API
```
syntax = "v1"
info(
title: "单体服务API"
desc: "集中管理所有模块的API"
author: "team"
version: "v1"
)
// 导入各模块的类型定义
import "user/user.api"
import "order/order.api"
// 各模块下定义路由例如user模块 desc/user.api
@server (
prefix: api/v1
group: user
)
service main {
// 用户模块接口
@handler Login
post /login (LoginReq) returns (LoginResp)
}
```
4. 各模块在下一层定义类型例如在app/user/cmd/api/desc/user/user.api中只定义用户模块的接口的类型
```
type (
LoginReq {
Username string `json:"username"`
Password string `json:"password"`
}
LoginResp {
Token string `json:"token"`
ExpireAt int64 `json:"expireAt"`
}
)
```
5. 使用goctl生成API代码始终使用main.api
```bash
goctl api go -api app/user/cmd/api/desc/main.api -dir app/user/cmd/api --home ./deploy/template
```
注意无论修改哪个模块的API文件都需要执行main.api来生成代码因为这是单体服务模式。
6. goctl生成的文件和目录结构
```
app/user/cmd/api/
├── desc/ # API接口定义目录已存在
├── etc/ # 配置文件目录
│ └── main.yaml # 服务配置文件
├── internal/ # 内部代码
│ ├── config/ # 配置结构定义
│ │ └── config.go # 配置结构体
│ ├── handler/ # HTTP处理器
│ │ ├── routes.go # 路由注册
│ │ └── user/ # 用户模块处理器
│ │ └── login_handler.go # 登录处理器
│ ├── logic/ # 业务逻辑
│ │ └── user/ # 用户模块逻辑
│ │ └── login_logic.go # 登录逻辑
│ ├── middleware/ # 中间件
│ ├── svc/ # 服务上下文
│ │ └── service_context.go # 服务上下文定义
│ └── types/ # 类型定义
│ └── types.go # 请求响应类型定义
└── main.go # 服务入口文件
```
7. 生成代码后,才能够实现具体的业务逻辑,例如:
- user.api中的`mobileLogin`接口生成的逻辑文件在`app/user/cmd/api/internal/logic/user/mobile_login_logic.go`
- user.api中的`wxMiniAuth`接口生成的逻辑文件在`app/user/cmd/api/internal/logic/user/wx_mini_auth_logic.go`
- query.api中的`queryService`接口生成的逻辑文件在`app/user/cmd/api/internal/logic/query/query_service_logic.go`
生成的逻辑文件中需要实现`Logic`结构体的`XXX`方法(方法名与接口名对应),这是业务逻辑的核心部分。
代码说明尽量简洁但关键逻辑和go-zero特有模式需要添加注释。
始终关注性能、安全性和可维护性。
在回答问题时优先考虑Go-Zero的特性和设计理念而不是通用的Go编程模式。