groupmodel.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package model
  2. import (
  3. "errors"
  4. log "github.com/sirupsen/logrus"
  5. "gorm.io/gorm"
  6. )
  7. const (
  8. GroupModelConfigCacheKey = "group_model_config"
  9. )
  10. type GroupModelConfig struct {
  11. GroupID string `gorm:"primaryKey" json:"group_id"`
  12. Group *Group `gorm:"foreignKey:GroupID" json:"-"`
  13. Model string `gorm:"primaryKey" json:"model"`
  14. OverrideLimit bool `json:"override_limit"`
  15. RPM int64 `json:"rpm"`
  16. TPM int64 `json:"tpm"`
  17. OverridePrice bool `json:"override_price"`
  18. ImagePrices map[string]float64 `json:"image_prices,omitempty" gorm:"serializer:fastjson;type:text"`
  19. Price Price `json:"price,omitempty" gorm:"embedded"`
  20. OverrideRetryTimes bool `json:"override_retry_times"`
  21. RetryTimes int64 `json:"retry_times"`
  22. OverrideForceSaveDetail bool `json:"override_force_save_detail"`
  23. ForceSaveDetail bool `json:"force_save_detail"`
  24. }
  25. func (g *GroupModelConfig) BeforeSave(_ *gorm.DB) (err error) {
  26. if g.Model == "" {
  27. return errors.New("model is required")
  28. }
  29. if err := g.Price.ValidateConditionalPrices(); err != nil {
  30. return err
  31. }
  32. return nil
  33. }
  34. func SaveGroupModelConfig(groupModelConfig GroupModelConfig) (err error) {
  35. defer func() {
  36. if err == nil {
  37. if err := CacheDeleteGroup(groupModelConfig.GroupID); err != nil {
  38. log.Error("cache delete group failed: " + err.Error())
  39. }
  40. }
  41. }()
  42. return DB.Save(&groupModelConfig).Error
  43. }
  44. func UpdateGroupModelConfig(groupModelConfig GroupModelConfig) (err error) {
  45. defer func() {
  46. if err == nil {
  47. if err := CacheDeleteGroup(groupModelConfig.GroupID); err != nil {
  48. log.Error("cache delete group failed: " + err.Error())
  49. }
  50. }
  51. }()
  52. return HandleNotFound(
  53. DB.Model(&groupModelConfig).Updates(groupModelConfig).Error,
  54. GroupModelConfigCacheKey,
  55. )
  56. }
  57. func SaveGroupModelConfigs(groupID string, groupModelConfigs []GroupModelConfig) (err error) {
  58. defer func() {
  59. if err == nil {
  60. if err := CacheDeleteGroup(groupID); err != nil {
  61. log.Error("cache delete group failed: " + err.Error())
  62. }
  63. }
  64. }()
  65. return DB.Transaction(func(tx *gorm.DB) error {
  66. for _, groupModelConfig := range groupModelConfigs {
  67. groupModelConfig.GroupID = groupID
  68. if err := tx.Save(&groupModelConfig).Error; err != nil {
  69. return err
  70. }
  71. }
  72. return nil
  73. })
  74. }
  75. func UpdateGroupModelConfigs(groupID string, groupModelConfigs []GroupModelConfig) (err error) {
  76. defer func() {
  77. if err == nil {
  78. if err := CacheDeleteGroup(groupID); err != nil {
  79. log.Error("cache delete group failed: " + err.Error())
  80. }
  81. }
  82. }()
  83. return DB.Transaction(func(tx *gorm.DB) error {
  84. for _, groupModelConfig := range groupModelConfigs {
  85. groupModelConfig.GroupID = groupID
  86. if err := HandleNotFound(
  87. tx.Model(&groupModelConfig).Updates(groupModelConfig).Error,
  88. GroupModelConfigCacheKey,
  89. ); err != nil {
  90. return err
  91. }
  92. }
  93. return nil
  94. })
  95. }
  96. func DeleteGroupModelConfig(groupID, model string) error {
  97. err := DB.
  98. Where("group_id = ? AND model = ?", groupID, model).
  99. Delete(&GroupModelConfig{}).
  100. Error
  101. return HandleNotFound(err, GroupModelConfigCacheKey)
  102. }
  103. func DeleteGroupModelConfigs(groupID string, models []string) error {
  104. return DB.Where("group_id = ? AND model IN ?", groupID, models).
  105. Delete(&GroupModelConfig{}).
  106. Error
  107. }
  108. func GetGroupModelConfigs(groupID string) ([]GroupModelConfig, error) {
  109. var groupModelConfigs []GroupModelConfig
  110. err := DB.Where("group_id = ?", groupID).Find(&groupModelConfigs).Error
  111. return groupModelConfigs, HandleNotFound(err, GroupModelConfigCacheKey)
  112. }
  113. func GetGroupModelConfig(groupID, model string) (*GroupModelConfig, error) {
  114. var groupModelConfig GroupModelConfig
  115. err := DB.Where("group_id = ? AND model = ?", groupID, model).First(&groupModelConfig).Error
  116. return &groupModelConfig, HandleNotFound(err, GroupModelConfigCacheKey)
  117. }