@@ -75,6 +75,7 @@ func New() database.Store {
75
75
parameterSchemas :make ([]database.ParameterSchema ,0 ),
76
76
presets :make ([]database.TemplateVersionPreset ,0 ),
77
77
presetParameters :make ([]database.TemplateVersionPresetParameter ,0 ),
78
+ presetPrebuildSchedules :make ([]database.TemplateVersionPresetPrebuildSchedule ,0 ),
78
79
provisionerDaemons :make ([]database.ProvisionerDaemon ,0 ),
79
80
provisionerJobs :make ([]database.ProvisionerJob ,0 ),
80
81
provisionerJobLogs :make ([]database.ProvisionerJobLog ,0 ),
@@ -299,6 +300,7 @@ type data struct {
299
300
telemetryItems []database.TelemetryItem
300
301
presets []database.TemplateVersionPreset
301
302
presetParameters []database.TemplateVersionPresetParameter
303
+ presetPrebuildSchedules []database.TemplateVersionPresetPrebuildSchedule
302
304
}
303
305
304
306
func tryPercentileCont (fs []float64 ,p float64 )float64 {
@@ -2779,7 +2781,42 @@ func (q *FakeQuerier) GetAPIKeysLastUsedAfter(_ context.Context, after time.Time
2779
2781
}
2780
2782
2781
2783
func (q * FakeQuerier )GetActivePresetPrebuildSchedules (ctx context.Context ) ([]database.TemplateVersionPresetPrebuildSchedule ,error ) {
2782
- return nil ,ErrUnimplemented
2784
+ q .mutex .RLock ()
2785
+ defer q .mutex .RUnlock ()
2786
+
2787
+ var activeSchedules []database.TemplateVersionPresetPrebuildSchedule
2788
+
2789
+ // Create a map of active template version IDs for quick lookup
2790
+ activeTemplateVersions := make (map [uuid.UUID ]bool )
2791
+ for _ ,template := range q .templates {
2792
+ if ! template .Deleted && template .Deprecated == "" {
2793
+ activeTemplateVersions [template .ActiveVersionID ]= true
2794
+ }
2795
+ }
2796
+
2797
+ // Create a map of presets for quick lookup
2798
+ presetMap := make (map [uuid.UUID ]database.TemplateVersionPreset )
2799
+ for _ ,preset := range q .presets {
2800
+ presetMap [preset .ID ]= preset
2801
+ }
2802
+
2803
+ // Filter preset prebuild schedules to only include those for active template versions
2804
+ for _ ,schedule := range q .presetPrebuildSchedules {
2805
+ // Look up the preset using the map
2806
+ preset ,exists := presetMap [schedule .PresetID ]
2807
+ if ! exists {
2808
+ continue
2809
+ }
2810
+
2811
+ // Check if preset's template version is active
2812
+ if ! activeTemplateVersions [preset .TemplateVersionID ] {
2813
+ continue
2814
+ }
2815
+
2816
+ activeSchedules = append (activeSchedules ,schedule )
2817
+ }
2818
+
2819
+ return activeSchedules ,nil
2783
2820
}
2784
2821
2785
2822
// nolint:revive // It's not a control flag, it's a filter.
@@ -9201,7 +9238,17 @@ func (q *FakeQuerier) InsertPresetPrebuildSchedule(ctx context.Context, arg data
9201
9238
return database.TemplateVersionPresetPrebuildSchedule {},err
9202
9239
}
9203
9240
9204
- return database.TemplateVersionPresetPrebuildSchedule {},ErrUnimplemented
9241
+ q .mutex .Lock ()
9242
+ defer q .mutex .Unlock ()
9243
+
9244
+ presetPrebuildSchedule := database.TemplateVersionPresetPrebuildSchedule {
9245
+ ID :uuid .New (),
9246
+ PresetID :arg .PresetID ,
9247
+ CronExpression :arg .CronExpression ,
9248
+ DesiredInstances :arg .DesiredInstances ,
9249
+ }
9250
+ q .presetPrebuildSchedules = append (q .presetPrebuildSchedules ,presetPrebuildSchedule )
9251
+ return presetPrebuildSchedule ,nil
9205
9252
}
9206
9253
9207
9254
func (q * FakeQuerier )InsertProvisionerJob (_ context.Context ,arg database.InsertProvisionerJobParams ) (database.ProvisionerJob ,error ) {