code.gitea.io/gitea@v1.22.3/models/actions/schedule_spec_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 "code.gitea.io/gitea/modules/container" 12 13 "xorm.io/builder" 14 ) 15 16 type SpecList []*ActionScheduleSpec 17 18 func (specs SpecList) GetScheduleIDs() []int64 { 19 return container.FilterSlice(specs, func(spec *ActionScheduleSpec) (int64, bool) { 20 return spec.ScheduleID, true 21 }) 22 } 23 24 func (specs SpecList) LoadSchedules(ctx context.Context) error { 25 scheduleIDs := specs.GetScheduleIDs() 26 schedules, err := GetSchedulesMapByIDs(ctx, scheduleIDs) 27 if err != nil { 28 return err 29 } 30 for _, spec := range specs { 31 spec.Schedule = schedules[spec.ScheduleID] 32 } 33 34 repoIDs := specs.GetRepoIDs() 35 repos, err := GetReposMapByIDs(ctx, repoIDs) 36 if err != nil { 37 return err 38 } 39 for _, spec := range specs { 40 spec.Repo = repos[spec.RepoID] 41 } 42 43 return nil 44 } 45 46 func (specs SpecList) GetRepoIDs() []int64 { 47 return container.FilterSlice(specs, func(spec *ActionScheduleSpec) (int64, bool) { 48 return spec.RepoID, true 49 }) 50 } 51 52 func (specs SpecList) LoadRepos(ctx context.Context) error { 53 repoIDs := specs.GetRepoIDs() 54 repos, err := repo_model.GetRepositoriesMapByIDs(ctx, repoIDs) 55 if err != nil { 56 return err 57 } 58 for _, spec := range specs { 59 spec.Repo = repos[spec.RepoID] 60 } 61 return nil 62 } 63 64 type FindSpecOptions struct { 65 db.ListOptions 66 RepoID int64 67 Next int64 68 } 69 70 func (opts FindSpecOptions) ToConds() builder.Cond { 71 cond := builder.NewCond() 72 if opts.RepoID > 0 { 73 cond = cond.And(builder.Eq{"repo_id": opts.RepoID}) 74 } 75 76 if opts.Next > 0 { 77 cond = cond.And(builder.Lte{"next": opts.Next}) 78 } 79 80 return cond 81 } 82 83 func (opts FindSpecOptions) ToOrders() string { 84 return "`id` DESC" 85 } 86 87 func FindSpecs(ctx context.Context, opts FindSpecOptions) (SpecList, int64, error) { 88 specs, total, err := db.FindAndCount[ActionScheduleSpec](ctx, opts) 89 if err != nil { 90 return nil, 0, err 91 } 92 93 if err := SpecList(specs).LoadSchedules(ctx); err != nil { 94 return nil, 0, err 95 } 96 return specs, total, nil 97 }