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 2.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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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. CreatedUnix timeutil.TimeStamp `xorm:"created"`
  53. DeletedAt timeutil.TimeStamp `xorm:"deleted"`
  54. }
  55. type LimitConfigVO struct {
  56. Tittle string
  57. RefreshRate string
  58. Scope string
  59. LimitNum int64
  60. LimitCode string
  61. Creator string
  62. CreatedUnix timeutil.TimeStamp
  63. }
  64. func (l *LimitConfig) ToLimitConfigVO() *LimitConfigVO {
  65. return &LimitConfigVO{
  66. Tittle: l.Tittle,
  67. RefreshRate: l.RefreshRate,
  68. Scope: l.Scope,
  69. LimitNum: l.LimitNum,
  70. LimitCode: l.LimitCode,
  71. Creator: l.CreatorName,
  72. CreatedUnix: l.CreatedUnix,
  73. }
  74. }
  75. func GetLimitConfigByLimitType(limitType LimitType) ([]LimitConfig, error) {
  76. r := make([]LimitConfig, 0)
  77. err := x.Where(" limit_type = ?", limitType.Name()).Find(&r)
  78. if err != nil {
  79. return nil, err
  80. } else if len(r) == 0 {
  81. return nil, ErrRecordNotExist{}
  82. }
  83. return r, nil
  84. }
  85. func AddLimitConfig(l *LimitConfig) error {
  86. sess := x.NewSession()
  87. defer sess.Close()
  88. //delete old limit config
  89. cond := builder.NewCond()
  90. cond = cond.And(builder.Eq{"limit_type": l.LimitType})
  91. cond = cond.And(builder.Eq{"scope": l.Scope})
  92. if l.LimitCode == "" {
  93. subCond := builder.NewCond()
  94. subCond = subCond.Or(builder.IsNull{"limit_code"})
  95. subCond = subCond.Or(builder.Eq{"limit_code": ""})
  96. cond = cond.And(subCond)
  97. } else {
  98. cond = cond.And(builder.Eq{"limit_code": l.LimitCode})
  99. }
  100. _, err := sess.Where(cond).Delete(&LimitConfig{})
  101. if err != nil {
  102. sess.Rollback()
  103. return err
  104. }
  105. //add new config
  106. _, err = sess.Insert(l)
  107. if err != nil {
  108. sess.Rollback()
  109. return err
  110. }
  111. sess.Commit()
  112. return nil
  113. }