code.gitea.io/gitea@v1.21.7/models/actions/schedule_list.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package actions 5 6 import ( 7 "context" 8 9 "code.gitea.io/gitea/models/db" 10 repo_model "code.gitea.io/gitea/models/repo" 11 user_model "code.gitea.io/gitea/models/user" 12 "code.gitea.io/gitea/modules/container" 13 14 "xorm.io/builder" 15 ) 16 17 type ScheduleList []*ActionSchedule 18 19 // GetUserIDs returns a slice of user's id 20 func (schedules ScheduleList) GetUserIDs() []int64 { 21 ids := make(container.Set[int64], len(schedules)) 22 for _, schedule := range schedules { 23 ids.Add(schedule.TriggerUserID) 24 } 25 return ids.Values() 26 } 27 28 func (schedules ScheduleList) GetRepoIDs() []int64 { 29 ids := make(container.Set[int64], len(schedules)) 30 for _, schedule := range schedules { 31 ids.Add(schedule.RepoID) 32 } 33 return ids.Values() 34 } 35 36 func (schedules ScheduleList) LoadTriggerUser(ctx context.Context) error { 37 userIDs := schedules.GetUserIDs() 38 users := make(map[int64]*user_model.User, len(userIDs)) 39 if err := db.GetEngine(ctx).In("id", userIDs).Find(&users); err != nil { 40 return err 41 } 42 for _, schedule := range schedules { 43 if schedule.TriggerUserID == user_model.ActionsUserID { 44 schedule.TriggerUser = user_model.NewActionsUser() 45 } else { 46 schedule.TriggerUser = users[schedule.TriggerUserID] 47 } 48 } 49 return nil 50 } 51 52 func (schedules ScheduleList) LoadRepos() error { 53 repoIDs := schedules.GetRepoIDs() 54 repos, err := repo_model.GetRepositoriesMapByIDs(repoIDs) 55 if err != nil { 56 return err 57 } 58 for _, schedule := range schedules { 59 schedule.Repo = repos[schedule.RepoID] 60 } 61 return nil 62 } 63 64 type FindScheduleOptions struct { 65 db.ListOptions 66 RepoID int64 67 OwnerID int64 68 } 69 70 func (opts FindScheduleOptions) toConds() builder.Cond { 71 cond := builder.NewCond() 72 if opts.RepoID > 0 { 73 cond = cond.And(builder.Eq{"repo_id": opts.RepoID}) 74 } 75 if opts.OwnerID > 0 { 76 cond = cond.And(builder.Eq{"owner_id": opts.OwnerID}) 77 } 78 79 return cond 80 } 81 82 func FindSchedules(ctx context.Context, opts FindScheduleOptions) (ScheduleList, int64, error) { 83 e := db.GetEngine(ctx).Where(opts.toConds()) 84 if !opts.ListAll && opts.PageSize > 0 && opts.Page >= 1 { 85 e.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize) 86 } 87 var schedules ScheduleList 88 total, err := e.Desc("id").FindAndCount(&schedules) 89 return schedules, total, err 90 } 91 92 func CountSchedules(ctx context.Context, opts FindScheduleOptions) (int64, error) { 93 return db.GetEngine(ctx).Where(opts.toConds()).Count(new(ActionSchedule)) 94 }