mirror of
https://github.com/coder/coder.git
synced 2025-07-03 16:13:58 +00:00
feat: add user-level parameter autofill (#11731)
This PR solves #10478 by auto-filling previously used template values in create and update workspace flows. I decided against explicit user values in settings for these reasons: * Autofill is far easier to implement * Users benefit from autofill _by default_ — we don't need to teach them new concepts * If we decide that autofill creates more harm than good, we can remove it without breaking compatibility
This commit is contained in:
@ -9939,6 +9939,62 @@ func (q *sqlQuerier) InsertWorkspaceAppStats(ctx context.Context, arg InsertWork
|
||||
return err
|
||||
}
|
||||
|
||||
const getUserWorkspaceBuildParameters = `-- name: GetUserWorkspaceBuildParameters :many
|
||||
SELECT DISTINCT ON (tvp.name)
|
||||
tvp.name,
|
||||
wbp.value
|
||||
FROM
|
||||
workspace_build_parameters wbp
|
||||
JOIN
|
||||
workspace_builds wb ON wb.id = wbp.workspace_build_id
|
||||
JOIN
|
||||
workspaces w ON w.id = wb.workspace_id
|
||||
JOIN
|
||||
template_version_parameters tvp ON tvp.template_version_id = wb.template_version_id
|
||||
WHERE
|
||||
w.owner_id = $1
|
||||
AND wb.transition = 'start'
|
||||
AND w.template_id = $2
|
||||
AND tvp.ephemeral = false
|
||||
AND tvp.name = wbp.name
|
||||
ORDER BY
|
||||
tvp.name, wb.created_at DESC
|
||||
LIMIT 100
|
||||
`
|
||||
|
||||
type GetUserWorkspaceBuildParametersParams struct {
|
||||
OwnerID uuid.UUID `db:"owner_id" json:"owner_id"`
|
||||
TemplateID uuid.UUID `db:"template_id" json:"template_id"`
|
||||
}
|
||||
|
||||
type GetUserWorkspaceBuildParametersRow struct {
|
||||
Name string `db:"name" json:"name"`
|
||||
Value string `db:"value" json:"value"`
|
||||
}
|
||||
|
||||
func (q *sqlQuerier) GetUserWorkspaceBuildParameters(ctx context.Context, arg GetUserWorkspaceBuildParametersParams) ([]GetUserWorkspaceBuildParametersRow, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getUserWorkspaceBuildParameters, arg.OwnerID, arg.TemplateID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []GetUserWorkspaceBuildParametersRow
|
||||
for rows.Next() {
|
||||
var i GetUserWorkspaceBuildParametersRow
|
||||
if err := rows.Scan(&i.Name, &i.Value); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const getWorkspaceBuildParameters = `-- name: GetWorkspaceBuildParameters :many
|
||||
SELECT
|
||||
workspace_build_id, name, value
|
||||
|
Reference in New Issue
Block a user