Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8857971

Browse files
feat(coder): Add PATCH /templateversions/:templateversion endpoint (#6698)
1 parent ed9a3b9 commit 8857971

16 files changed

+391
-19
lines changed

coderd/apidoc/docs.go

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

coderd/apidoc/swagger.json

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

coderd/coderd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,7 @@ func New(options *Options) *API {
500500
httpmw.ExtractTemplateVersionParam(options.Database),
501501
)
502502
r.Get("/", api.templateVersion)
503+
r.Patch("/", api.patchTemplateVersion)
503504
r.Patch("/cancel", api.patchCancelTemplateVersion)
504505
r.Get("/schema", api.templateVersionSchema)
505506
r.Get("/parameters", api.templateVersionParameters)

coderd/database/dbauthz/querier.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -850,13 +850,13 @@ func (q *querier) UpdateTemplateScheduleByID(ctx context.Context, arg database.U
850850
return updateWithReturn(q.log, q.auth, fetch, q.db.UpdateTemplateScheduleByID)(ctx, arg)
851851
}
852852

853-
func (q *querier) UpdateTemplateVersionByID(ctx context.Context, arg database.UpdateTemplateVersionByIDParams) error {
853+
func (q *querier) UpdateTemplateVersionByID(ctx context.Context, arg database.UpdateTemplateVersionByIDParams) (database.TemplateVersion, error) {
854854
template, err := q.db.GetTemplateByID(ctx, arg.TemplateID.UUID)
855855
if err != nil {
856-
return err
856+
return database.TemplateVersion{}, err
857857
}
858858
if err := q.authorizeContext(ctx, rbac.ActionUpdate, template); err != nil {
859-
return err
859+
return database.TemplateVersion{}, err
860860
}
861861
return q.db.UpdateTemplateVersionByID(ctx, arg)
862862
}

coderd/database/dbauthz/querier_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,9 @@ func (s *MethodTestSuite) TestTemplate() {
721721
check.Args(database.UpdateTemplateVersionByIDParams{
722722
ID: tv.ID,
723723
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
724-
}).Asserts(t1, rbac.ActionUpdate).Returns()
724+
Name: tv.Name,
725+
UpdatedAt: tv.UpdatedAt,
726+
}).Asserts(t1, rbac.ActionUpdate).Returns(tv)
725727
}))
726728
s.Run("UpdateTemplateVersionDescriptionByJobID", s.Subtest(func(db database.Store, check *expects) {
727729
jobID := uuid.New()

coderd/database/dbfake/databasefake.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3413,9 +3413,9 @@ func (q *fakeQuerier) UpdateTemplateACLByID(_ context.Context, arg database.Upda
34133413
return database.Template{}, sql.ErrNoRows
34143414
}
34153415

3416-
func (q *fakeQuerier) UpdateTemplateVersionByID(_ context.Context, arg database.UpdateTemplateVersionByIDParams) error {
3416+
func (q *fakeQuerier) UpdateTemplateVersionByID(_ context.Context, arg database.UpdateTemplateVersionByIDParams) (database.TemplateVersion, error) {
34173417
if err := validateDatabaseType(arg); err != nil {
3418-
return err
3418+
return database.TemplateVersion{}, err
34193419
}
34203420

34213421
q.mutex.Lock()
@@ -3427,10 +3427,11 @@ func (q *fakeQuerier) UpdateTemplateVersionByID(_ context.Context, arg database.
34273427
}
34283428
templateVersion.TemplateID = arg.TemplateID
34293429
templateVersion.UpdatedAt = arg.UpdatedAt
3430+
templateVersion.Name = arg.Name
34303431
q.templateVersions[index] = templateVersion
3431-
return nil
3432+
return templateVersion, nil
34323433
}
3433-
return sql.ErrNoRows
3434+
return database.TemplateVersion{}, sql.ErrNoRows
34343435
}
34353436

34363437
func (q *fakeQuerier) UpdateTemplateVersionDescriptionByJobID(_ context.Context, arg database.UpdateTemplateVersionDescriptionByJobIDParams) 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: 26 additions & 6 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: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,15 @@ INSERT INTO
8484
VALUES
8585
($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *;
8686

87-
-- name: UpdateTemplateVersionByID :exec
87+
-- name: UpdateTemplateVersionByID :one
8888
UPDATE
8989
template_versions
9090
SET
9191
template_id = $2,
92-
updated_at = $3
92+
updated_at = $3,
93+
name = $4
9394
WHERE
94-
id = $1;
95+
id = $1 RETURNING *;
9596

9697
-- name: UpdateTemplateVersionDescriptionByJobID :exec
9798
UPDATE

coderd/templates.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,13 +269,14 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
269269

270270
templateAudit.New = dbTemplate
271271

272-
err = tx.UpdateTemplateVersionByID(ctx, database.UpdateTemplateVersionByIDParams{
272+
_, err = tx.UpdateTemplateVersionByID(ctx, database.UpdateTemplateVersionByIDParams{
273273
ID: templateVersion.ID,
274274
TemplateID: uuid.NullUUID{
275275
UUID: dbTemplate.ID,
276276
Valid: true,
277277
},
278278
UpdatedAt: database.Now(),
279+
Name: templateVersion.Name,
279280
})
280281
if err != nil {
281282
return xerrors.Errorf("insert template version: %s", err)

coderd/templateversions.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,66 @@ func (api *API) templateVersion(rw http.ResponseWriter, r *http.Request) {
6363
httpapi.Write(ctx, rw, http.StatusOK, convertTemplateVersion(templateVersion, convertProvisionerJob(job), user))
6464
}
6565

66+
// @Summary Patch template version by ID
67+
// @ID patch-template-version-by-id
68+
// @Security CoderSessionToken
69+
// @Accept json
70+
// @Produce json
71+
// @Tags Templates
72+
// @Param templateversion path string true "Template version ID" format(uuid)
73+
// @Param request body codersdk.PatchTemplateVersionRequest true "Patch template version request"
74+
// @Success 200 {object} codersdk.TemplateVersion
75+
// @Router /templateversions/{templateversion} [patch]
76+
func (api *API) patchTemplateVersion(rw http.ResponseWriter, r *http.Request) {
77+
ctx := r.Context()
78+
templateVersion := httpmw.TemplateVersionParam(r)
79+
80+
var params codersdk.PatchTemplateVersionRequest
81+
if !httpapi.Read(ctx, rw, r, &params) {
82+
return
83+
}
84+
85+
updateParams := database.UpdateTemplateVersionByIDParams{
86+
ID: templateVersion.ID,
87+
TemplateID: templateVersion.TemplateID,
88+
UpdatedAt: database.Now(),
89+
Name: templateVersion.Name,
90+
}
91+
92+
if params.Name != "" {
93+
updateParams.Name = params.Name
94+
}
95+
// It is not allowed to "patch" the template ID, and reassign it.
96+
updatedTemplateVersion, err := api.Database.UpdateTemplateVersionByID(ctx, updateParams)
97+
if err != nil {
98+
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
99+
Message: "Error on patching template version.",
100+
Detail: err.Error(),
101+
})
102+
return
103+
}
104+
105+
job, err := api.Database.GetProvisionerJobByID(ctx, templateVersion.JobID)
106+
if err != nil {
107+
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
108+
Message: "Internal error fetching provisioner job.",
109+
Detail: err.Error(),
110+
})
111+
return
112+
}
113+
114+
user, err := api.Database.GetUserByID(ctx, templateVersion.CreatedBy)
115+
if err != nil {
116+
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
117+
Message: "Internal error on fetching user.",
118+
Detail: err.Error(),
119+
})
120+
return
121+
}
122+
123+
httpapi.Write(ctx, rw, http.StatusOK, convertTemplateVersion(updatedTemplateVersion, convertProvisionerJob(job), user))
124+
}
125+
66126
// @Summary Cancel template version by ID
67127
// @ID cancel-template-version-by-id
68128
// @Security CoderSessionToken

0 commit comments

Comments
 (0)