code.gitea.io/gitea@v1.22.3/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 return container.FilterSlice(schedules, func(schedule *ActionSchedule) (int64, bool) { 22 return schedule.TriggerUserID, true 23 }) 24 } 25 26 func (schedules ScheduleList) GetRepoIDs() []int64 { 27 return container.FilterSlice(schedules, func(schedule *ActionSchedule) (int64, bool) { 28 return schedule.RepoID, true 29 }) 30 } 31 32 func (schedules ScheduleList) LoadTriggerUser(ctx context.Context) error { 33 userIDs := schedules.GetUserIDs() 34 users := make(map[int64]*user_model.User, len(userIDs)) 35 if err := db.GetEngine(ctx).In("id", userIDs).Find(&users); err != nil { 36 return err 37 } 38 for _, schedule := range schedules { 39 if schedule.TriggerUserID == user_model.ActionsUserID { 40 schedule.TriggerUser = user_model.NewActionsUser() 41 } else { 42 schedule.TriggerUser = users[schedule.TriggerUserID] 43 if schedule.TriggerUser == nil { 44 schedule.TriggerUser = user_model.NewGhostUser() 45 } 46 } 47 } 48 return nil 49 } 50 51 func (schedules ScheduleList) LoadRepos(ctx context.Context) error { 52 repoIDs := schedules.GetRepoIDs() 53 repos, err := repo_model.GetRepositoriesMapByIDs(ctx, repoIDs) 54 if err != nil { 55 return err 56 } 57 for _, schedule := range schedules { 58 schedule.Repo = repos[schedule.RepoID] 59 } 60 return nil 61 } 62 63 type FindScheduleOptions struct { 64 db.ListOptions 65 RepoID int64 66 OwnerID int64 67 } 68 69 func (opts FindScheduleOptions) ToConds() builder.Cond { 70 cond := builder.NewCond() 71 if opts.RepoID > 0 { 72 cond = cond.And(builder.Eq{"repo_id": opts.RepoID}) 73 } 74 if opts.OwnerID > 0 { 75 cond = cond.And(builder.Eq{"owner_id": opts.OwnerID}) 76 } 77 78 return cond 79 } 80 81 func (opts FindScheduleOptions) ToOrders() string { 82 return "`id` DESC" 83 }