基于 opsx-web-lite 框架(Go+Gin+Vue3+Element Plus)构建许可证管理服务器,
业务域参考 Licence 服务器 Web 版。
【后端 - 4层架构】
- 认证:单 Admin 表 + JWT(HS256)
- 核心授权域:Product / Customer / License / Activation
· License 生成/验证/激活/机器绑定/心跳/续期/吊销
· 客户端契约接口:/api/v1/license/{verify,activate,deactivate,heartbeat}
- 定价订单:Plan / Order / 支付网关配置
- 防重复购买:CustomerEntitlement + 幂等支付 webhook + 手动发放
- 分析审计:Dashboard 统计 / Analytics / AuditLog / Setting 管理
【前端】
- Dashboard(ECharts 图表)、产品、客户、License、计划、订单、权益、日志、设置
- 9 个完整 CRUD 业务页面 + 登录/布局
【部署】
- SQLite + 单二进制(//go:embed 嵌入前端)
- 开发:./run.sh start(前端5181/后端9001)
- 生产:./run.sh build && ./run.sh binary start
- 默认账号:admin/admin
Author: Logan.Li
2.9 KiB
2.9 KiB
AGENTS.md — opsx-licence 开发约定
本文件供 AI 协作助手(Claude / ZCode 等)参考,确保产出代码与项目既有风格一致。
语言与签名
- 所有交互、注释、文档一律使用中文。
- 每次新增或修改代码注释时,在注释末尾追加
// Logan.Li签名。 - 函数必须有文档注释(以函数名开头)。
后端约定
分层架构(4 层)
internal/controller/<domain>/ HTTP 处理层(gin.Context)
↓
internal/service/<domain>/ 业务逻辑层(持有 *gorm.DB + *config.Config)
↓
internal/dto/ 请求/响应结构体(扁平包,按域分文件)
internal/model/ GORM 模型(扁平包,按域分文件)
↓
GORM
硬性约束
- Controller 方法 ≤ 80 行:只做参数校验 + 响应格式化;复杂逻辑下沉到 Service。
- Service 承载所有业务逻辑:DB 操作、业务规则、跨表事务。
- 单文件 ≤ 300 行:超出则按子域拆分。
- 标准 CRUD 方法名:
List / Get / Create / Update / Delete。 - Controller 持有
service与db;Service 持有db与cfg。
响应格式
统一使用 dto.Response{Code, Message, Data},code:0 表示成功。
分页响应结构:
{
"code": 0,
"data": {
"count": 100,
"total_pages": 10,
"current_page": 1,
"page_size": 10,
"next": "...",
"previous": "...",
"results": []
}
}
新增业务域步骤(示例:product)
internal/model/product.go—— GORM 模型internal/dto/product.go—— 请求/响应 DTOinternal/service/product/product_service.go—— 业务逻辑internal/controller/product/product_controller.go—— HTTP handler- 在
router/router.go的 protected 组注册路由
路由规范
- 统一
/api前缀,集中注册于router/router.go。 - 公开接口(登录、客户端验证等)放公开组;管理接口放 JWT 保护组。
前端约定
- Vue 3 Composition API +
<script setup>。 - Element Plus:
el-checkbox/el-radio的选项用value而非label。 - 减少打扰:常规操作不发成功 toast;仅错误用
ElMessage.error;危险操作用确认弹窗。 - 命名:组件 PascalCase(
UserList.vue),工具 camelCase(request.js),目录 kebab-case。 - 接口封装在
src/api/,每个业务域一个文件,统一基于@/utils/request或@/api/request的 axios 实例。
认证体系
- 单 Admin 表(无 RBAC 多角色)。
- JWT 单 token,HS256,24h 过期。
- 中间件
AuthMiddleware校验Authorization: Bearer <token>,写入user_id到上下文。
安全
- 生产环境(
release模式)必须设置JWT_SECRET,否则启动失败。 - CORS 使用显式白名单,禁止
*。 - 默认账号
admin/admin必须在部署后修改。