@@ -75,6 +75,7 @@ func New() database.Store {
7575parameterSchemas :make ([]database.ParameterSchema ,0 ),
7676presets :make ([]database.TemplateVersionPreset ,0 ),
7777presetParameters :make ([]database.TemplateVersionPresetParameter ,0 ),
78+ presetPrebuildSchedules :make ([]database.TemplateVersionPresetPrebuildSchedule ,0 ),
7879provisionerDaemons :make ([]database.ProvisionerDaemon ,0 ),
7980provisionerJobs :make ([]database.ProvisionerJob ,0 ),
8081provisionerJobLogs :make ([]database.ProvisionerJobLog ,0 ),
@@ -299,6 +300,7 @@ type data struct {
299300telemetryItems []database.TelemetryItem
300301presets []database.TemplateVersionPreset
301302presetParameters []database.TemplateVersionPresetParameter
303+ presetPrebuildSchedules []database.TemplateVersionPresetPrebuildSchedule
302304}
303305
304306func tryPercentileCont (fs []float64 ,p float64 )float64 {
@@ -2779,7 +2781,42 @@ func (q *FakeQuerier) GetAPIKeysLastUsedAfter(_ context.Context, after time.Time
27792781}
27802782
27812783func (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
27832820}
27842821
27852822// 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
92019238return database.TemplateVersionPresetPrebuildSchedule {},err
92029239}
92039240
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
92059252}
92069253
92079254func (q * FakeQuerier )InsertProvisionerJob (_ context.Context ,arg database.InsertProvisionerJobParams ) (database.ProvisionerJob ,error ) {