Skip to content

Commit 321aca1

Browse files
committed
rename to favorite workspace
1 parent 266af06 commit 321aca1

30 files changed

+318
-271
lines changed

coderd/apidoc/docs.go

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

coderd/apidoc/swagger.json

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

coderd/audit.go

+5
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,11 @@ 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+
274279
str += fmt.Sprintf(" %s",
275280
codersdk.ResourceType(alog.ResourceType).FriendlyString())
276281

coderd/audit/diff.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ type Auditable interface {
1313
database.TemplateVersion |
1414
database.User |
1515
database.Workspace |
16-
database.UserPinnedWorkspace |
16+
database.FavoriteWorkspace |
1717
database.GitSSHKey |
1818
database.WorkspaceBuild |
1919
database.AuditableGroup |

coderd/audit/request.go

+6
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ 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()
98100
default:
99101
panic(fmt.Sprintf("unknown resource %T", tgt))
100102
}
@@ -128,6 +130,8 @@ func ResourceID[T Auditable](tgt T) uuid.UUID {
128130
case database.HealthSettings:
129131
// Artificial ID for auditing purposes
130132
return typed.ID
133+
case database.FavoriteWorkspace:
134+
return typed.WorkspaceID
131135
default:
132136
panic(fmt.Sprintf("unknown resource %T", tgt))
133137
}
@@ -159,6 +163,8 @@ func ResourceType[T Auditable](tgt T) database.ResourceType {
159163
return database.ResourceTypeConvertLogin
160164
case database.HealthSettings:
161165
return database.ResourceTypeHealthSettings
166+
case database.FavoriteWorkspace:
167+
return database.ResourceTypeFavoriteWorkspace
162168
default:
163169
panic(fmt.Sprintf("unknown resource %T", typed))
164170
}

coderd/coderd.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -950,8 +950,8 @@ func New(options *Options) *API {
950950
r.Get("/watch", api.watchWorkspace)
951951
r.Put("/extend", api.putExtendWorkspace)
952952
r.Put("/dormant", api.putWorkspaceDormant)
953-
r.Put("/pin", api.putWorkspacePin)
954-
r.Delete("/pin", api.deleteWorkspacePin)
953+
r.Put("/pin", api.putFavoriteWorkspace)
954+
r.Delete("/pin", api.deleteFavoriteWorkspace)
955955
r.Put("/autoupdates", api.putWorkspaceAutoupdates)
956956
r.Get("/resolve-autostart", api.resolveAutostart)
957957
})

coderd/database/dbauthz/dbauthz.go

+14-14
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,20 @@ func authorizedTemplateVersionFromJob(ctx context.Context, q *querier, job datab
656656
}
657657
}
658658

659+
func (q *querier) FavoriteWorkspace(ctx context.Context, arg database.FavoriteWorkspaceParams) error {
660+
if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
661+
return err
662+
}
663+
return q.db.FavoriteWorkspace(ctx, arg)
664+
}
665+
666+
func (q *querier) UnfavoriteWorkspace(ctx context.Context, arg database.UnfavoriteWorkspaceParams) error {
667+
if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
668+
return err
669+
}
670+
return q.db.UnfavoriteWorkspace(ctx, arg)
671+
}
672+
659673
func (q *querier) AcquireLock(ctx context.Context, id int64) error {
660674
return q.db.AcquireLock(ctx, id)
661675
}
@@ -2475,13 +2489,6 @@ func (q *querier) InsertWorkspaceResourceMetadata(ctx context.Context, arg datab
24752489
return q.db.InsertWorkspaceResourceMetadata(ctx, arg)
24762490
}
24772491

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-
24852492
func (q *querier) RegisterWorkspaceProxy(ctx context.Context, arg database.RegisterWorkspaceProxyParams) (database.WorkspaceProxy, error) {
24862493
fetch := func(ctx context.Context, arg database.RegisterWorkspaceProxyParams) (database.WorkspaceProxy, error) {
24872494
return q.db.GetWorkspaceProxyByID(ctx, arg.ID)
@@ -2516,13 +2523,6 @@ func (q *querier) UnarchiveTemplateVersion(ctx context.Context, arg database.Una
25162523
return q.db.UnarchiveTemplateVersion(ctx, arg)
25172524
}
25182525

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-
25262526
func (q *querier) UpdateAPIKeyByID(ctx context.Context, arg database.UpdateAPIKeyByIDParams) error {
25272527
fetch := func(ctx context.Context, arg database.UpdateAPIKeyByIDParams) (database.APIKey, error) {
25282528
return q.db.GetAPIKeyByID(ctx, arg.ID)

coderd/database/dbauthz/dbauthz_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -1578,18 +1578,18 @@ 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) {
1581+
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.PinWorkspaceParams{
1584+
check.Args(database.FavoriteWorkspaceParams{
15851585
UserID: u.ID,
15861586
WorkspaceID: ws.ID,
15871587
}).Asserts(ws, rbac.ActionRead).Returns()
15881588
}))
1589-
s.Run("UnpinWorkspace", s.Subtest(func(db database.Store, check *expects) {
1589+
s.Run("UnfavoriteWorkspace", s.Subtest(func(db database.Store, check *expects) {
15901590
u := dbgen.User(s.T(), db, database.User{})
15911591
ws := dbgen.Workspace(s.T(), db, database.Workspace{OwnerID: u.ID})
1592-
check.Args(database.UnpinWorkspaceParams{
1592+
check.Args(database.UnfavoriteWorkspaceParams{
15931593
UserID: u.ID,
15941594
WorkspaceID: ws.ID,
15951595
}).Asserts(ws, rbac.ActionRead).Returns()

coderd/database/dbmem/dbmem.go

+43-43
Original file line numberDiff line numberDiff line change
@@ -71,7 +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),
74+
favoriteWorkspaces: make([]database.FavoriteWorkspace, 0),
7575
licenses: make([]database.License, 0),
7676
workspaceProxies: make([]database.WorkspaceProxy, 0),
7777
locks: map[int64]struct{}{},
@@ -155,7 +155,7 @@ type data struct {
155155
workspaceResourceMetadata []database.WorkspaceResourceMetadatum
156156
workspaceResources []database.WorkspaceResource
157157
workspaces []database.Workspace
158-
userPinnedWorkspaces []database.UserPinnedWorkspace
158+
favoriteWorkspaces []database.FavoriteWorkspace
159159
workspaceProxies []database.WorkspaceProxy
160160
// Locks is a map of lock names. Any keys within the map are currently
161161
// locked.
@@ -732,6 +732,47 @@ func isNotNull(v interface{}) bool {
732732
return reflect.ValueOf(v).FieldByName("Valid").Bool()
733733
}
734734

735+
func (q *FakeQuerier) FavoriteWorkspace(_ context.Context, arg database.FavoriteWorkspaceParams) error {
736+
err := validateDatabaseType(arg)
737+
if err != nil {
738+
return err
739+
}
740+
741+
q.mutex.Lock()
742+
defer q.mutex.Unlock()
743+
744+
for _, upw := range q.favoriteWorkspaces {
745+
if arg.UserID == upw.UserID && arg.WorkspaceID == upw.WorkspaceID {
746+
return errDuplicateKey
747+
}
748+
}
749+
return nil
750+
}
751+
752+
func (q *FakeQuerier) UnfavoriteWorkspace(_ context.Context, arg database.UnfavoriteWorkspaceParams) error {
753+
err := validateDatabaseType(arg)
754+
if err != nil {
755+
return err
756+
}
757+
758+
q.mutex.Lock()
759+
defer q.mutex.Unlock()
760+
761+
for index, upw := range q.favoriteWorkspaces {
762+
if upw.UserID != arg.UserID {
763+
continue
764+
}
765+
if upw.WorkspaceID != arg.WorkspaceID {
766+
continue
767+
}
768+
q.favoriteWorkspaces[index] = q.favoriteWorkspaces[len(q.apiKeys)-1]
769+
q.favoriteWorkspaces = q.favoriteWorkspaces[:len(q.favoriteWorkspaces)-1]
770+
return nil
771+
}
772+
773+
return nil
774+
}
775+
735776
func (*FakeQuerier) AcquireLock(_ context.Context, _ int64) error {
736777
return xerrors.New("AcquireLock must only be called within a transaction")
737778
}
@@ -5903,23 +5944,6 @@ func (q *FakeQuerier) InsertWorkspaceResourceMetadata(_ context.Context, arg dat
59035944
return metadata, nil
59045945
}
59055946

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-
59235947
func (q *FakeQuerier) RegisterWorkspaceProxy(_ context.Context, arg database.RegisterWorkspaceProxyParams) (database.WorkspaceProxy, error) {
59245948
q.mutex.Lock()
59255949
defer q.mutex.Unlock()
@@ -6003,30 +6027,6 @@ func (q *FakeQuerier) UnarchiveTemplateVersion(_ context.Context, arg database.U
60036027
return sql.ErrNoRows
60046028
}
60056029

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-
60306030
func (q *FakeQuerier) UpdateAPIKeyByID(_ context.Context, arg database.UpdateAPIKeyByIDParams) error {
60316031
if err := validateDatabaseType(arg); err != nil {
60326032
return err

0 commit comments

Comments
 (0)