ai-gateway/model/channel.go

101 lines
2.7 KiB
Go
Raw Normal View History

2023-04-22 12:39:27 +00:00
package model
import (
_ "gorm.io/driver/sqlite"
2023-04-23 10:24:11 +00:00
"one-api/common"
2023-04-22 12:39:27 +00:00
)
2023-04-22 13:41:16 +00:00
type Channel struct {
2023-04-23 03:31:00 +00:00
Id int `json:"id"`
Type int `json:"type" gorm:"default:0"`
2023-04-23 10:24:11 +00:00
Key string `json:"key" gorm:"not null"`
2023-04-23 03:31:00 +00:00
Status int `json:"status" gorm:"default:1"`
2023-04-23 07:42:23 +00:00
Name string `json:"name" gorm:"index"`
2023-04-23 03:31:00 +00:00
Weight int `json:"weight"`
CreatedTime int64 `json:"created_time" gorm:"bigint"`
TestTime int64 `json:"test_time" gorm:"bigint"`
ResponseTime int `json:"response_time"` // in milliseconds
2023-04-23 12:35:49 +00:00
BaseURL string `json:"base_url" gorm:"column:base_url"`
Other string `json:"other"`
2023-04-22 12:39:27 +00:00
}
func GetAllChannels(startIdx int, num int, selectAll bool) ([]*Channel, error) {
2023-04-22 14:02:59 +00:00
var channels []*Channel
2023-04-22 12:39:27 +00:00
var err error
if selectAll {
err = DB.Order("id desc").Find(&channels).Error
} else {
err = DB.Order("id desc").Limit(num).Offset(startIdx).Omit("key").Find(&channels).Error
}
2023-04-22 14:02:59 +00:00
return channels, err
2023-04-22 12:39:27 +00:00
}
2023-04-22 14:02:59 +00:00
func SearchChannels(keyword string) (channels []*Channel, err error) {
2023-04-23 03:31:00 +00:00
err = DB.Omit("key").Where("id = ? or name LIKE ?", keyword, keyword+"%").Find(&channels).Error
2023-04-22 14:02:59 +00:00
return channels, err
2023-04-22 12:39:27 +00:00
}
2023-04-23 10:24:11 +00:00
func GetChannelById(id int, selectAll bool) (*Channel, error) {
2023-04-22 14:02:59 +00:00
channel := Channel{Id: id}
var err error = nil
2023-04-23 10:24:11 +00:00
if selectAll {
err = DB.First(&channel, "id = ?", id).Error
} else {
err = DB.Omit("key").First(&channel, "id = ?", id).Error
}
return &channel, err
}
func GetRandomChannel() (*Channel, error) {
// TODO: consider weight
channel := Channel{}
var err error = nil
if common.UsingSQLite {
err = DB.Where("status = ?", common.ChannelStatusEnabled).Order("RANDOM()").Limit(1).First(&channel).Error
} else {
err = DB.Where("status = ?", common.ChannelStatusEnabled).Order("RAND()").Limit(1).First(&channel).Error
}
2023-04-22 14:02:59 +00:00
return &channel, err
}
func BatchInsertChannels(channels []Channel) error {
var err error
err = DB.Create(&channels).Error
return err
}
2023-04-22 14:02:59 +00:00
func (channel *Channel) Insert() error {
2023-04-22 12:39:27 +00:00
var err error
2023-04-22 14:02:59 +00:00
err = DB.Create(channel).Error
2023-04-22 12:39:27 +00:00
return err
}
2023-04-22 14:02:59 +00:00
func (channel *Channel) Update() error {
2023-04-22 12:39:27 +00:00
var err error
2023-04-22 14:02:59 +00:00
err = DB.Model(channel).Updates(channel).Error
2023-04-22 12:39:27 +00:00
return err
}
func (channel *Channel) UpdateResponseTime(responseTime int64) {
err := DB.Model(channel).Select("response_time", "test_time").Updates(Channel{
TestTime: common.GetTimestamp(),
ResponseTime: int(responseTime),
}).Error
if err != nil {
common.SysError("failed to update response time: " + err.Error())
}
}
func (channel *Channel) UpdateStatus(status int) {
err := DB.Model(channel).Update("status", status).Error
if err != nil {
common.SysError("failed to update response time: " + err.Error())
}
}
2023-04-22 14:02:59 +00:00
func (channel *Channel) Delete() error {
var err error
err = DB.Delete(channel).Error
return err
2023-04-22 12:39:27 +00:00
}