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

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