|
|
package database |
|
|
|
|
|
import ( |
|
|
"os" |
|
|
"time" |
|
|
|
|
|
"gorm.io/gorm" |
|
|
) |
|
|
|
|
|
type ModelParams struct { |
|
|
BaseUrl string `json:"base_url"` |
|
|
Token string `json:"token"` |
|
|
Model string `json:"model"` |
|
|
Limit int `json:"limit"` |
|
|
} |
|
|
|
|
|
|
|
|
type Model struct { |
|
|
ModelID string `gorm:"primaryKey;column:model_id" json:"model_id"` |
|
|
Username string `gorm:"column:username;not null" json:"username"` |
|
|
ModelName string `gorm:"column:model_name;not null" json:"model_name"` |
|
|
Token string `gorm:"column:token;not null" json:"token"` |
|
|
BaseURL string `gorm:"column:base_url;not null" json:"base_url"` |
|
|
Note string `gorm:"column:note" json:"note"` |
|
|
Limit int `gorm:"column:limit" json:"limit"` |
|
|
CreatedAt int64 `gorm:"column:created_at;not null" json:"created_at"` |
|
|
UpdatedAt int64 `gorm:"column:updated_at;not null" json:"updated_at"` |
|
|
|
|
|
|
|
|
User User `gorm:"foreignKey:Username" json:"user"` |
|
|
} |
|
|
|
|
|
|
|
|
type ModelStore struct { |
|
|
db *gorm.DB |
|
|
} |
|
|
|
|
|
|
|
|
func NewModelStore(db *gorm.DB) *ModelStore { |
|
|
return &ModelStore{db: db} |
|
|
} |
|
|
|
|
|
|
|
|
func (s *ModelStore) Init() error { |
|
|
return s.db.AutoMigrate(&Model{}) |
|
|
} |
|
|
|
|
|
|
|
|
func (s *ModelStore) CreateModel(model *Model) error { |
|
|
now := time.Now().UnixMilli() |
|
|
model.CreatedAt = now |
|
|
model.UpdatedAt = now |
|
|
return s.db.Create(model).Error |
|
|
} |
|
|
|
|
|
|
|
|
func (s *ModelStore) GetModel(modelID string) (*Model, error) { |
|
|
var model Model |
|
|
err := s.db.Preload("User").First(&model, "model_id = ?", modelID).Error |
|
|
if err != nil { |
|
|
return nil, err |
|
|
} |
|
|
return &model, nil |
|
|
} |
|
|
|
|
|
|
|
|
func (s *ModelStore) GetModelByUser(modelID string, username string) (*Model, error) { |
|
|
var model Model |
|
|
err := s.db.Preload("User").First(&model, "model_id = ? AND username = ?", modelID, username).Error |
|
|
if err != nil { |
|
|
return nil, err |
|
|
} |
|
|
return &model, nil |
|
|
} |
|
|
|
|
|
|
|
|
func (s *ModelStore) GetAllModels() ([]*Model, error) { |
|
|
var models []*Model |
|
|
err := s.db.Preload("User").Order("created_at DESC").Find(&models).Error |
|
|
if err != nil { |
|
|
return nil, err |
|
|
} |
|
|
return models, nil |
|
|
} |
|
|
|
|
|
|
|
|
func (s *ModelStore) GetUserModels(username string) ([]*Model, error) { |
|
|
var models []*Model |
|
|
err := s.db.Preload("User").Where("username = ?", username).Order("created_at DESC").Find(&models).Error |
|
|
if err != nil { |
|
|
return nil, err |
|
|
} |
|
|
return models, nil |
|
|
} |
|
|
|
|
|
|
|
|
func (s *ModelStore) UpdateModel(modelID string, username string, updates map[string]interface{}) error { |
|
|
|
|
|
updates["updated_at"] = time.Now().UnixMilli() |
|
|
return s.db.Model(&Model{}).Where("model_id = ? AND username = ?", modelID, username).Updates(updates).Error |
|
|
} |
|
|
|
|
|
|
|
|
func (s *ModelStore) DeleteModel(modelID string, username string) error { |
|
|
return s.db.Delete(&Model{}, "model_id = ? AND username = ?", modelID, username).Error |
|
|
} |
|
|
|
|
|
|
|
|
func (s *ModelStore) BatchDeleteModels(modelIDs []string, username string) (int64, error) { |
|
|
result := s.db.Delete(&Model{}, "model_id IN ? AND username = ?", modelIDs, username) |
|
|
return result.RowsAffected, result.Error |
|
|
} |
|
|
|
|
|
|
|
|
func (s *ModelStore) CheckModelExists(modelID string) (bool, error) { |
|
|
var count int64 |
|
|
err := s.db.Model(&Model{}).Where("model_id = ?", modelID).Count(&count).Error |
|
|
return count > 0, err |
|
|
} |
|
|
|
|
|
|
|
|
func (s *ModelStore) CheckModelExistsByUser(modelID string, username string) (bool, error) { |
|
|
var count int64 |
|
|
err := s.db.Model(&Model{}).Where("model_id = ? AND username = ?", modelID, username).Count(&count).Error |
|
|
return count > 0, err |
|
|
} |
|
|
|
|
|
func (s *ModelStore) AutoAddModels() { |
|
|
|
|
|
if s.db == nil { |
|
|
return |
|
|
} |
|
|
var count int64 |
|
|
s.db.Model(&Model{}).Count(&count) |
|
|
if count == 0 { |
|
|
model := os.Getenv("MODEL") |
|
|
token := os.Getenv("TOKEN") |
|
|
baseUrl := os.Getenv("BASE_URL") |
|
|
if model != "" && token != "" && baseUrl != "" { |
|
|
s.CreateModel(&Model{ |
|
|
ModelID: "system_default", |
|
|
Username: "", |
|
|
ModelName: model, |
|
|
Token: token, |
|
|
BaseURL: baseUrl, |
|
|
Note: "系统默认内置", |
|
|
CreatedAt: time.Now().UnixMilli(), |
|
|
UpdatedAt: time.Now().UnixMilli(), |
|
|
}) |
|
|
} |
|
|
} |
|
|
} |
|
|
|