mirror of
https://github.com/coder/coder.git
synced 2025-07-06 15:41:45 +00:00
consolidate preset API endpoints
This commit is contained in:
@ -1059,7 +1059,6 @@ func New(options *Options) *API {
|
||||
r.Get("/variables", api.templateVersionVariables)
|
||||
r.Route("/presets", func(r chi.Router) {
|
||||
r.Get("/", api.templateVersionPresets)
|
||||
r.Get("/parameters", api.templateVersionPresetParameters)
|
||||
})
|
||||
r.Get("/resources", api.templateVersionResources)
|
||||
r.Get("/logs", api.templateVersionLogs)
|
||||
|
@ -3823,7 +3823,6 @@ func (s *MethodTestSuite) TestSystemFunctions() {
|
||||
})
|
||||
require.NoError(s.T(), err)
|
||||
_, err = db.InsertPresetParameters(ctx, database.InsertPresetParametersParams{
|
||||
ID: uuid.New(),
|
||||
TemplateVersionPresetID: preset.ID,
|
||||
Names: []string{"test"},
|
||||
Values: []string{"test"},
|
||||
|
2
coderd/database/dump.sql
generated
2
coderd/database/dump.sql
generated
@ -1266,7 +1266,7 @@ COMMENT ON COLUMN template_version_parameters.display_order IS 'Specifies the or
|
||||
COMMENT ON COLUMN template_version_parameters.ephemeral IS 'The value of an ephemeral parameter will not be preserved between consecutive workspace builds.';
|
||||
|
||||
CREATE TABLE template_version_preset_parameters (
|
||||
id uuid NOT NULL,
|
||||
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
||||
template_version_preset_id uuid NOT NULL,
|
||||
name text NOT NULL,
|
||||
value text NOT NULL
|
||||
|
@ -0,0 +1,2 @@
|
||||
ALTER TABLE template_version_preset_parameters
|
||||
ALTER COLUMN id DROP DEFAULT;
|
@ -0,0 +1,2 @@
|
||||
ALTER TABLE template_version_preset_parameters
|
||||
ALTER COLUMN id SET DEFAULT gen_random_uuid();
|
@ -5525,29 +5525,22 @@ func (q *sqlQuerier) InsertPreset(ctx context.Context, arg InsertPresetParams) (
|
||||
|
||||
const insertPresetParameters = `-- name: InsertPresetParameters :many
|
||||
INSERT INTO
|
||||
template_version_preset_parameters (id, template_version_preset_id, name, value)
|
||||
template_version_preset_parameters (template_version_preset_id, name, value)
|
||||
SELECT
|
||||
$1,
|
||||
$2,
|
||||
unnest($3 :: TEXT[]),
|
||||
unnest($4 :: TEXT[])
|
||||
unnest($2 :: TEXT[]),
|
||||
unnest($3 :: TEXT[])
|
||||
RETURNING id, template_version_preset_id, name, value
|
||||
`
|
||||
|
||||
type InsertPresetParametersParams struct {
|
||||
ID uuid.UUID `db:"id" json:"id"`
|
||||
TemplateVersionPresetID uuid.UUID `db:"template_version_preset_id" json:"template_version_preset_id"`
|
||||
Names []string `db:"names" json:"names"`
|
||||
Values []string `db:"values" json:"values"`
|
||||
}
|
||||
|
||||
func (q *sqlQuerier) InsertPresetParameters(ctx context.Context, arg InsertPresetParametersParams) ([]TemplateVersionPresetParameter, error) {
|
||||
rows, err := q.db.QueryContext(ctx, insertPresetParameters,
|
||||
arg.ID,
|
||||
arg.TemplateVersionPresetID,
|
||||
pq.Array(arg.Names),
|
||||
pq.Array(arg.Values),
|
||||
)
|
||||
rows, err := q.db.QueryContext(ctx, insertPresetParameters, arg.TemplateVersionPresetID, pq.Array(arg.Names), pq.Array(arg.Values))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -6,9 +6,8 @@ VALUES
|
||||
|
||||
-- name: InsertPresetParameters :many
|
||||
INSERT INTO
|
||||
template_version_preset_parameters (id, template_version_preset_id, name, value)
|
||||
template_version_preset_parameters (template_version_preset_id, name, value)
|
||||
SELECT
|
||||
@id,
|
||||
@template_version_preset_id,
|
||||
unnest(@names :: TEXT[]),
|
||||
unnest(@values :: TEXT[])
|
||||
|
@ -29,29 +29,6 @@ func (api *API) templateVersionPresets(rw http.ResponseWriter, r *http.Request)
|
||||
return
|
||||
}
|
||||
|
||||
var res []codersdk.Preset
|
||||
for _, preset := range presets {
|
||||
res = append(res, codersdk.Preset{
|
||||
ID: preset.ID,
|
||||
Name: preset.Name,
|
||||
})
|
||||
}
|
||||
|
||||
httpapi.Write(ctx, rw, http.StatusOK, res)
|
||||
}
|
||||
|
||||
// @Summary Get template version preset parameters
|
||||
// @ID get-template-version-preset-parameters
|
||||
// @Security CoderSessionToken
|
||||
// @Produce json
|
||||
// @Tags Templates
|
||||
// @Param templateversion path string true "Template version ID" format(uuid)
|
||||
// @Success 200 {array} codersdk.PresetParameter
|
||||
// @Router /templateversions/{templateversion}/presets/parameters [get]
|
||||
func (api *API) templateVersionPresetParameters(rw http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
templateVersion := httpmw.TemplateVersionParam(r)
|
||||
|
||||
// TODO (sasswart): Test case: what if a user tries to read presets or preset parameters from a different org?
|
||||
// TODO (sasswart): Do a prelim auth check here.
|
||||
|
||||
@ -64,13 +41,21 @@ func (api *API) templateVersionPresetParameters(rw http.ResponseWriter, r *http.
|
||||
return
|
||||
}
|
||||
|
||||
var res []codersdk.PresetParameter
|
||||
for _, presetParam := range presetParams {
|
||||
res = append(res, codersdk.PresetParameter{
|
||||
PresetID: presetParam.TemplateVersionPresetID,
|
||||
Name: presetParam.Name,
|
||||
Value: presetParam.Value,
|
||||
})
|
||||
var res []codersdk.Preset
|
||||
for _, preset := range presets {
|
||||
sdkPreset := codersdk.Preset{
|
||||
ID: preset.ID,
|
||||
Name: preset.Name,
|
||||
}
|
||||
for _, presetParam := range presetParams {
|
||||
if presetParam.TemplateVersionPresetID == preset.ID {
|
||||
sdkPreset.Parameters = append(sdkPreset.Parameters, codersdk.PresetParameter{
|
||||
Name: presetParam.Name,
|
||||
Value: presetParam.Value,
|
||||
})
|
||||
}
|
||||
}
|
||||
res = append(res, sdkPreset)
|
||||
}
|
||||
|
||||
httpapi.Write(ctx, rw, http.StatusOK, res)
|
||||
|
@ -1,7 +1,6 @@
|
||||
package coderd_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/google/uuid"
|
||||
@ -12,12 +11,28 @@ import (
|
||||
"github.com/coder/coder/v2/coderd/database/dbauthz"
|
||||
"github.com/coder/coder/v2/coderd/httpmw"
|
||||
"github.com/coder/coder/v2/coderd/rbac"
|
||||
"github.com/coder/coder/v2/codersdk"
|
||||
"github.com/coder/coder/v2/testutil"
|
||||
)
|
||||
|
||||
func TestTemplateVersionPresets(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
ctx := context.Background()
|
||||
sdkPreset := codersdk.Preset{
|
||||
ID: uuid.New(),
|
||||
Name: "My Preset",
|
||||
Parameters: []codersdk.PresetParameter{
|
||||
{
|
||||
Name: "preset_param1",
|
||||
Value: "A1B2C3",
|
||||
},
|
||||
{
|
||||
Name: "preset_param2",
|
||||
Value: "D4E5F6",
|
||||
},
|
||||
},
|
||||
}
|
||||
ctx := testutil.Context(t, testutil.WaitShort)
|
||||
|
||||
client, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
@ -27,16 +42,22 @@ func TestTemplateVersionPresets(t *testing.T) {
|
||||
provisionerCtx := dbauthz.AsProvisionerd(ctx)
|
||||
|
||||
preset, err := db.InsertPreset(provisionerCtx, database.InsertPresetParams{
|
||||
ID: uuid.New(),
|
||||
Name: "My Preset",
|
||||
ID: sdkPreset.ID,
|
||||
Name: sdkPreset.Name,
|
||||
TemplateVersionID: version.ID,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
var presetParameterNames []string
|
||||
var presetParameterValues []string
|
||||
for _, presetParameter := range sdkPreset.Parameters {
|
||||
presetParameterNames = append(presetParameterNames, presetParameter.Name)
|
||||
presetParameterValues = append(presetParameterValues, presetParameter.Value)
|
||||
}
|
||||
_, err = db.InsertPresetParameters(provisionerCtx, database.InsertPresetParametersParams{
|
||||
ID: uuid.New(),
|
||||
TemplateVersionPresetID: preset.ID,
|
||||
Names: []string{"preset_param1", "preset_param2"},
|
||||
Values: []string{"A1B2C3", "D4E5F6"},
|
||||
Names: presetParameterNames,
|
||||
Values: presetParameterValues,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
@ -46,14 +67,12 @@ func TestTemplateVersionPresets(t *testing.T) {
|
||||
|
||||
presets, err := client.TemplateVersionPresets(userCtx, version.ID)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 1, len(presets))
|
||||
require.Equal(t, "My Preset", presets[0].Name)
|
||||
|
||||
presetParams, err := client.TemplateVersionPresetParameters(userCtx, version.ID)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 2, len(presetParams))
|
||||
require.Equal(t, "preset_param1", presetParams[0].Name)
|
||||
require.Equal(t, "A1B2C3", presetParams[0].Value)
|
||||
require.Equal(t, "preset_param2", presetParams[1].Name)
|
||||
require.Equal(t, "D4E5F6", presetParams[1].Value)
|
||||
require.Equal(t, 1, len(presets))
|
||||
require.Equal(t, sdkPreset.ID, presets[0].ID)
|
||||
require.Equal(t, sdkPreset.Name, presets[0].Name)
|
||||
|
||||
for _, presetParameter := range sdkPreset.Parameters {
|
||||
require.Contains(t, presets[0].Parameters, presetParameter)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user