gitea源码

schedule_spec_list.go 2.1KB

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