Skip to content

Commit 7238b95

Browse files
committed
move favorite status to workspaces table to avoid sqlc join sadness
1 parent 89d618d commit 7238b95

21 files changed

+114
-194
lines changed

coderd/audit.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -271,11 +271,6 @@ func auditLogDescription(alog database.GetAuditLogsOffsetRow) string {
271271
return str
272272
}
273273

274-
// "Pinning" (favoriting) a workspace is a separate thing.
275-
if alog.ResourceType == database.ResourceTypeFavoriteWorkspace {
276-
return fmt.Sprintf("{user} pinned workspace %s", alog.ResourceTarget)
277-
}
278-
279274
str += fmt.Sprintf(" %s",
280275
codersdk.ResourceType(alog.ResourceType).FriendlyString())
281276

coderd/audit/diff.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ type Auditable interface {
1313
database.TemplateVersion |
1414
database.User |
1515
database.Workspace |
16-
database.FavoriteWorkspace |
1716
database.GitSSHKey |
1817
database.WorkspaceBuild |
1918
database.AuditableGroup |

coderd/audit/request.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,6 @@ func ResourceTarget[T Auditable](tgt T) string {
9595
return string(typed.ToLoginType)
9696
case database.HealthSettings:
9797
return "" // no target?
98-
case database.FavoriteWorkspace:
99-
return typed.WorkspaceID.String()
10098
default:
10199
panic(fmt.Sprintf("unknown resource %T", tgt))
102100
}
@@ -130,8 +128,6 @@ func ResourceID[T Auditable](tgt T) uuid.UUID {
130128
case database.HealthSettings:
131129
// Artificial ID for auditing purposes
132130
return typed.ID
133-
case database.FavoriteWorkspace:
134-
return typed.WorkspaceID
135131
default:
136132
panic(fmt.Sprintf("unknown resource %T", tgt))
137133
}
@@ -163,8 +159,6 @@ func ResourceType[T Auditable](tgt T) database.ResourceType {
163159
return database.ResourceTypeConvertLogin
164160
case database.HealthSettings:
165161
return database.ResourceTypeHealthSettings
166-
case database.FavoriteWorkspace:
167-
return database.ResourceTypeFavoriteWorkspace
168162
default:
169163
panic(fmt.Sprintf("unknown resource %T", typed))
170164
}

coderd/database/dbauthz/dbauthz.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -891,11 +891,11 @@ func (q *querier) DeleteTailnetTunnel(ctx context.Context, arg database.DeleteTa
891891
return q.db.DeleteTailnetTunnel(ctx, arg)
892892
}
893893

894-
func (q *querier) FavoriteWorkspace(ctx context.Context, arg database.FavoriteWorkspaceParams) error {
895-
if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
896-
return err
894+
func (q *querier) FavoriteWorkspace(ctx context.Context, id uuid.UUID) error {
895+
fetch := func(ctx context.Context, id uuid.UUID) (database.Workspace, error) {
896+
return q.db.GetWorkspaceByID(ctx, id)
897897
}
898-
return q.db.FavoriteWorkspace(ctx, arg)
898+
return update(q.log, q.auth, fetch, q.db.FavoriteWorkspace)(ctx, id)
899899
}
900900

901901
func (q *querier) GetAPIKeyByID(ctx context.Context, id string) (database.APIKey, error) {
@@ -2516,11 +2516,11 @@ func (q *querier) UnarchiveTemplateVersion(ctx context.Context, arg database.Una
25162516
return q.db.UnarchiveTemplateVersion(ctx, arg)
25172517
}
25182518

2519-
func (q *querier) UnfavoriteWorkspace(ctx context.Context, arg database.UnfavoriteWorkspaceParams) error {
2520-
if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
2521-
return err
2519+
func (q *querier) UnfavoriteWorkspace(ctx context.Context, id uuid.UUID) error {
2520+
fetch := func(ctx context.Context, id uuid.UUID) (database.Workspace, error) {
2521+
return q.db.GetWorkspaceByID(ctx, id)
25222522
}
2523-
return q.db.UnfavoriteWorkspace(ctx, arg)
2523+
return update(q.log, q.auth, fetch, q.db.UnfavoriteWorkspace)(ctx, id)
25242524
}
25252525

25262526
func (q *querier) UpdateAPIKeyByID(ctx context.Context, arg database.UpdateAPIKeyByIDParams) error {

coderd/database/dbauthz/dbauthz_test.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1581,18 +1581,12 @@ func (s *MethodTestSuite) TestWorkspace() {
15811581
s.Run("FavoriteWorkspace", s.Subtest(func(db database.Store, check *expects) {
15821582
u := dbgen.User(s.T(), db, database.User{})
15831583
ws := dbgen.Workspace(s.T(), db, database.Workspace{OwnerID: u.ID})
1584-
check.Args(database.FavoriteWorkspaceParams{
1585-
UserID: u.ID,
1586-
WorkspaceID: ws.ID,
1587-
}).Asserts(ws, rbac.ActionRead).Returns()
1584+
check.Args(ws.ID).Asserts(ws, rbac.ActionUpdate).Returns()
15881585
}))
15891586
s.Run("UnfavoriteWorkspace", s.Subtest(func(db database.Store, check *expects) {
15901587
u := dbgen.User(s.T(), db, database.User{})
15911588
ws := dbgen.Workspace(s.T(), db, database.Workspace{OwnerID: u.ID})
1592-
check.Args(database.UnfavoriteWorkspaceParams{
1593-
UserID: u.ID,
1594-
WorkspaceID: ws.ID,
1595-
}).Asserts(ws, rbac.ActionRead).Returns()
1589+
check.Args(ws.ID).Asserts(ws, rbac.ActionUpdate).Returns()
15961590
}))
15971591
}
15981592

coderd/database/dbmem/dbmem.go

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ func New() database.Store {
7171
workspaceBuilds: make([]database.WorkspaceBuildTable, 0),
7272
workspaceApps: make([]database.WorkspaceApp, 0),
7373
workspaces: make([]database.Workspace, 0),
74-
favoriteWorkspaces: make([]database.FavoriteWorkspace, 0),
7574
licenses: make([]database.License, 0),
7675
workspaceProxies: make([]database.WorkspaceProxy, 0),
7776
locks: map[int64]struct{}{},
@@ -155,7 +154,6 @@ type data struct {
155154
workspaceResourceMetadata []database.WorkspaceResourceMetadatum
156155
workspaceResources []database.WorkspaceResource
157156
workspaces []database.Workspace
158-
favoriteWorkspaces []database.FavoriteWorkspace
159157
workspaceProxies []database.WorkspaceProxy
160158
// Locks is a map of lock names. Any keys within the map are currently
161159
// locked.
@@ -1317,7 +1315,7 @@ func (*FakeQuerier) DeleteTailnetTunnel(_ context.Context, arg database.DeleteTa
13171315
return database.DeleteTailnetTunnelRow{}, ErrUnimplemented
13181316
}
13191317

1320-
func (q *FakeQuerier) FavoriteWorkspace(_ context.Context, arg database.FavoriteWorkspaceParams) error {
1318+
func (q *FakeQuerier) FavoriteWorkspace(_ context.Context, arg uuid.UUID) error {
13211319
err := validateDatabaseType(arg)
13221320
if err != nil {
13231321
return err
@@ -1326,10 +1324,13 @@ func (q *FakeQuerier) FavoriteWorkspace(_ context.Context, arg database.Favorite
13261324
q.mutex.Lock()
13271325
defer q.mutex.Unlock()
13281326

1329-
for _, upw := range q.favoriteWorkspaces {
1330-
if arg.UserID == upw.UserID && arg.WorkspaceID == upw.WorkspaceID {
1331-
return errDuplicateKey
1327+
for i := 0; i < len(q.workspaces); i++ {
1328+
if q.workspaces[i].ID != arg {
1329+
continue
13321330
}
1331+
q.workspaces[i].FavoriteOf.Valid = true
1332+
q.workspaces[i].FavoriteOf.UUID = q.workspaces[i].OwnerID
1333+
return nil
13331334
}
13341335
return nil
13351336
}
@@ -6003,7 +6004,7 @@ func (q *FakeQuerier) UnarchiveTemplateVersion(_ context.Context, arg database.U
60036004
return sql.ErrNoRows
60046005
}
60056006

6006-
func (q *FakeQuerier) UnfavoriteWorkspace(_ context.Context, arg database.UnfavoriteWorkspaceParams) error {
6007+
func (q *FakeQuerier) UnfavoriteWorkspace(_ context.Context, arg uuid.UUID) error {
60076008
err := validateDatabaseType(arg)
60086009
if err != nil {
60096010
return err
@@ -6012,15 +6013,11 @@ func (q *FakeQuerier) UnfavoriteWorkspace(_ context.Context, arg database.Unfavo
60126013
q.mutex.Lock()
60136014
defer q.mutex.Unlock()
60146015

6015-
for index, upw := range q.favoriteWorkspaces {
6016-
if upw.UserID != arg.UserID {
6017-
continue
6018-
}
6019-
if upw.WorkspaceID != arg.WorkspaceID {
6016+
for i := 0; i < len(q.workspaces); i++ {
6017+
if q.workspaces[i].ID != arg {
60206018
continue
60216019
}
6022-
q.favoriteWorkspaces[index] = q.favoriteWorkspaces[len(q.apiKeys)-1]
6023-
q.favoriteWorkspaces = q.favoriteWorkspaces[:len(q.favoriteWorkspaces)-1]
6020+
q.workspaces[i].FavoriteOf = uuid.NullUUID{}
60246021
return nil
60256022
}
60266023

coderd/database/dbmetrics/dbmetrics.go

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

coderd/database/dbmock/dbmock.go

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

coderd/database/dump.sql

Lines changed: 5 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
DROP TABLE favorite_workspaces;
1+
ALTER TABLE ONLY workspaces DROP COLUMN favorite_of;
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
CREATE TABLE favorite_workspaces (
2-
user_id uuid NOT NULL,
3-
workspace_id uuid NOT NULL,
4-
UNIQUE(user_id, workspace_id)
5-
);
6-
7-
ALTER TYPE resource_type ADD VALUE IF NOT EXISTS 'favorite_workspace';
1+
ALTER TABLE ONLY workspaces
2+
ADD COLUMN favorite_of uuid DEFAULT NULL;
3+
COMMENT ON COLUMN workspaces.favorite_of IS 'FavoriteOf contains the UUID of the workspace owner if the workspace has been favorited.';

coderd/database/modelqueries.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,9 +213,9 @@ func (q *sqlQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg GetWorkspa
213213
// The name comment is for metric tracking
214214
query := fmt.Sprintf("-- name: GetAuthorizedWorkspaces :many\n%s", filtered)
215215
rows, err := q.db.QueryContext(ctx, query,
216-
arg.OwnerID,
217216
arg.Deleted,
218217
arg.Status,
218+
arg.OwnerID,
219219
arg.OwnerUsername,
220220
arg.TemplateName,
221221
pq.Array(arg.TemplateIDs),
@@ -250,10 +250,10 @@ func (q *sqlQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg GetWorkspa
250250
&i.DormantAt,
251251
&i.DeletingAt,
252252
&i.AutomaticUpdates,
253+
&i.FavoriteOf,
253254
&i.TemplateName,
254255
&i.TemplateVersionID,
255256
&i.TemplateVersionName,
256-
&i.Favorite,
257257
&i.Count,
258258
); err != nil {
259259
return nil, err

coderd/database/models.go

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

coderd/database/querier.go

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

0 commit comments

Comments
 (0)