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

Commit47e8b89

Browse files
Emyrkkylecarbs
authored andcommitted
feat: Single query for all workspaces with optional filter (#1537)
* feat: Add single query for all workspaces using a filter
1 parent502b1ef commit47e8b89

File tree

16 files changed

+222
-164
lines changed

16 files changed

+222
-164
lines changed

‎cli/list.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func list() *cobra.Command {
2929
iferr!=nil {
3030
returnerr
3131
}
32-
workspaces,err:=client.WorkspacesByUser(cmd.Context(),codersdk.Me)
32+
workspaces,err:=client.Workspaces(cmd.Context(), codersdk.WorkspaceFilter{})
3333
iferr!=nil {
3434
returnerr
3535
}

‎coderd/coderd.go‎

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,6 @@ func New(options *Options) (http.Handler, func()) {
253253
})
254254
r.Get("/gitsshkey",api.gitSSHKey)
255255
r.Put("/gitsshkey",api.regenerateGitSSHKey)
256-
r.Get("/workspaces",api.workspacesByUser)
257256
})
258257
})
259258
})
@@ -289,23 +288,28 @@ func New(options *Options) (http.Handler, func()) {
289288
)
290289
r.Get("/",api.workspaceResource)
291290
})
292-
r.Route("/workspaces/{workspace}",func(r chi.Router) {
291+
r.Route("/workspaces",func(r chi.Router) {
293292
r.Use(
294293
apiKeyMiddleware,
295294
authRolesMiddleware,
296-
httpmw.ExtractWorkspaceParam(options.Database),
297295
)
298-
r.Get("/",api.workspace)
299-
r.Route("/builds",func(r chi.Router) {
300-
r.Get("/",api.workspaceBuilds)
301-
r.Post("/",api.postWorkspaceBuilds)
302-
r.Get("/{workspacebuildname}",api.workspaceBuildByName)
303-
})
304-
r.Route("/autostart",func(r chi.Router) {
305-
r.Put("/",api.putWorkspaceAutostart)
306-
})
307-
r.Route("/autostop",func(r chi.Router) {
308-
r.Put("/",api.putWorkspaceAutostop)
296+
r.Get("/",api.workspaces)
297+
r.Route("/{workspace}",func(r chi.Router) {
298+
r.Use(
299+
httpmw.ExtractWorkspaceParam(options.Database),
300+
)
301+
r.Get("/",api.workspace)
302+
r.Route("/builds",func(r chi.Router) {
303+
r.Get("/",api.workspaceBuilds)
304+
r.Post("/",api.postWorkspaceBuilds)
305+
r.Get("/{workspacebuildname}",api.workspaceBuildByName)
306+
})
307+
r.Route("/autostart",func(r chi.Router) {
308+
r.Put("/",api.putWorkspaceAutostart)
309+
})
310+
r.Route("/autostop",func(r chi.Router) {
311+
r.Put("/",api.putWorkspaceAutostop)
312+
})
309313
})
310314
})
311315
r.Route("/workspacebuilds/{workspacebuild}",func(r chi.Router) {

‎coderd/coderd_test.go‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ func TestAuthorizeAllEndpoints(t *testing.T) {
7878
"GET:/api/v2/workspaceagents/me/metadata": {NoAuthorize:true},
7979
"GET:/api/v2/workspaceagents/me/turn": {NoAuthorize:true},
8080
"GET:/api/v2/workspaceagents/{workspaceagent}": {NoAuthorize:true},
81-
"GET:/api/v2/workspaceagents/{workspaceagent}/": {NoAuthorize:true},
8281
"GET:/api/v2/workspaceagents/{workspaceagent}/dial": {NoAuthorize:true},
8382
"GET:/api/v2/workspaceagents/{workspaceagent}/iceservers": {NoAuthorize:true},
8483
"GET:/api/v2/workspaceagents/{workspaceagent}/pty": {NoAuthorize:true},
@@ -95,7 +94,6 @@ func TestAuthorizeAllEndpoints(t *testing.T) {
9594

9695
"GET:/api/v2/users/oauth2/github/callback": {NoAuthorize:true},
9796

98-
"POST:/api/v2/users/{user}/organizations/": {NoAuthorize:true},
9997
"PUT:/api/v2/organizations/{organization}/members/{user}/roles": {NoAuthorize:true},
10098
"GET:/api/v2/organizations/{organization}/provisionerdaemons": {NoAuthorize:true},
10199
"POST:/api/v2/organizations/{organization}/templates": {NoAuthorize:true},
@@ -143,11 +141,21 @@ func TestAuthorizeAllEndpoints(t *testing.T) {
143141
AssertObject:rbac.ResourceWorkspace.InOrg(organization.ID).WithID(workspace.ID.String()).WithOwner(workspace.OwnerID.String()),
144142
},
145143
"GET:/api/v2/organizations/{organization}/workspaces": {StatusCode:http.StatusOK,AssertObject:rbac.ResourceWorkspace},
144+
"GET:/api/v2/workspaces": {StatusCode:http.StatusOK,AssertObject:rbac.ResourceWorkspace},
146145

147146
// These endpoints need payloads to get to the auth part.
148147
"PUT:/api/v2/users/{user}/roles": {StatusCode:http.StatusBadRequest,NoAuthorize:true},
149148
}
150149

150+
fork,v:=rangeassertRoute {
151+
noTrailSlash:=strings.TrimRight(k,"/")
152+
if_,ok:=assertRoute[noTrailSlash];ok&&noTrailSlash!=k {
153+
t.Errorf("route %q & %q is declared twice",noTrailSlash,k)
154+
t.FailNow()
155+
}
156+
assertRoute[noTrailSlash]=v
157+
}
158+
151159
c,_:=srv.Config.Handler.(*chi.Mux)
152160
err=chi.Walk(c,func(methodstring,routestring,handler http.Handler,middlewares...func(http.Handler) http.Handler)error {
153161
name:=method+":"+route

‎coderd/database/databasefake/databasefake.go‎

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,27 @@ func (q *fakeQuerier) GetAllUserRoles(_ context.Context, userID uuid.UUID) (data
291291
},nil
292292
}
293293

294+
func (q*fakeQuerier)GetWorkspacesWithFilter(_ context.Context,arg database.GetWorkspacesWithFilterParams) ([]database.Workspace,error) {
295+
q.mutex.RLock()
296+
deferq.mutex.RUnlock()
297+
298+
workspaces:=make([]database.Workspace,0)
299+
for_,workspace:=rangeq.workspaces {
300+
ifarg.OrganizationID!=uuid.Nil&&workspace.OrganizationID!=arg.OrganizationID {
301+
continue
302+
}
303+
ifarg.OwnerID!=uuid.Nil&&workspace.OwnerID!=arg.OwnerID {
304+
continue
305+
}
306+
if!arg.Deleted&&workspace.Deleted {
307+
continue
308+
}
309+
workspaces=append(workspaces,workspace)
310+
}
311+
312+
returnworkspaces,nil
313+
}
314+
294315
func (q*fakeQuerier)GetWorkspacesByTemplateID(_ context.Context,arg database.GetWorkspacesByTemplateIDParams) ([]database.Workspace,error) {
295316
q.mutex.RLock()
296317
deferq.mutex.RUnlock()
@@ -486,26 +507,6 @@ func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceIDAndName(_ context.Context, a
486507
return database.WorkspaceBuild{},sql.ErrNoRows
487508
}
488509

489-
func (q*fakeQuerier)GetWorkspacesByOrganizationID(_ context.Context,req database.GetWorkspacesByOrganizationIDParams) ([]database.Workspace,error) {
490-
q.mutex.RLock()
491-
deferq.mutex.RUnlock()
492-
493-
workspaces:=make([]database.Workspace,0)
494-
for_,workspace:=rangeq.workspaces {
495-
ifworkspace.OrganizationID!=req.OrganizationID {
496-
continue
497-
}
498-
ifworkspace.Deleted!=req.Deleted {
499-
continue
500-
}
501-
workspaces=append(workspaces,workspace)
502-
}
503-
iflen(workspaces)==0 {
504-
returnnil,sql.ErrNoRows
505-
}
506-
returnworkspaces,nil
507-
}
508-
509510
func (q*fakeQuerier)GetWorkspacesByOrganizationIDs(_ context.Context,req database.GetWorkspacesByOrganizationIDsParams) ([]database.Workspace,error) {
510511
q.mutex.RLock()
511512
deferq.mutex.RUnlock()
@@ -525,23 +526,6 @@ func (q *fakeQuerier) GetWorkspacesByOrganizationIDs(_ context.Context, req data
525526
returnworkspaces,nil
526527
}
527528

528-
func (q*fakeQuerier)GetWorkspacesByOwnerID(_ context.Context,req database.GetWorkspacesByOwnerIDParams) ([]database.Workspace,error) {
529-
q.mutex.RLock()
530-
deferq.mutex.RUnlock()
531-
532-
workspaces:=make([]database.Workspace,0)
533-
for_,workspace:=rangeq.workspaces {
534-
ifworkspace.OwnerID!=req.OwnerID {
535-
continue
536-
}
537-
ifworkspace.Deleted!=req.Deleted {
538-
continue
539-
}
540-
workspaces=append(workspaces,workspace)
541-
}
542-
returnworkspaces,nil
543-
}
544-
545529
func (q*fakeQuerier)GetOrganizations(_ context.Context) ([]database.Organization,error) {
546530
q.mutex.RLock()
547531
deferq.mutex.RUnlock()

‎coderd/database/querier.go‎

Lines changed: 1 addition & 2 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: 30 additions & 60 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries/workspaces.sql‎

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,27 @@ WHERE
88
LIMIT
99
1;
1010

11-
-- name: GetWorkspacesByOrganizationID :many
12-
SELECT*FROM workspacesWHERE organization_id= $1AND deleted= $2;
11+
-- name: GetWorkspacesWithFilter :many
12+
SELECT
13+
*
14+
FROM
15+
workspaces
16+
WHERE
17+
-- Optionally include deleted workspaces
18+
deleted= @deleted
19+
-- Filter by organization_id
20+
AND CASE
21+
WHEN @organization_id :: uuid!='00000000-00000000-00000000-00000000' THEN
22+
organization_id= @organization_id
23+
ELSE true
24+
END
25+
-- Filter by owner_id
26+
AND CASE
27+
WHEN @owner_id :: uuid!='00000000-00000000-00000000-00000000' THEN
28+
owner_id= @owner_id
29+
ELSE true
30+
END
31+
;
1332

1433
-- name: GetWorkspacesByOrganizationIDs :many
1534
SELECT*FROM workspacesWHERE organization_id= ANY(@ids :: uuid [ ])AND deleted= @deleted;
@@ -37,15 +56,6 @@ WHERE
3756
template_id= $1
3857
AND deleted= $2;
3958

40-
-- name: GetWorkspacesByOwnerID :many
41-
SELECT
42-
*
43-
FROM
44-
workspaces
45-
WHERE
46-
owner_id= $1
47-
AND deleted= $2;
48-
4959
-- name: GetWorkspaceByOwnerIDAndName :one
5060
SELECT
5161
*

‎coderd/users_test.go‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,9 @@ func TestWorkspacesByUser(t *testing.T) {
599599
t.Parallel()
600600
client:=coderdtest.New(t,nil)
601601
_=coderdtest.CreateFirstUser(t,client)
602-
workspaces,err:=client.WorkspacesByUser(context.Background(),codersdk.Me)
602+
workspaces,err:=client.Workspaces(context.Background(), codersdk.WorkspaceFilter{
603+
Owner:codersdk.Me,
604+
})
603605
require.NoError(t,err)
604606
require.Len(t,workspaces,0)
605607
})
@@ -628,11 +630,11 @@ func TestWorkspacesByUser(t *testing.T) {
628630
template:=coderdtest.CreateTemplate(t,client,user.OrganizationID,version.ID)
629631
coderdtest.CreateWorkspace(t,client,user.OrganizationID,template.ID)
630632

631-
workspaces,err:=newUserClient.WorkspacesByUser(context.Background(),codersdk.Me)
633+
workspaces,err:=newUserClient.Workspaces(context.Background(), codersdk.WorkspaceFilter{Owner:codersdk.Me})
632634
require.NoError(t,err)
633635
require.Len(t,workspaces,0)
634636

635-
workspaces,err=client.WorkspacesByUser(context.Background(),codersdk.Me)
637+
workspaces,err=client.Workspaces(context.Background(), codersdk.WorkspaceFilter{Owner:codersdk.Me})
636638
require.NoError(t,err)
637639
require.Len(t,workspaces,1)
638640
})

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp