Skip to content

Commit 764a596

Browse files
committed
Scope previous version to the template id
1 parent 2403912 commit 764a596

File tree

5 files changed

+53
-24
lines changed

5 files changed

+53
-24
lines changed

coderd/database/databasefake/databasefake.go

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1717,31 +1717,39 @@ func (q *fakeQuerier) GetTemplateVersionByJobID(_ context.Context, jobID uuid.UU
17171717
return database.TemplateVersion{}, sql.ErrNoRows
17181718
}
17191719

1720-
func (q *fakeQuerier) GetPreviousTemplateVersionByOrganizationAndName(_ context.Context, arg database.GetPreviousTemplateVersionByOrganizationAndNameParams) (database.TemplateVersion, error) {
1720+
func (q *fakeQuerier) GetPreviousTemplateVersion(_ context.Context, arg database.GetPreviousTemplateVersionParams) (database.TemplateVersion, error) {
17211721
q.mutex.RLock()
17221722
defer q.mutex.RUnlock()
17231723

1724-
templateVersions := slices.Clone(q.templateVersions)
1725-
slices.SortFunc(templateVersions, func(i, j database.TemplateVersion) bool {
1724+
sortedTemplateVersions := slices.Clone(q.templateVersions)
1725+
slices.SortFunc(sortedTemplateVersions, func(i, j database.TemplateVersion) bool {
17261726
return i.CreatedAt.After(j.CreatedAt)
17271727
})
17281728

1729-
var previousIndex = -1
1730-
for index, templateVersion := range templateVersions {
1729+
templateVersions := make([]database.TemplateVersion, 0)
1730+
for _, templateVersion := range sortedTemplateVersions {
17311731
if templateVersion.OrganizationID != arg.OrganizationID {
17321732
continue
17331733
}
1734-
if !strings.EqualFold(templateVersion.Name, arg.Name) {
1734+
if templateVersion.TemplateID != arg.TemplateID {
17351735
continue
17361736
}
1737-
previousIndex = index - 1
1737+
templateVersions = append(templateVersions, templateVersion)
17381738
}
17391739

1740-
if previousIndex < 0 {
1741-
return database.TemplateVersion{}, sql.ErrNoRows
1740+
templateVersionIndex := -1
1741+
for versionIndex, templateVersion := range templateVersions {
1742+
if strings.EqualFold(templateVersion.Name, arg.Name) {
1743+
templateVersionIndex = versionIndex
1744+
break
1745+
}
17421746
}
17431747

1744-
return templateVersions[previousIndex], nil
1748+
if templateVersionIndex > 0 {
1749+
return templateVersions[templateVersionIndex], nil
1750+
}
1751+
1752+
return database.TemplateVersion{}, sql.ErrNoRows
17451753
}
17461754

17471755
func (q *fakeQuerier) GetParameterSchemasByJobID(_ context.Context, jobID uuid.UUID) ([]database.ParameterSchema, error) {

coderd/database/querier.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

Lines changed: 8 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/templateversions.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ SET
111111
WHERE
112112
job_id = $1;
113113

114-
-- name: GetPreviousTemplateVersionByOrganizationAndName :one
114+
-- name: GetPreviousTemplateVersion :one
115115
SELECT
116116
*
117117
FROM
@@ -120,7 +120,7 @@ WHERE
120120
created_at < (
121121
SELECT created_at
122122
FROM template_versions as tv
123-
WHERE tv.organization_id = $1 AND tv.name = $2
123+
WHERE tv.organization_id = $1 AND tv.name = $2 AND tv.template_id = $3
124124
)
125125
ORDER BY created_at DESC
126126
LIMIT 1;

coderd/templateversions.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -644,13 +644,32 @@ func (api *API) previousTemplateVersionByOrganizationAndName(rw http.ResponseWri
644644
ctx := r.Context()
645645
organization := httpmw.OrganizationParam(r)
646646
templateVersionName := chi.URLParam(r, "templateversionname")
647-
templateVersion, err := api.Database.GetPreviousTemplateVersionByOrganizationAndName(ctx, database.GetPreviousTemplateVersionByOrganizationAndNameParams{
647+
templateVersion, err := api.Database.GetTemplateVersionByOrganizationAndName(ctx, database.GetTemplateVersionByOrganizationAndNameParams{
648648
OrganizationID: organization.ID,
649649
Name: templateVersionName,
650650
})
651651
if errors.Is(err, sql.ErrNoRows) {
652652
httpapi.Write(ctx, rw, http.StatusNotFound, codersdk.Response{
653-
Message: fmt.Sprintf("No previous template version found for name %q.", templateVersionName),
653+
Message: fmt.Sprintf("No template version found by name %q.", templateVersionName),
654+
})
655+
return
656+
}
657+
if err != nil {
658+
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
659+
Message: "Internal error fetching template version.",
660+
Detail: err.Error(),
661+
})
662+
return
663+
}
664+
665+
previousTemplateVersion, err := api.Database.GetPreviousTemplateVersion(ctx, database.GetPreviousTemplateVersionParams{
666+
OrganizationID: organization.ID,
667+
Name: templateVersionName,
668+
TemplateID: templateVersion.TemplateID,
669+
})
670+
if errors.Is(err, sql.ErrNoRows) {
671+
httpapi.Write(ctx, rw, http.StatusNotFound, codersdk.Response{
672+
Message: fmt.Sprintf("No previous template version found for %q.", templateVersionName),
654673
})
655674
return
656675
}
@@ -661,7 +680,8 @@ func (api *API) previousTemplateVersionByOrganizationAndName(rw http.ResponseWri
661680
})
662681
return
663682
}
664-
job, err := api.Database.GetProvisionerJobByID(ctx, templateVersion.JobID)
683+
684+
job, err := api.Database.GetProvisionerJobByID(ctx, previousTemplateVersion.JobID)
665685
if err != nil {
666686
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
667687
Message: "Internal error fetching provisioner job.",
@@ -679,7 +699,7 @@ func (api *API) previousTemplateVersionByOrganizationAndName(rw http.ResponseWri
679699
return
680700
}
681701

682-
httpapi.Write(ctx, rw, http.StatusOK, convertTemplateVersion(templateVersion, convertProvisionerJob(job), user))
702+
httpapi.Write(ctx, rw, http.StatusOK, convertTemplateVersion(previousTemplateVersion, convertProvisionerJob(job), user))
683703
}
684704

685705
func (api *API) patchActiveTemplateVersion(rw http.ResponseWriter, r *http.Request) {

0 commit comments

Comments
 (0)