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.

task_config.go 5.9 kB

3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package models
  2. import (
  3. "code.gitea.io/gitea/modules/timeutil"
  4. )
  5. const (
  6. PeriodNotCycle = "NOT_CYCLE"
  7. PeriodDaily = "DAILY"
  8. )
  9. //PointTaskConfig Only add and delete are allowed, edit is not allowed
  10. //so if you want to edit config for some task code,please delete first and add new one
  11. type TaskConfig struct {
  12. ID int64 `xorm:"pk autoincr"`
  13. TaskCode string `xorm:"NOT NULL"`
  14. Tittle string
  15. AwardType string `xorm:"NOT NULL"`
  16. AwardAmount int64 `xorm:"NOT NULL"`
  17. CreatorId int64 `xorm:"NOT NULL"`
  18. CreatorName string
  19. CreatedUnix timeutil.TimeStamp `xorm:"created"`
  20. DeletedAt timeutil.TimeStamp `xorm:"deleted"`
  21. DeleterId int64
  22. DeleterName string
  23. }
  24. type TaskConfigWithLimit struct {
  25. ID int64
  26. TaskCode string
  27. Tittle string
  28. AwardType string
  29. AwardAmount int64
  30. Creator string
  31. IsDeleted bool
  32. CreatedUnix timeutil.TimeStamp
  33. DeleteAt timeutil.TimeStamp
  34. Limiters []*LimitConfigVO
  35. }
  36. type TaskConfigWithLimitResponse struct {
  37. Records []*TaskConfigWithSingleLimit
  38. Total int64
  39. PageSize int
  40. Page int
  41. }
  42. type TaskConfigWithSingleLimit struct {
  43. ID int64
  44. TaskCode string
  45. AwardType string
  46. AwardAmount int64
  47. Creator string
  48. IsDeleted bool
  49. CreatedUnix timeutil.TimeStamp
  50. DeleteAt timeutil.TimeStamp
  51. RefreshRate string
  52. LimitNum int64
  53. }
  54. type TaskAndLimiterConfig struct {
  55. TaskConfig TaskConfig `xorm:"extends"`
  56. LimitConfig LimitConfig `xorm:"extends"`
  57. }
  58. func (TaskAndLimiterConfig) TableName() string {
  59. return "task_config"
  60. }
  61. type BatchLimitConfigVO struct {
  62. ConfigList []TaskConfigWithLimit
  63. }
  64. func getTaskConfig(t *TaskConfig) (*TaskConfig, error) {
  65. has, err := x.Get(t)
  66. if err != nil {
  67. return nil, err
  68. } else if !has {
  69. return nil, ErrRecordNotExist{}
  70. }
  71. return t, nil
  72. }
  73. func GetTaskConfigByTaskCode(taskCode string) (*TaskConfig, error) {
  74. t := &TaskConfig{
  75. TaskCode: taskCode,
  76. }
  77. return getTaskConfig(t)
  78. }
  79. func GetTaskConfigByID(id int64) (*TaskConfig, error) {
  80. t := &TaskConfig{
  81. ID: id,
  82. }
  83. return getTaskConfig(t)
  84. }
  85. func GetTaskConfigList() ([]*TaskConfig, error) {
  86. r := make([]*TaskConfig, 0)
  87. err := x.Find(&r)
  88. if err != nil {
  89. return nil, err
  90. }
  91. if len(r) == 0 {
  92. return nil, ErrRecordNotExist{}
  93. }
  94. return r, nil
  95. }
  96. func GetTaskConfigPageWithDeleted(opt ListOptions) ([]*TaskAndLimiterConfig, int64, error) {
  97. if opt.Page <= 0 {
  98. opt.Page = 1
  99. }
  100. n, err := x.Unscoped().Count(&TaskConfig{})
  101. if err != nil {
  102. return nil, 0, err
  103. }
  104. r := make([]*TaskAndLimiterConfig, 0)
  105. err = x.Join("LEFT", "limit_config", "task_config.id = limit_config.related_id").Unscoped().Limit(opt.PageSize, (opt.Page-1)*opt.PageSize).OrderBy("task_config.deleted_at desc,task_config.id desc").Find(&r)
  106. if len(r) == 0 {
  107. return nil, 0, ErrRecordNotExist{}
  108. }
  109. return r, n, nil
  110. }
  111. func EditTaskConfig(config TaskConfigWithLimit, doer *User) error {
  112. sess := x.NewSession()
  113. defer sess.Close()
  114. //delete old task config
  115. p := &TaskConfig{
  116. ID: config.ID,
  117. }
  118. _, err := sess.Delete(p)
  119. if err != nil {
  120. sess.Rollback()
  121. return err
  122. }
  123. //update deleter
  124. p.DeleterId = doer.ID
  125. p.DeleterName = doer.Name
  126. sess.Where("id = ?", config.ID).Unscoped().Update(p)
  127. //add new config
  128. t := &TaskConfig{
  129. TaskCode: config.TaskCode,
  130. Tittle: config.Tittle,
  131. AwardType: config.AwardType,
  132. AwardAmount: config.AwardAmount,
  133. CreatorId: doer.ID,
  134. CreatorName: doer.Name,
  135. }
  136. _, err = sess.InsertOne(t)
  137. if err != nil {
  138. sess.Rollback()
  139. return err
  140. }
  141. //delete old limiter config
  142. lp := &LimitConfig{
  143. RelatedId: config.ID,
  144. }
  145. _, err = sess.Delete(lp)
  146. if err != nil {
  147. sess.Rollback()
  148. return err
  149. }
  150. lp.DeleterName = doer.Name
  151. lp.DeleterId = doer.ID
  152. //update deleter
  153. sess.Where("related_id = ?", config.ID).Unscoped().Update(lp)
  154. //add new limiter config
  155. if config.Limiters != nil && len(config.Limiters) > 0 {
  156. for _, v := range config.Limiters {
  157. //add new config
  158. l := &LimitConfig{
  159. Tittle: v.Tittle,
  160. RefreshRate: v.RefreshRate,
  161. Scope: v.Scope,
  162. LimitNum: v.LimitNum,
  163. LimitCode: config.TaskCode,
  164. LimitType: LimitTypeTask.Name(),
  165. CreatorId: doer.ID,
  166. CreatorName: doer.Name,
  167. RelatedId: t.ID,
  168. }
  169. _, err = sess.Insert(l)
  170. if err != nil {
  171. sess.Rollback()
  172. return err
  173. }
  174. }
  175. }
  176. sess.Commit()
  177. return nil
  178. }
  179. func NewTaskConfig(config TaskConfigWithLimit, doer *User) error {
  180. sess := x.NewSession()
  181. defer sess.Close()
  182. //add new config
  183. t := &TaskConfig{
  184. TaskCode: config.TaskCode,
  185. Tittle: config.Tittle,
  186. AwardType: config.AwardType,
  187. AwardAmount: config.AwardAmount,
  188. CreatorId: doer.ID,
  189. CreatorName: doer.Name,
  190. }
  191. _, err := sess.InsertOne(t)
  192. if err != nil {
  193. sess.Rollback()
  194. return err
  195. }
  196. //add new limiter config
  197. if config.Limiters != nil && len(config.Limiters) > 0 {
  198. for _, v := range config.Limiters {
  199. //add new config
  200. l := &LimitConfig{
  201. RelatedId: t.ID,
  202. Tittle: v.Tittle,
  203. RefreshRate: v.RefreshRate,
  204. Scope: v.Scope,
  205. LimitNum: v.LimitNum,
  206. LimitCode: config.TaskCode,
  207. LimitType: LimitTypeTask.Name(),
  208. CreatorId: doer.ID,
  209. CreatorName: doer.Name,
  210. }
  211. _, err = sess.Insert(l)
  212. if err != nil {
  213. sess.Rollback()
  214. return err
  215. }
  216. }
  217. }
  218. sess.Commit()
  219. return nil
  220. }
  221. func DelTaskConfig(id int64, doer *User) error {
  222. sess := x.NewSession()
  223. defer sess.Close()
  224. //delete old task config
  225. p := &TaskConfig{
  226. ID: id,
  227. }
  228. _, err := sess.Delete(p)
  229. if err != nil {
  230. sess.Rollback()
  231. return err
  232. }
  233. //update deleter
  234. p.DeleterId = doer.ID
  235. p.DeleterName = doer.Name
  236. sess.Where("id = ?", id).Unscoped().Update(p)
  237. //delete old limiter config
  238. lp := &LimitConfig{
  239. RelatedId: id,
  240. }
  241. _, err = sess.Delete(lp)
  242. if err != nil {
  243. sess.Rollback()
  244. return err
  245. }
  246. lp.DeleterName = doer.Name
  247. lp.DeleterId = doer.ID
  248. //update deleter
  249. sess.Where("related_id = ?", id).Unscoped().Update(lp)
  250. sess.Commit()
  251. return nil
  252. }