adds support for workspace presets to the coderd database. Support in the API and web frontend will be added in subsequent pull requests. This is the smallest meaningful contribution that I could get passing tests for.

* Add workspace preset tables to the database in a migration
* Add queries to manipulate workspace presets to the database
* Generate db related code for the newly added queries
* Implement new methods to satisfy the Querier interface in dbauthz, dbmem, dbmock and querymetrics
* Implement the required tests for dbauthz
* Update the audit table to track changes to the new column in workspace builds
This commit is contained in:
Sas Swart
2025-01-20 16:11:44 +00:00
parent 7f44189ed2
commit 2fca3693fc
17 changed files with 822 additions and 127 deletions

View File

@ -90,6 +90,8 @@ func New() database.Store {
runtimeConfig: map[string]string{},
userStatusChanges: make([]database.UserStatusChange, 0),
telemetryItems: make([]database.TelemetryItem, 0),
presets: make([]database.TemplateVersionPreset, 0),
presetParameters: make([]database.TemplateVersionPresetParameter, 0),
},
}
// Always start with a default org. Matching migration 198.
@ -262,6 +264,8 @@ type data struct {
defaultProxyIconURL string
userStatusChanges []database.UserStatusChange
telemetryItems []database.TelemetryItem
presets []database.TemplateVersionPreset
presetParameters []database.TemplateVersionPresetParameter
}
func tryPercentile(fs []float64, p float64) float64 {
@ -3776,6 +3780,45 @@ func (q *FakeQuerier) GetParameterSchemasByJobID(_ context.Context, jobID uuid.U
return parameters, nil
}
func (q *FakeQuerier) GetPresetByWorkspaceBuildID(ctx context.Context, workspaceBuildID uuid.UUID) (database.GetPresetByWorkspaceBuildIDRow, error) {
panic("not implemented")
}
func (q *FakeQuerier) GetPresetParametersByPresetID(_ context.Context, templateVersionPresetID uuid.UUID) ([]database.GetPresetParametersByPresetIDRow, error) {
q.mutex.RLock()
defer q.mutex.RUnlock()
parameters := make([]database.GetPresetParametersByPresetIDRow, 0)
for _, parameter := range q.presetParameters {
if parameter.TemplateVersionPresetID == templateVersionPresetID {
parameters = append(parameters, database.GetPresetParametersByPresetIDRow{
ID: parameter.ID,
Name: parameter.Name,
Value: parameter.Value,
})
}
}
return parameters, nil
}
func (q *FakeQuerier) GetPresetsByTemplateVersionID(ctx context.Context, templateVersionID uuid.UUID) ([]database.GetPresetsByTemplateVersionIDRow, error) {
q.mutex.RLock()
defer q.mutex.RUnlock()
presets := make([]database.GetPresetsByTemplateVersionIDRow, 0)
for _, preset := range q.presets {
if preset.TemplateVersionID == templateVersionID {
presets = append(presets, database.GetPresetsByTemplateVersionIDRow{
ID: preset.ID,
Name: preset.Name,
CreatedAt: preset.CreatedAt,
UpdatedAt: preset.UpdatedAt,
})
}
}
return presets, nil
}
func (q *FakeQuerier) GetPreviousTemplateVersion(_ context.Context, arg database.GetPreviousTemplateVersionParams) (database.TemplateVersion, error) {
if err := validateDatabaseType(arg); err != nil {
return database.TemplateVersion{}, err
@ -8042,6 +8085,26 @@ func (q *FakeQuerier) InsertOrganizationMember(_ context.Context, arg database.I
return organizationMember, nil
}
func (q *FakeQuerier) InsertPreset(ctx context.Context, arg database.InsertPresetParams) (database.TemplateVersionPreset, error) {
err := validateDatabaseType(arg)
if err != nil {
return database.TemplateVersionPreset{}, err
}
q.mutex.Lock()
defer q.mutex.Unlock()
preset := database.TemplateVersionPreset{
// TODO (sasswart): double check how we generate these IDs in postgres.
// They should not be params here.
Name: arg.Name,
CreatedAt: arg.CreatedAt,
UpdatedAt: arg.UpdatedAt,
}
q.presets = append(q.presets, preset)
return preset, nil
}
func (q *FakeQuerier) InsertProvisionerJob(_ context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {
if err := validateDatabaseType(arg); err != nil {
return database.ProvisionerJob{}, err