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