| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package model
- import (
- "errors"
- log "github.com/sirupsen/logrus"
- "gorm.io/gorm"
- )
- const (
- GroupModelConfigCacheKey = "group_model_config"
- )
- type GroupModelConfig struct {
- GroupID string `gorm:"primaryKey" json:"group_id"`
- Group *Group `gorm:"foreignKey:GroupID" json:"-"`
- Model string `gorm:"primaryKey" json:"model"`
- OverrideLimit bool `json:"override_limit"`
- RPM int64 `json:"rpm"`
- TPM int64 `json:"tpm"`
- OverridePrice bool `json:"override_price"`
- ImagePrices map[string]float64 `json:"image_prices,omitempty" gorm:"serializer:fastjson;type:text"`
- Price Price `json:"price,omitempty" gorm:"embedded"`
- OverrideRetryTimes bool `json:"override_retry_times"`
- RetryTimes int64 `json:"retry_times"`
- OverrideForceSaveDetail bool `json:"override_force_save_detail"`
- ForceSaveDetail bool `json:"force_save_detail"`
- }
- func (g *GroupModelConfig) BeforeSave(_ *gorm.DB) (err error) {
- if g.Model == "" {
- return errors.New("model is required")
- }
- if err := g.Price.ValidateConditionalPrices(); err != nil {
- return err
- }
- return nil
- }
- func SaveGroupModelConfig(groupModelConfig GroupModelConfig) (err error) {
- defer func() {
- if err == nil {
- if err := CacheDeleteGroup(groupModelConfig.GroupID); err != nil {
- log.Error("cache delete group failed: " + err.Error())
- }
- }
- }()
- return DB.Save(&groupModelConfig).Error
- }
- func UpdateGroupModelConfig(groupModelConfig GroupModelConfig) (err error) {
- defer func() {
- if err == nil {
- if err := CacheDeleteGroup(groupModelConfig.GroupID); err != nil {
- log.Error("cache delete group failed: " + err.Error())
- }
- }
- }()
- return HandleNotFound(
- DB.Model(&groupModelConfig).Updates(groupModelConfig).Error,
- GroupModelConfigCacheKey,
- )
- }
- func SaveGroupModelConfigs(groupID string, groupModelConfigs []GroupModelConfig) (err error) {
- defer func() {
- if err == nil {
- if err := CacheDeleteGroup(groupID); err != nil {
- log.Error("cache delete group failed: " + err.Error())
- }
- }
- }()
- return DB.Transaction(func(tx *gorm.DB) error {
- for _, groupModelConfig := range groupModelConfigs {
- groupModelConfig.GroupID = groupID
- if err := tx.Save(&groupModelConfig).Error; err != nil {
- return err
- }
- }
- return nil
- })
- }
- func UpdateGroupModelConfigs(groupID string, groupModelConfigs []GroupModelConfig) (err error) {
- defer func() {
- if err == nil {
- if err := CacheDeleteGroup(groupID); err != nil {
- log.Error("cache delete group failed: " + err.Error())
- }
- }
- }()
- return DB.Transaction(func(tx *gorm.DB) error {
- for _, groupModelConfig := range groupModelConfigs {
- groupModelConfig.GroupID = groupID
- if err := HandleNotFound(
- tx.Model(&groupModelConfig).Updates(groupModelConfig).Error,
- GroupModelConfigCacheKey,
- ); err != nil {
- return err
- }
- }
- return nil
- })
- }
- func DeleteGroupModelConfig(groupID, model string) error {
- err := DB.
- Where("group_id = ? AND model = ?", groupID, model).
- Delete(&GroupModelConfig{}).
- Error
- return HandleNotFound(err, GroupModelConfigCacheKey)
- }
- func DeleteGroupModelConfigs(groupID string, models []string) error {
- return DB.Where("group_id = ? AND model IN ?", groupID, models).
- Delete(&GroupModelConfig{}).
- Error
- }
- func GetGroupModelConfigs(groupID string) ([]GroupModelConfig, error) {
- var groupModelConfigs []GroupModelConfig
- err := DB.Where("group_id = ?", groupID).Find(&groupModelConfigs).Error
- return groupModelConfigs, HandleNotFound(err, GroupModelConfigCacheKey)
- }
- func GetGroupModelConfig(groupID, model string) (*GroupModelConfig, error) {
- var groupModelConfig GroupModelConfig
- err := DB.Where("group_id = ? AND model = ?", groupID, model).First(&groupModelConfig).Error
- return &groupModelConfig, HandleNotFound(err, GroupModelConfigCacheKey)
- }
|