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  }