Files
vision-tool/internal/model/model.go
Geliebte a3bbf33358 feat: 重构为 Go Web 脚手架——在线图片识别 Web 服务 + vision-cli 独立工具
- 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>
2026-08-12 23:59:17 +08:00

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}
}