| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- 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
- }
- // UpdateAbilities updates abilities of this channel.
- // Make sure the channel is completed before calling this function.
- func (channel *Channel) UpdateAbilities() error {
- // A quick and dirty way to update abilities
- // First delete all abilities of this channel
- err := channel.DeleteAbilities()
- if err != nil {
- return err
- }
- // Then add new abilities
- 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
- }
|