You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

limit_config.go 4.0 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package models
  2. import (
  3. "code.gitea.io/gitea/modules/timeutil"
  4. "xorm.io/builder"
  5. )
  6. type LimitType string
  7. const (
  8. LimitTypeTask LimitType = "TASK"
  9. LimitTypeRewardPoint LimitType = "REWARD_POINT"
  10. )
  11. func (l LimitType) Name() string {
  12. switch l {
  13. case LimitTypeTask:
  14. return "TASK"
  15. case LimitTypeRewardPoint:
  16. return "REWARD_POINT"
  17. default:
  18. return ""
  19. }
  20. }
  21. type LimitScope string
  22. const (
  23. LimitScopeAllUsers LimitScope = "ALL_USERS"
  24. LimitScopeSingleUser LimitScope = "SINGLE_USER"
  25. )
  26. func (l LimitScope) Name() string {
  27. switch l {
  28. case LimitScopeAllUsers:
  29. return "ALL_USERS"
  30. case LimitScopeSingleUser:
  31. return "SINGLE_USER"
  32. default:
  33. return ""
  34. }
  35. }
  36. type LimiterRejectPolicy string
  37. const (
  38. JustReject LimiterRejectPolicy = "JUST_REJECT"
  39. PermittedOnce LimiterRejectPolicy = "PERMITTED_ONCE"
  40. FillUp LimiterRejectPolicy = "FillUp"
  41. )
  42. type LimitConfig struct {
  43. ID int64 `xorm:"pk autoincr"`
  44. Title string
  45. RefreshRate string `xorm:"NOT NULL"`
  46. Scope string `xorm:"NOT NULL"`
  47. LimitNum int64 `xorm:"NOT NULL"`
  48. LimitCode string
  49. LimitType string `xorm:"NOT NULL"`
  50. RelatedId int64 `xorm:"INDEX"`
  51. CreatorId int64 `xorm:"NOT NULL"`
  52. CreatorName string
  53. DeleterId int64
  54. DeleterName string
  55. CreatedUnix timeutil.TimeStamp `xorm:"created"`
  56. DeletedAt timeutil.TimeStamp `xorm:"deleted"`
  57. }
  58. type LimitConfigQueryOpts struct {
  59. RefreshRate string
  60. Scope LimitScope
  61. LimitCode string
  62. LimitType LimitType
  63. }
  64. type LimitConfigVO struct {
  65. ID int64
  66. Title string
  67. RefreshRate string
  68. Scope string
  69. LimitNum int64
  70. LimitCode string
  71. LimitType string
  72. Creator string
  73. CreatedUnix timeutil.TimeStamp
  74. }
  75. func (l *LimitConfig) ToLimitConfigVO() *LimitConfigVO {
  76. return &LimitConfigVO{
  77. ID: l.ID,
  78. Title: l.Title,
  79. RefreshRate: l.RefreshRate,
  80. Scope: l.Scope,
  81. LimitNum: l.LimitNum,
  82. LimitCode: l.LimitCode,
  83. LimitType: l.LimitType,
  84. Creator: l.CreatorName,
  85. CreatedUnix: l.CreatedUnix,
  86. }
  87. }
  88. func GetLimitConfigByLimitType(limitType LimitType) ([]LimitConfig, error) {
  89. r := make([]LimitConfig, 0)
  90. err := x.Where(" limit_type = ?", limitType.Name()).Find(&r)
  91. if err != nil {
  92. return nil, err
  93. } else if len(r) == 0 {
  94. return nil, ErrRecordNotExist{}
  95. }
  96. return r, nil
  97. }
  98. func GetLimitersByRelatedIdWithDeleted(limitType LimitType) ([]LimitConfig, error) {
  99. r := make([]LimitConfig, 0)
  100. err := x.Unscoped().Where(" = ?", limitType.Name()).Find(&r)
  101. if err != nil {
  102. return nil, err
  103. } else if len(r) == 0 {
  104. return nil, ErrRecordNotExist{}
  105. }
  106. return r, nil
  107. }
  108. func AddLimitConfig(l *LimitConfig) error {
  109. sess := x.NewSession()
  110. defer sess.Close()
  111. //delete old limit config
  112. cond := builder.NewCond()
  113. cond = cond.And(builder.Eq{"limit_type": l.LimitType})
  114. cond = cond.And(builder.Eq{"scope": l.Scope})
  115. if l.LimitCode == "" {
  116. subCond := builder.NewCond()
  117. subCond = subCond.Or(builder.IsNull{"limit_code"})
  118. subCond = subCond.Or(builder.Eq{"limit_code": ""})
  119. cond = cond.And(subCond)
  120. } else {
  121. cond = cond.And(builder.Eq{"limit_code": l.LimitCode})
  122. }
  123. _, err := sess.Where(cond).Delete(&LimitConfig{})
  124. if err != nil {
  125. sess.Rollback()
  126. return err
  127. }
  128. //add new config
  129. _, err = sess.Insert(l)
  130. if err != nil {
  131. sess.Rollback()
  132. return err
  133. }
  134. sess.Commit()
  135. return nil
  136. }
  137. func DeleteLimitConfig(config LimitConfig, deleterId int64, deleterName string) error {
  138. sess := x.NewSession()
  139. defer sess.Close()
  140. _, err := x.ID(config.ID).Update(&LimitConfig{DeleterName: deleterName, DeleterId: deleterId})
  141. if err != nil {
  142. sess.Rollback()
  143. return err
  144. }
  145. _, err = x.ID(config.ID).Delete(&LimitConfig{})
  146. if err != nil {
  147. sess.Rollback()
  148. return err
  149. }
  150. sess.Commit()
  151. return nil
  152. }
  153. func GetLimitConfigById(id int64) (*LimitConfig, error) {
  154. r := &LimitConfig{}
  155. isOk, err := x.ID(id).Get(r)
  156. if err != nil {
  157. return nil, err
  158. } else if !isOk {
  159. return nil, nil
  160. }
  161. return r, nil
  162. }