- Gin + config.yaml + SQLite 后端骨架,JWT 登录 + 管理员初始化
- web/ 原生单页:拖拽多图上传 → Agnes 免费识别 → 结果复制
- HTTP API:/api/v1/vision/analyze 免鉴权 + 令牌桶限流,支持程序直调
- cmd/vision-cli 独立 CLI 工具(复用 service 层,不依赖 Web 服务)
- build.bat / build.sh 构建脚本,移除 mcp-server
- 统一响应格式 {code, message, data},CORS/JWT/限流中间件
Co-Authored-By: Claude <noreply@anthropic.com>
39 lines
917 B
Go
39 lines
917 B
Go
package model
|
|
|
|
import "time"
|
|
|
|
// User 管理员账号。
|
|
type User struct {
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
Username string `gorm:"uniqueIndex;size:64" json:"username"`
|
|
PasswordHash string `gorm:"size:255" json:"-"`
|
|
Role string `gorm:"size:32" json:"role"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// Response 统一响应格式 {code, message, data}。
|
|
type Response struct {
|
|
Code int `json:"code"`
|
|
Message string `json:"message"`
|
|
Data interface{} `json:"data,omitempty"`
|
|
}
|
|
|
|
// 业务错误码
|
|
const (
|
|
CodeOK = 0
|
|
CodeBadParam = 400
|
|
CodeUnauthorized = 401
|
|
CodeForbidden = 403
|
|
CodeNotFound = 404
|
|
CodeConflict = 409
|
|
CodeServerErr = 500
|
|
)
|
|
|
|
func OK(data interface{}) *Response {
|
|
return &Response{Code: CodeOK, Message: "ok", Data: data}
|
|
}
|
|
|
|
func Err(code int, msg string) *Response {
|
|
return &Response{Code: code, Message: msg}
|
|
}
|