123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- // Copyright 2023 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package actions
-
- import (
- "context"
-
- "code.gitea.io/gitea/models/db"
- repo_model "code.gitea.io/gitea/models/repo"
- "code.gitea.io/gitea/modules/container"
-
- "xorm.io/builder"
- )
-
- type SpecList []*ActionScheduleSpec
-
- func (specs SpecList) GetScheduleIDs() []int64 {
- ids := make(container.Set[int64], len(specs))
- for _, spec := range specs {
- ids.Add(spec.ScheduleID)
- }
- return ids.Values()
- }
-
- func (specs SpecList) LoadSchedules(ctx context.Context) error {
- scheduleIDs := specs.GetScheduleIDs()
- schedules, err := GetSchedulesMapByIDs(ctx, scheduleIDs)
- if err != nil {
- return err
- }
- for _, spec := range specs {
- spec.Schedule = schedules[spec.ScheduleID]
- }
-
- repoIDs := specs.GetRepoIDs()
- repos, err := GetReposMapByIDs(ctx, repoIDs)
- if err != nil {
- return err
- }
- for _, spec := range specs {
- spec.Repo = repos[spec.RepoID]
- }
-
- return nil
- }
-
- func (specs SpecList) GetRepoIDs() []int64 {
- ids := make(container.Set[int64], len(specs))
- for _, spec := range specs {
- ids.Add(spec.RepoID)
- }
- return ids.Values()
- }
-
- func (specs SpecList) LoadRepos() error {
- repoIDs := specs.GetRepoIDs()
- repos, err := repo_model.GetRepositoriesMapByIDs(repoIDs)
- if err != nil {
- return err
- }
- for _, spec := range specs {
- spec.Repo = repos[spec.RepoID]
- }
- return nil
- }
-
- type FindSpecOptions struct {
- db.ListOptions
- RepoID int64
- Next int64
- }
-
- func (opts FindSpecOptions) toConds() builder.Cond {
- cond := builder.NewCond()
- if opts.RepoID > 0 {
- cond = cond.And(builder.Eq{"repo_id": opts.RepoID})
- }
-
- if opts.Next > 0 {
- cond = cond.And(builder.Lte{"next": opts.Next})
- }
-
- return cond
- }
-
- func FindSpecs(ctx context.Context, opts FindSpecOptions) (SpecList, int64, error) {
- e := db.GetEngine(ctx).Where(opts.toConds())
- if opts.PageSize > 0 && opts.Page >= 1 {
- e.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize)
- }
- var specs SpecList
- total, err := e.Desc("id").FindAndCount(&specs)
- if err != nil {
- return nil, 0, err
- }
-
- if err := specs.LoadSchedules(ctx); err != nil {
- return nil, 0, err
- }
- return specs, total, nil
- }
-
- func CountSpecs(ctx context.Context, opts FindSpecOptions) (int64, error) {
- return db.GetEngine(ctx).Where(opts.toConds()).Count(new(ActionScheduleSpec))
- }
|