gitea源码

schedule_list.go 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package actions
  4. import (
  5. "context"
  6. "code.gitea.io/gitea/models/db"
  7. repo_model "code.gitea.io/gitea/models/repo"
  8. user_model "code.gitea.io/gitea/models/user"
  9. "code.gitea.io/gitea/modules/container"
  10. "xorm.io/builder"
  11. )
  12. type ScheduleList []*ActionSchedule
  13. // GetUserIDs returns a slice of user's id
  14. func (schedules ScheduleList) GetUserIDs() []int64 {
  15. return container.FilterSlice(schedules, func(schedule *ActionSchedule) (int64, bool) {
  16. return schedule.TriggerUserID, true
  17. })
  18. }
  19. func (schedules ScheduleList) GetRepoIDs() []int64 {
  20. return container.FilterSlice(schedules, func(schedule *ActionSchedule) (int64, bool) {
  21. return schedule.RepoID, true
  22. })
  23. }
  24. func (schedules ScheduleList) LoadTriggerUser(ctx context.Context) error {
  25. userIDs := schedules.GetUserIDs()
  26. users := make(map[int64]*user_model.User, len(userIDs))
  27. if err := db.GetEngine(ctx).In("id", userIDs).Find(&users); err != nil {
  28. return err
  29. }
  30. for _, schedule := range schedules {
  31. if schedule.TriggerUserID == user_model.ActionsUserID {
  32. schedule.TriggerUser = user_model.NewActionsUser()
  33. } else {
  34. schedule.TriggerUser = users[schedule.TriggerUserID]
  35. if schedule.TriggerUser == nil {
  36. schedule.TriggerUser = user_model.NewGhostUser()
  37. }
  38. }
  39. }
  40. return nil
  41. }
  42. func (schedules ScheduleList) LoadRepos(ctx context.Context) error {
  43. repoIDs := schedules.GetRepoIDs()
  44. repos, err := repo_model.GetRepositoriesMapByIDs(ctx, repoIDs)
  45. if err != nil {
  46. return err
  47. }
  48. for _, schedule := range schedules {
  49. schedule.Repo = repos[schedule.RepoID]
  50. }
  51. return nil
  52. }
  53. type FindScheduleOptions struct {
  54. db.ListOptions
  55. RepoID int64
  56. OwnerID int64
  57. }
  58. func (opts FindScheduleOptions) ToConds() builder.Cond {
  59. cond := builder.NewCond()
  60. if opts.RepoID > 0 {
  61. cond = cond.And(builder.Eq{"repo_id": opts.RepoID})
  62. }
  63. if opts.OwnerID > 0 {
  64. cond = cond.And(builder.Eq{"owner_id": opts.OwnerID})
  65. }
  66. return cond
  67. }
  68. func (opts FindScheduleOptions) ToOrders() string {
  69. return "`id` DESC"
  70. }