|
|
package model |
|
|
|
|
|
import ( |
|
|
"one-api/common" |
|
|
"strings" |
|
|
) |
|
|
|
|
|
type Ability struct { |
|
|
Group string `json:"group" gorm:"type:varchar(32);primaryKey;autoIncrement:false"` |
|
|
Model string `json:"model" gorm:"primaryKey;autoIncrement:false"` |
|
|
ChannelId int `json:"channel_id" gorm:"primaryKey;autoIncrement:false;index"` |
|
|
Enabled bool `json:"enabled"` |
|
|
} |
|
|
|
|
|
func GetRandomSatisfiedChannel(group string, model string) (*Channel, error) { |
|
|
ability := Ability{} |
|
|
var err error = nil |
|
|
if common.UsingSQLite { |
|
|
err = DB.Where("`group` = ? and model = ? and enabled = 1", group, model).Order("RANDOM()").Limit(1).First(&ability).Error |
|
|
} else { |
|
|
err = DB.Where("`group` = ? and model = ? and enabled = 1", group, model).Order("RAND()").Limit(1).First(&ability).Error |
|
|
} |
|
|
if err != nil { |
|
|
return nil, err |
|
|
} |
|
|
channel := Channel{} |
|
|
channel.Id = ability.ChannelId |
|
|
err = DB.First(&channel, "id = ?", ability.ChannelId).Error |
|
|
return &channel, err |
|
|
} |
|
|
|
|
|
func (channel *Channel) AddAbilities() error { |
|
|
models_ := strings.Split(channel.Models, ",") |
|
|
groups_ := strings.Split(channel.Group, ",") |
|
|
abilities := make([]Ability, 0, len(models_)) |
|
|
for _, model := range models_ { |
|
|
for _, group := range groups_ { |
|
|
ability := Ability{ |
|
|
Group: group, |
|
|
Model: model, |
|
|
ChannelId: channel.Id, |
|
|
Enabled: channel.Status == common.ChannelStatusEnabled, |
|
|
} |
|
|
abilities = append(abilities, ability) |
|
|
} |
|
|
} |
|
|
return DB.Create(&abilities).Error |
|
|
} |
|
|
|
|
|
func (channel *Channel) DeleteAbilities() error { |
|
|
return DB.Where("channel_id = ?", channel.Id).Delete(&Ability{}).Error |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (channel *Channel) UpdateAbilities() error { |
|
|
|
|
|
|
|
|
err := channel.DeleteAbilities() |
|
|
if err != nil { |
|
|
return err |
|
|
} |
|
|
|
|
|
err = channel.AddAbilities() |
|
|
if err != nil { |
|
|
return err |
|
|
} |
|
|
return nil |
|
|
} |
|
|
|
|
|
func UpdateAbilityStatus(channelId int, status bool) error { |
|
|
return DB.Model(&Ability{}).Where("channel_id = ?", channelId).Select("enabled").Update("enabled", status).Error |
|
|
} |
|
|
|