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 3.8 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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. Tittle 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 LimitConfigVO struct {
  59. ID int64
  60. Tittle string
  61. RefreshRate string
  62. Scope string
  63. LimitNum int64
  64. LimitCode string
  65. LimitType string
  66. Creator string
  67. CreatedUnix timeutil.TimeStamp
  68. }
  69. func (l *LimitConfig) ToLimitConfigVO() *LimitConfigVO {
  70. return &LimitConfigVO{
  71. ID: l.ID,
  72. Tittle: l.Tittle,
  73. RefreshRate: l.RefreshRate,
  74. Scope: l.Scope,
  75. LimitNum: l.LimitNum,
  76. LimitCode: l.LimitCode,
  77. LimitType: l.LimitType,
  78. Creator: l.CreatorName,
  79. CreatedUnix: l.CreatedUnix,
  80. }
  81. }
  82. func GetLimitConfigByLimitType(limitType LimitType) ([]LimitConfig, error) {
  83. r := make([]LimitConfig, 0)
  84. err := x.Where(" limit_type = ?", limitType.Name()).Find(&r)
  85. if err != nil {
  86. return nil, err
  87. } else if len(r) == 0 {
  88. return nil, ErrRecordNotExist{}
  89. }
  90. return r, nil
  91. }
  92. func GetLimitersByRelatedIdWithDeleted(limitType LimitType) ([]LimitConfig, error) {
  93. r := make([]LimitConfig, 0)
  94. err := x.Unscoped().Where(" = ?", limitType.Name()).Find(&r)
  95. if err != nil {
  96. return nil, err
  97. } else if len(r) == 0 {
  98. return nil, ErrRecordNotExist{}
  99. }
  100. return r, nil
  101. }
  102. func AddLimitConfig(l *LimitConfig) error {
  103. sess := x.NewSession()
  104. defer sess.Close()
  105. //delete old limit config
  106. cond := builder.NewCond()
  107. cond = cond.And(builder.Eq{"limit_type": l.LimitType})
  108. cond = cond.And(builder.Eq{"scope": l.Scope})
  109. if l.LimitCode == "" {
  110. subCond := builder.NewCond()
  111. subCond = subCond.Or(builder.IsNull{"limit_code"})
  112. subCond = subCond.Or(builder.Eq{"limit_code": ""})
  113. cond = cond.And(subCond)
  114. } else {
  115. cond = cond.And(builder.Eq{"limit_code": l.LimitCode})
  116. }
  117. _, err := sess.Where(cond).Delete(&LimitConfig{})
  118. if err != nil {
  119. sess.Rollback()
  120. return err
  121. }
  122. //add new config
  123. _, err = sess.Insert(l)
  124. if err != nil {
  125. sess.Rollback()
  126. return err
  127. }
  128. sess.Commit()
  129. return nil
  130. }
  131. func DeleteLimitConfig(config LimitConfig, deleterId int64, deleterName string) error {
  132. sess := x.NewSession()
  133. defer sess.Close()
  134. _, err := x.ID(config.ID).Update(&LimitConfig{DeleterName: deleterName, DeleterId: deleterId})
  135. if err != nil {
  136. sess.Rollback()
  137. return err
  138. }
  139. _, err = x.ID(config.ID).Delete(&LimitConfig{})
  140. if err != nil {
  141. sess.Rollback()
  142. return err
  143. }
  144. sess.Commit()
  145. return nil
  146. }
  147. func GetLimitConfigById(id int64) (*LimitConfig, error) {
  148. r := &LimitConfig{}
  149. isOk, err := x.ID(id).Get(r)
  150. if err != nil {
  151. return nil, err
  152. } else if !isOk {
  153. return nil, nil
  154. }
  155. return r, nil
  156. }