package models import ( "code.gitea.io/gitea/modules/timeutil" ) const ( TaskTypeNewIssue = "NEW_ISSUE" TaskTypeIssueChangeStatus = "ISSUE_CHANGE_STATUS" TaskTypeCreateIssueComment = "CREATE_ISSUE_COMMENT" TaskTypeNewPullRequest = "NEW_PULL_REQUEST" TaskTypeRenameRepository = "RENAME_REPOSITORY" TaskTypeAliasRepository = "ALIAS_REPOSITORY" TaskTypeTransferRepository = "TRANSFER_REPOSITORY" TaskTypeCreateRepository = "CREATE_REPOSITORY" TaskTypeCreatePublicRepository = "CREATE_PUBLIC_REPOSITORY" TaskTypeForkRepository = "FORK_REPOSITORY" TaskTypePullRequestReview = "PULL_REQUEST_REVIEW" TaskTypeCommentPull = "COMMENT_PULL" TaskTypeApprovePullRequest = "APPROVE_PULL_REQUEST" TaskTypeRejectPullRequest = "REJECT_PULL_REQUEST" TaskTypeMergePullRequest = "MERGE_PULL_REQUEST" TaskTypeSyncPushCommits = "SYNC_PUSH_COMMITS" TaskTypeSyncCreateRef = "SYNC_CREATE_REF" TaskTypeSyncDeleteRef = "SYNC_DELETE_REF" TaskTypeBindWechat = "BIND_WECHAT" TaskTypeUploadAttachment = "UPLOAD_ATTACHMENT" TaskTypeCreateCloudbrainTask = "CREATE_CLOUDBRAIN_TASK" TaskTypeDatasetRecommended = "DATASET_RECOMMENDED" TaskTypeCreateModel = "CREATE_MODEL" TaskTypeCreatePublicImage = "CREATE_PUBLIC_IMAGE" TaskTypeImageRecommend = "IMAGE_RECOMMEND" TaskTypeChangeUserAvatar = "CHANGE_USER_AVATAR" TaskTypePushCommits = "PUSH_COMMITS" ) 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 } 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 }