Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdef52bb

Browse files
committed
feat(coderd): use new data model for task delete
Updatescoder/internal#976
1 parent44f6809 commitdef52bb

File tree

13 files changed

+317
-64
lines changed

13 files changed

+317
-64
lines changed

‎cli/exp_task_delete_test.go‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ import (
2222
funcTestExpTaskDelete(t*testing.T) {
2323
t.Parallel()
2424

25-
t.Skip("TODO(mafredri): Remove, fixed down-stack!")
26-
2725
typetestCountersstruct {
2826
deleteCalls atomic.Int64
2927
nameResolves atomic.Int64

‎coderd/aitasks.go‎

Lines changed: 44 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -715,78 +715,66 @@ func (api *API) taskGet(rw http.ResponseWriter, r *http.Request) {
715715
// @Router /api/experimental/tasks/{user}/{id} [delete]
716716
//
717717
// EXPERIMENTAL: This endpoint is experimental and not guaranteed to be stable.
718-
// taskDelete is an experimental endpoint to delete a task by ID (workspace ID).
718+
// taskDelete is an experimental endpoint to delete a task by ID.
719719
// It creates a delete workspace build and returns 202 Accepted if the build was
720720
// created.
721721
func (api*API)taskDelete(rw http.ResponseWriter,r*http.Request) {
722722
ctx:=r.Context()
723723
apiKey:=httpmw.APIKey(r)
724+
task:=httpmw.TaskParam(r)
724725

725-
idStr:=chi.URLParam(r,"id")
726-
taskID,err:=uuid.Parse(idStr)
727-
iferr!=nil {
728-
httpapi.Write(ctx,rw,http.StatusBadRequest, codersdk.Response{
729-
Message:fmt.Sprintf("Invalid UUID %q for task ID.",idStr),
730-
})
731-
return
732-
}
726+
now:=api.Clock.Now()
733727

734-
// For now, taskID = workspaceID, once we have a task data model in
735-
// the DB, we can change this lookup.
736-
workspaceID:=taskID
737-
workspace,err:=api.Database.GetWorkspaceByID(ctx,workspaceID)
738-
ifhttpapi.Is404Error(err) {
739-
httpapi.ResourceNotFound(rw)
740-
return
741-
}
742-
iferr!=nil {
743-
httpapi.Write(ctx,rw,http.StatusInternalServerError, codersdk.Response{
744-
Message:"Internal error fetching workspace.",
745-
Detail:err.Error(),
746-
})
747-
return
728+
iftask.WorkspaceID.Valid {
729+
workspace,err:=api.Database.GetWorkspaceByID(ctx,task.WorkspaceID.UUID)
730+
iferr!=nil {
731+
ifhttpapi.Is404Error(err) {
732+
httpapi.ResourceNotFound(rw)
733+
return
734+
}
735+
httpapi.Write(ctx,rw,http.StatusInternalServerError, codersdk.Response{
736+
Message:"Internal error fetching workspace.",
737+
Detail:err.Error(),
738+
})
739+
return
740+
}
741+
742+
// Construct a request to the workspace build creation handler to
743+
// initiate deletion.
744+
buildReq:= codersdk.CreateWorkspaceBuildRequest{
745+
Transition:codersdk.WorkspaceTransitionDelete,
746+
Reason:"Deleted via tasks API",
747+
}
748+
749+
_,err=api.postWorkspaceBuildsInternal(
750+
ctx,
751+
apiKey,
752+
workspace,
753+
buildReq,
754+
func(action policy.Action,object rbac.Objecter)bool {
755+
returnapi.Authorize(r,action,object)
756+
},
757+
audit.WorkspaceBuildBaggageFromRequest(r),
758+
)
759+
iferr!=nil {
760+
httperror.WriteWorkspaceBuildError(ctx,rw,err)
761+
return
762+
}
748763
}
749764

750-
data,err:=api.workspaceData(ctx, []database.Workspace{workspace})
765+
_,err:=api.Database.DeleteTask(ctx, database.DeleteTaskParams{
766+
ID:task.ID,
767+
DeletedAt:dbtime.Time(now),
768+
})
751769
iferr!=nil {
752770
httpapi.Write(ctx,rw,http.StatusInternalServerError, codersdk.Response{
753-
Message:"Internal error fetching workspace resources.",
771+
Message:"Failed to delete task",
754772
Detail:err.Error(),
755773
})
756774
return
757775
}
758-
iflen(data.builds)==0||len(data.templates)==0 {
759-
httpapi.ResourceNotFound(rw)
760-
return
761-
}
762-
ifdata.builds[0].HasAITask==nil||!*data.builds[0].HasAITask {
763-
httpapi.ResourceNotFound(rw)
764-
return
765-
}
766-
767-
// Construct a request to the workspace build creation handler to
768-
// initiate deletion.
769-
buildReq:= codersdk.CreateWorkspaceBuildRequest{
770-
Transition:codersdk.WorkspaceTransitionDelete,
771-
Reason:"Deleted via tasks API",
772-
}
773-
774-
_,err=api.postWorkspaceBuildsInternal(
775-
ctx,
776-
apiKey,
777-
workspace,
778-
buildReq,
779-
func(action policy.Action,object rbac.Objecter)bool {
780-
returnapi.Authorize(r,action,object)
781-
},
782-
audit.WorkspaceBuildBaggageFromRequest(r),
783-
)
784-
iferr!=nil {
785-
httperror.WriteWorkspaceBuildError(ctx,rw,err)
786-
return
787-
}
788776

789-
//Delete build created successfully.
777+
//Task deleted and delete build created successfully.
790778
rw.WriteHeader(http.StatusAccepted)
791779
}
792780

‎coderd/aitasks_test.go‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,6 @@ func TestTasks(t *testing.T) {
348348
t.Run("Delete",func(t*testing.T) {
349349
t.Parallel()
350350

351-
t.Skip("TODO(mafredri): Remove, fixed down-stack!")
352-
353351
t.Run("OK",func(t*testing.T) {
354352
t.Parallel()
355353

‎coderd/coderd.go‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,11 +1022,15 @@ func New(options *Options) *API {
10221022

10231023
r.Route("/{user}",func(r chi.Router) {
10241024
r.Use(httpmw.ExtractOrganizationMembersParam(options.Database,api.HTTPAuth.Authorize))
1025-
r.Get("/{id}",api.taskGet)
1026-
r.Delete("/{id}",api.taskDelete)
1027-
r.Post("/{id}/send",api.taskSend)
1028-
r.Get("/{id}/logs",api.taskLogs)
10291025
r.Post("/",api.tasksCreate)
1026+
1027+
r.Route("/{id}",func(r chi.Router) {
1028+
r.Use(httpmw.ExtractTaskParam(options.Database))
1029+
r.Get("/",api.taskGet)
1030+
r.Delete("/",api.taskDelete)
1031+
r.Post("/send",api.taskSend)
1032+
r.Get("/logs",api.taskLogs)
1033+
})
10301034
})
10311035
})
10321036
r.Route("/mcp",func(r chi.Router) {

‎coderd/database/dbauthz/dbauthz.go‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1764,6 +1764,19 @@ func (q *querier) DeleteTailnetTunnel(ctx context.Context, arg database.DeleteTa
17641764
returnq.db.DeleteTailnetTunnel(ctx,arg)
17651765
}
17661766

1767+
func (q*querier)DeleteTask(ctx context.Context,arg database.DeleteTaskParams) (database.TaskTable,error) {
1768+
task,err:=q.db.GetTaskByID(ctx,arg.ID)
1769+
iferr!=nil {
1770+
return database.TaskTable{},err
1771+
}
1772+
1773+
iferr:=q.authorizeContext(ctx,policy.ActionDelete,task.RBACObject());err!=nil {
1774+
return database.TaskTable{},err
1775+
}
1776+
1777+
returnq.db.DeleteTask(ctx,arg)
1778+
}
1779+
17671780
func (q*querier)DeleteUserSecret(ctx context.Context,id uuid.UUID)error {
17681781
// First get the secret to check ownership
17691782
secret,err:=q.GetUserSecret(ctx,id)

‎coderd/database/dbauthz/dbauthz_test.go‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2362,6 +2362,16 @@ func (s *MethodTestSuite) TestTasks() {
23622362
dbm.EXPECT().GetTaskByID(gomock.Any(),task.ID).Return(task,nil).AnyTimes()
23632363
check.Args(task.ID).Asserts(task,policy.ActionRead).Returns(task)
23642364
}))
2365+
s.Run("DeleteTask",s.Mocked(func(dbm*dbmock.MockStore,faker*gofakeit.Faker,check*expects) {
2366+
task:=testutil.Fake(s.T(),faker, database.Task{})
2367+
arg:= database.DeleteTaskParams{
2368+
ID:task.ID,
2369+
DeletedAt:dbtime.Now(),
2370+
}
2371+
dbm.EXPECT().GetTaskByID(gomock.Any(),task.ID).Return(task,nil).AnyTimes()
2372+
dbm.EXPECT().DeleteTask(gomock.Any(),arg).Return(database.TaskTable{},nil).AnyTimes()
2373+
check.Args(arg).Asserts(task,policy.ActionDelete).Returns(database.TaskTable{})
2374+
}))
23652375
s.Run("InsertTask",s.Mocked(func(dbm*dbmock.MockStore,faker*gofakeit.Faker,check*expects) {
23662376
tpl:=testutil.Fake(s.T(),faker, database.Template{})
23672377
tv:=testutil.Fake(s.T(),faker, database.TemplateVersion{

‎coderd/database/dbmetrics/querymetrics.go‎

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

‎coderd/database/dbmock/dbmock.go‎

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

‎coderd/database/querier.go‎

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries.sql.go‎

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

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp