package models import ( "code.gitea.io/gitea/modules/timeutil" ) const ( PeriodNotCycle = "NOT_CYCLE" PeriodDaily = "DAILY" ) //PointTaskConfig Only add and delete are allowed, edit is not allowed //so if you want to edit config for some task code,please delete first and add new one type TaskConfig struct { ID int64 `xorm:"pk autoincr"` TaskCode string `xorm:"NOT NULL"` Tittle string AwardType string `xorm:"NOT NULL"` AwardAmount int64 `xorm:"NOT NULL"` CreatorId int64 `xorm:"NOT NULL"` CreatorName string CreatedUnix timeutil.TimeStamp `xorm:"created"` DeletedAt timeutil.TimeStamp `xorm:"deleted"` } type TaskConfigWithLimit struct { TaskCode string `binding:"Required;MaxSize(256)"` Tittle string AwardType string AwardAmount int64 `binding:"Required;MaxSize(256)"` Creator string CreatedUnix timeutil.TimeStamp Limiters []*LimitConfigVO } type BatchLimitConfigVO struct { ConfigList []TaskConfigWithLimit } func getTaskConfig(t *TaskConfig) (*TaskConfig, error) { has, err := x.Get(t) if err != nil { return nil, err } else if !has { return nil, ErrRecordNotExist{} } return t, nil } func GetTaskConfigByTaskCode(taskCode string) (*TaskConfig, error) { t := &TaskConfig{ TaskCode: taskCode, } return getTaskConfig(t) } func GetTaskConfigList() ([]*TaskConfig, error) { r := make([]*TaskConfig, 0) err := x.Find(&r) if err != nil { return nil, err } if len(r) == 0 { return nil, ErrRecordNotExist{} } return r, nil } func AddTaskConfig(config TaskConfigWithLimit, doer *User) error { sess := x.NewSession() defer sess.Close() //delete old task config p := &TaskConfig{ TaskCode: config.TaskCode, } _, err := sess.Delete(p) if err != nil { sess.Rollback() return err } //add new config t := &TaskConfig{ TaskCode: config.TaskCode, Tittle: config.Tittle, AwardType: config.AwardType, AwardAmount: config.AwardAmount, CreatorId: doer.ID, CreatorName: doer.Name, } _, err = sess.Insert(t) if err != nil { sess.Rollback() return err } //delete old limiter config lp := &LimitConfig{ LimitType: LimitTypeTask.Name(), LimitCode: config.TaskCode, } _, err = sess.Delete(lp) if err != nil { sess.Rollback() return err } //add new limiter config if config.Limiters != nil && len(config.Limiters) > 0 { for _, v := range config.Limiters { //add new config l := &LimitConfig{ Tittle: v.Tittle, RefreshRate: v.RefreshRate, Scope: v.Scope, LimitNum: v.LimitNum, LimitCode: config.TaskCode, LimitType: LimitTypeTask.Name(), CreatorId: doer.ID, CreatorName: doer.Name, } _, err = sess.Insert(l) if err != nil { sess.Rollback() return err } } } sess.Commit() return nil }