Skip to content

Commit faeab68

Browse files
committed
add queries to pin/unpin workspace
1 parent 2e1b52f commit faeab68

File tree

8 files changed

+151
-0
lines changed

8 files changed

+151
-0
lines changed

coderd/database/dbauthz/dbauthz.go

+14
Original file line numberDiff line numberDiff line change
@@ -2475,6 +2475,13 @@ func (q *querier) InsertWorkspaceResourceMetadata(ctx context.Context, arg datab
24752475
return q.db.InsertWorkspaceResourceMetadata(ctx, arg)
24762476
}
24772477

2478+
func (q *querier) PinWorkspace(ctx context.Context, arg database.PinWorkspaceParams) error {
2479+
if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
2480+
return err
2481+
}
2482+
return q.db.PinWorkspace(ctx, arg)
2483+
}
2484+
24782485
func (q *querier) RegisterWorkspaceProxy(ctx context.Context, arg database.RegisterWorkspaceProxyParams) (database.WorkspaceProxy, error) {
24792486
fetch := func(ctx context.Context, arg database.RegisterWorkspaceProxyParams) (database.WorkspaceProxy, error) {
24802487
return q.db.GetWorkspaceProxyByID(ctx, arg.ID)
@@ -2509,6 +2516,13 @@ func (q *querier) UnarchiveTemplateVersion(ctx context.Context, arg database.Una
25092516
return q.db.UnarchiveTemplateVersion(ctx, arg)
25102517
}
25112518

2519+
func (q *querier) UnpinWorkspace(ctx context.Context, arg database.UnpinWorkspaceParams) error {
2520+
if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
2521+
return err
2522+
}
2523+
return q.db.UnpinWorkspace(ctx, arg)
2524+
}
2525+
25122526
func (q *querier) UpdateAPIKeyByID(ctx context.Context, arg database.UpdateAPIKeyByIDParams) error {
25132527
fetch := func(ctx context.Context, arg database.UpdateAPIKeyByIDParams) (database.APIKey, error) {
25142528
return q.db.GetAPIKeyByID(ctx, arg.ID)

coderd/database/dbauthz/dbauthz_test.go

+16
Original file line numberDiff line numberDiff line change
@@ -1578,6 +1578,22 @@ func (s *MethodTestSuite) TestWorkspace() {
15781578
WorkspaceID: ws.ID,
15791579
}).Asserts(ws, rbac.ActionUpdate).Returns()
15801580
}))
1581+
s.Run("PinWorkspace", s.Subtest(func(db database.Store, check *expects) {
1582+
u := dbgen.User(s.T(), db, database.User{})
1583+
ws := dbgen.Workspace(s.T(), db, database.Workspace{OwnerID: u.ID})
1584+
check.Args(database.PinWorkspaceParams{
1585+
UserID: u.ID,
1586+
WorkspaceID: ws.ID,
1587+
}).Asserts(ws, rbac.ActionRead).Returns()
1588+
}))
1589+
s.Run("UnpinWorkspace", s.Subtest(func(db database.Store, check *expects) {
1590+
u := dbgen.User(s.T(), db, database.User{})
1591+
ws := dbgen.Workspace(s.T(), db, database.Workspace{OwnerID: u.ID})
1592+
check.Args(database.UnpinWorkspaceParams{
1593+
UserID: u.ID,
1594+
WorkspaceID: ws.ID,
1595+
}).Asserts(ws, rbac.ActionRead).Returns()
1596+
}))
15811597
}
15821598

15831599
func (s *MethodTestSuite) TestExtraMethods() {

coderd/database/dbmem/dbmem.go

+43
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ func New() database.Store {
7171
workspaceBuilds: make([]database.WorkspaceBuildTable, 0),
7272
workspaceApps: make([]database.WorkspaceApp, 0),
7373
workspaces: make([]database.Workspace, 0),
74+
userPinnedWorkspaces: make([]database.UserPinnedWorkspace, 0),
7475
licenses: make([]database.License, 0),
7576
workspaceProxies: make([]database.WorkspaceProxy, 0),
7677
locks: map[int64]struct{}{},
@@ -154,6 +155,7 @@ type data struct {
154155
workspaceResourceMetadata []database.WorkspaceResourceMetadatum
155156
workspaceResources []database.WorkspaceResource
156157
workspaces []database.Workspace
158+
userPinnedWorkspaces []database.UserPinnedWorkspace
157159
workspaceProxies []database.WorkspaceProxy
158160
// Locks is a map of lock names. Any keys within the map are currently
159161
// locked.
@@ -5901,6 +5903,23 @@ func (q *FakeQuerier) InsertWorkspaceResourceMetadata(_ context.Context, arg dat
59015903
return metadata, nil
59025904
}
59035905

5906+
func (q *FakeQuerier) PinWorkspace(_ context.Context, arg database.PinWorkspaceParams) error {
5907+
err := validateDatabaseType(arg)
5908+
if err != nil {
5909+
return err
5910+
}
5911+
5912+
q.mutex.Lock()
5913+
defer q.mutex.Unlock()
5914+
5915+
for _, upw := range q.userPinnedWorkspaces {
5916+
if arg.UserID == upw.UserID && arg.WorkspaceID == upw.WorkspaceID {
5917+
return errDuplicateKey
5918+
}
5919+
}
5920+
return nil
5921+
}
5922+
59045923
func (q *FakeQuerier) RegisterWorkspaceProxy(_ context.Context, arg database.RegisterWorkspaceProxyParams) (database.WorkspaceProxy, error) {
59055924
q.mutex.Lock()
59065925
defer q.mutex.Unlock()
@@ -5984,6 +6003,30 @@ func (q *FakeQuerier) UnarchiveTemplateVersion(_ context.Context, arg database.U
59846003
return sql.ErrNoRows
59856004
}
59866005

6006+
func (q *FakeQuerier) UnpinWorkspace(_ context.Context, arg database.UnpinWorkspaceParams) error {
6007+
err := validateDatabaseType(arg)
6008+
if err != nil {
6009+
return err
6010+
}
6011+
6012+
q.mutex.Lock()
6013+
defer q.mutex.Unlock()
6014+
6015+
for index, upw := range q.userPinnedWorkspaces {
6016+
if upw.UserID != arg.UserID {
6017+
continue
6018+
}
6019+
if upw.WorkspaceID != arg.WorkspaceID {
6020+
continue
6021+
}
6022+
q.userPinnedWorkspaces[index] = q.userPinnedWorkspaces[len(q.apiKeys)-1]
6023+
q.userPinnedWorkspaces = q.userPinnedWorkspaces[:len(q.userPinnedWorkspaces)-1]
6024+
return nil
6025+
}
6026+
6027+
return nil
6028+
}
6029+
59876030
func (q *FakeQuerier) UpdateAPIKeyByID(_ context.Context, arg database.UpdateAPIKeyByIDParams) error {
59886031
if err := validateDatabaseType(arg); err != nil {
59896032
return err

coderd/database/dbmetrics/dbmetrics.go

+14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbmock/dbmock.go

+28
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/querier.go

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

+28
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspaces.sql

+6
Original file line numberDiff line numberDiff line change
@@ -547,3 +547,9 @@ SET
547547
automatic_updates = $2
548548
WHERE
549549
id = $1;
550+
551+
-- name: PinWorkspace :exec
552+
INSERT INTO user_pinned_workspaces (user_id, workspace_id) VALUES (sqlc.arg(user_id), sqlc.arg(workspace_id));
553+
554+
-- name: UnpinWorkspace :exec
555+
DELETE FROM user_pinned_workspaces WHERE user_id = sqlc.arg(user_id) AND workspace_id = sqlc.arg(workspace_id);

0 commit comments

Comments
 (0)