Skip to content

Commit d3d8948

Browse files
committed
Initial, inefficient attempt at preset parameter matching
1 parent 6276b00 commit d3d8948

File tree

1 file changed

+51
-6
lines changed

1 file changed

+51
-6
lines changed

coderd/wsbuilder/wsbuilder.go

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,57 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object
442442

443443
var workspaceBuild database.WorkspaceBuild
444444
err = b.store.InTx(func(store database.Store) error {
445+
names, values, err := b.getParameters()
446+
if err != nil {
447+
// getParameters already wraps errors in BuildError
448+
return err
449+
}
450+
451+
if b.templateVersionPresetID == uuid.Nil {
452+
parameterMap := make(map[string]string)
453+
for i, name := range names {
454+
parameterMap[name] = values[i]
455+
}
456+
457+
presetParameters, err := b.store.GetPresetParametersByTemplateVersionID(b.ctx, templateVersionID)
458+
if err != nil {
459+
return BuildError{http.StatusInternalServerError, "get preset parameters", err}
460+
}
461+
462+
presetMap := make(map[uuid.UUID]map[string]string)
463+
for _, presetParameter := range presetParameters {
464+
if _, ok := presetMap[presetParameter.TemplateVersionPresetID]; !ok {
465+
presetMap[presetParameter.TemplateVersionPresetID] = make(map[string]string)
466+
}
467+
presetMap[presetParameter.TemplateVersionPresetID][presetParameter.Name] = presetParameter.Value
468+
}
469+
470+
// Compare each preset's parameters to the provided parameters to find any matches
471+
for presetID, presetParams := range presetMap {
472+
isMatch := true
473+
// Check that all preset parameters match the provided parameters
474+
for paramName, presetValue := range presetParams {
475+
if providedValue, exists := parameterMap[paramName]; !exists || providedValue != presetValue {
476+
isMatch = false
477+
break
478+
}
479+
}
480+
// Check that all provided parameters match the preset parameters
481+
if isMatch {
482+
for paramName, providedValue := range parameterMap {
483+
if presetValue, exists := presetParams[paramName]; !exists || providedValue != presetValue {
484+
isMatch = false
485+
break
486+
}
487+
}
488+
}
489+
if isMatch {
490+
b.templateVersionPresetID = presetID
491+
break
492+
}
493+
}
494+
}
495+
445496
err = store.InsertWorkspaceBuild(b.ctx, database.InsertWorkspaceBuildParams{
446497
ID: workspaceBuildID,
447498
CreatedAt: now,
@@ -473,12 +524,6 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object
473524
return BuildError{code, "insert workspace build", err}
474525
}
475526

476-
names, values, err := b.getParameters()
477-
if err != nil {
478-
// getParameters already wraps errors in BuildError
479-
return err
480-
}
481-
482527
err = store.InsertWorkspaceBuildParameters(b.ctx, database.InsertWorkspaceBuildParametersParams{
483528
WorkspaceBuildID: workspaceBuildID,
484529
Name: names,

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy