From c12bc398210f93636687261274b322ae7342eced Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Tue, 4 Apr 2023 08:24:04 -0500 Subject: [PATCH] fix: always show a newly created workspace at the top of the list (#6984) Fixes #5795. --- coderd/database/dbfake/databasefake.go | 1 + coderd/database/dbgen/generator.go | 1 + coderd/database/queries.sql.go | 7 +++++-- coderd/database/queries/workspaces.sql | 5 +++-- coderd/insights_test.go | 6 +----- coderd/workspaces.go | 3 +++ 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/coderd/database/dbfake/databasefake.go b/coderd/database/dbfake/databasefake.go index d5e4084623..6d406cfae8 100644 --- a/coderd/database/dbfake/databasefake.go +++ b/coderd/database/dbfake/databasefake.go @@ -3361,6 +3361,7 @@ func (q *fakeQuerier) InsertWorkspace(_ context.Context, arg database.InsertWork Name: arg.Name, AutostartSchedule: arg.AutostartSchedule, Ttl: arg.Ttl, + LastUsedAt: arg.LastUsedAt, } q.workspaces = append(q.workspaces, workspace) return workspace, nil diff --git a/coderd/database/dbgen/generator.go b/coderd/database/dbgen/generator.go index 42dbb599da..084fad8cf3 100644 --- a/coderd/database/dbgen/generator.go +++ b/coderd/database/dbgen/generator.go @@ -145,6 +145,7 @@ func Workspace(t testing.TB, db database.Store, orig database.Workspace) databas UpdatedAt: takeFirst(orig.UpdatedAt, database.Now()), OrganizationID: takeFirst(orig.OrganizationID, uuid.New()), TemplateID: takeFirst(orig.TemplateID, uuid.New()), + LastUsedAt: takeFirst(orig.LastUsedAt, database.Now()), Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)), AutostartSchedule: orig.AutostartSchedule, Ttl: orig.Ttl, diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 5d48d539d7..4d25b30947 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -8014,10 +8014,11 @@ INSERT INTO template_id, name, autostart_schedule, - ttl + ttl, + last_used_at ) VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING id, created_at, updated_at, owner_id, organization_id, template_id, deleted, name, autostart_schedule, ttl, last_used_at + ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING id, created_at, updated_at, owner_id, organization_id, template_id, deleted, name, autostart_schedule, ttl, last_used_at ` type InsertWorkspaceParams struct { @@ -8030,6 +8031,7 @@ type InsertWorkspaceParams struct { Name string `db:"name" json:"name"` AutostartSchedule sql.NullString `db:"autostart_schedule" json:"autostart_schedule"` Ttl sql.NullInt64 `db:"ttl" json:"ttl"` + LastUsedAt time.Time `db:"last_used_at" json:"last_used_at"` } func (q *sqlQuerier) InsertWorkspace(ctx context.Context, arg InsertWorkspaceParams) (Workspace, error) { @@ -8043,6 +8045,7 @@ func (q *sqlQuerier) InsertWorkspace(ctx context.Context, arg InsertWorkspacePar arg.Name, arg.AutostartSchedule, arg.Ttl, + arg.LastUsedAt, ) var i Workspace err := row.Scan( diff --git a/coderd/database/queries/workspaces.sql b/coderd/database/queries/workspaces.sql index f487faf827..3702bc94e2 100644 --- a/coderd/database/queries/workspaces.sql +++ b/coderd/database/queries/workspaces.sql @@ -270,10 +270,11 @@ INSERT INTO template_id, name, autostart_schedule, - ttl + ttl, + last_used_at ) VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *; + ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING *; -- name: UpdateWorkspaceDeletedByID :exec UPDATE diff --git a/coderd/insights_test.go b/coderd/insights_test.go index ca3374e5f3..ada90a9162 100644 --- a/coderd/insights_test.go +++ b/coderd/insights_test.go @@ -58,13 +58,9 @@ func TestDeploymentInsights(t *testing.T) { daus, err := client.DeploymentDAUs(context.Background()) require.NoError(t, err) - require.Equal(t, &codersdk.DeploymentDAUsResponse{ - Entries: []codersdk.DAUEntry{}, - }, daus, "no DAUs when stats are empty") - res, err := client.Workspaces(ctx, codersdk.WorkspaceFilter{}) require.NoError(t, err) - assert.Zero(t, res.Workspaces[0].LastUsedAt) + assert.NotZero(t, res.Workspaces[0].LastUsedAt) conn, err := client.DialWorkspaceAgent(ctx, resources[0].Agents[0].ID, &codersdk.DialWorkspaceAgentOptions{ Logger: slogtest.Make(t, nil).Named("tailnet"), diff --git a/coderd/workspaces.go b/coderd/workspaces.go index 72e47122ec..5c48d45d59 100644 --- a/coderd/workspaces.go +++ b/coderd/workspaces.go @@ -480,6 +480,9 @@ func (api *API) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Req Name: createWorkspace.Name, AutostartSchedule: dbAutostartSchedule, Ttl: dbTTL, + // The workspaces page will sort by last used at, and it's useful to + // have the newly created workspace at the top of the list! + LastUsedAt: database.Now(), }) if err != nil { return xerrors.Errorf("insert workspace: %w", err)