上传初始版,功能未经任何测试,仅为基本框架,目前为完全不可用状态
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// BaseModel 基础模型,包含通用字段
|
||||
type BaseModel struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at,omitempty"`
|
||||
}
|
||||
|
||||
// User 用户模型
|
||||
type User struct {
|
||||
BaseModel
|
||||
Username string `gorm:"uniqueIndex;size:50;not null" json:"username"`
|
||||
Password string `gorm:"size:255;not null" json:"-"`
|
||||
Email string `gorm:"uniqueIndex;size:100;not null" json:"email"`
|
||||
IsAdmin bool `gorm:"default:false" json:"is_admin"`
|
||||
IsActive bool `gorm:"default:true" json:"is_active"`
|
||||
LastLoginAt time.Time `json:"last_login_at"`
|
||||
Quota Quota `gorm:"foreignKey:UserID" json:"quota"`
|
||||
Conversations []Conversation `gorm:"foreignKey:UserID" json:"conversations,omitempty"`
|
||||
}
|
||||
|
||||
// Quota 配额模型
|
||||
type Quota struct {
|
||||
BaseModel
|
||||
UserID uint `gorm:"uniqueIndex;not null" json:"user_id"`
|
||||
TotalTokens int64 `gorm:"default:100000" json:"total_tokens"`
|
||||
UsedTokens int64 `gorm:"default:0" json:"used_tokens"`
|
||||
ResetAt time.Time `json:"reset_at"`
|
||||
TokenLimit int64 `gorm:"default:1000" json:"token_limit"` // 单次请求限制
|
||||
}
|
||||
|
||||
// Conversation 对话模型
|
||||
type Conversation struct {
|
||||
BaseModel
|
||||
UserID uint `gorm:"index;not null" json:"user_id"`
|
||||
Title string `gorm:"size:200;default:'新对话'" json:"title"`
|
||||
Messages []Message `gorm:"foreignKey:ConversationID" json:"messages,omitempty"`
|
||||
TotalTokens int64 `gorm:"default:0" json:"total_tokens"`
|
||||
}
|
||||
|
||||
// Message 消息模型
|
||||
type Message struct {
|
||||
BaseModel
|
||||
ConversationID uint `gorm:"index;not null" json:"conversation_id"`
|
||||
Role string `gorm:"size:20;not null" json:"role"` // user, assistant
|
||||
Content string `gorm:"type:text;not null" json:"content"`
|
||||
Tokens int64 `gorm:"default:0" json:"tokens"`
|
||||
Model string `gorm:"size:50;default:'default'" json:"model"`
|
||||
}
|
||||
|
||||
// ChatRequest 聊天请求模型
|
||||
type ChatRequest struct {
|
||||
Message string `json:"message" binding:"required"`
|
||||
ConversationID uint `json:"conversation_id,omitempty"`
|
||||
}
|
||||
|
||||
// ChatResponse 聊天响应模型
|
||||
type ChatResponse struct {
|
||||
Response string `json:"response"`
|
||||
ConversationID uint `json:"conversation_id"`
|
||||
TokensUsed int64 `json:"tokens_used"`
|
||||
}
|
||||
|
||||
// UserResponse 用户响应模型(隐藏敏感信息)
|
||||
type UserResponse struct {
|
||||
ID uint `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Email string `json:"email"`
|
||||
IsAdmin bool `json:"is_admin"`
|
||||
IsActive bool `json:"is_active"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
Quota Quota `json:"quota"`
|
||||
}
|
||||
|
||||
// LoginRequest 登录请求模型
|
||||
type LoginRequest struct {
|
||||
Username string `json:"username" binding:"required"`
|
||||
Password string `json:"password" binding:"required"`
|
||||
}
|
||||
|
||||
// LoginResponse 登录响应模型
|
||||
type LoginResponse struct {
|
||||
Token string `json:"token"`
|
||||
User UserResponse `json:"user"`
|
||||
}
|
||||
|
||||
// RegisterRequest 注册请求模型
|
||||
type RegisterRequest struct {
|
||||
Username string `json:"username" binding:"required,min=3,max=50"`
|
||||
Email string `json:"email" binding:"required,email"`
|
||||
Password string `json:"password" binding:"required,min=6"`
|
||||
}
|
||||
|
||||
// QuotaUpdateRequest 配额更新请求模型
|
||||
type QuotaUpdateRequest struct {
|
||||
TotalTokens int64 `json:"total_tokens" binding:"required,min=0"`
|
||||
TokenLimit int64 `json:"token_limit" binding:"required,min=1"`
|
||||
}
|
||||
Reference in New Issue
Block a user