Skip to content

Commit 541f985

Browse files
committed
feat: initiator_username joined to workspace_build queries
Using views to make models for sqlc
1 parent 7258d6a commit 541f985

13 files changed

+159
-75
lines changed

coderd/autobuild/executor/lifecycle_executor.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ func (e *Executor) runOnce(t time.Time) Stats {
190190

191191
// TODO(cian): this function duplicates most of api.postWorkspaceBuilds. Refactor.
192192
// See: https://github.com/coder/coder/issues/1401
193-
func build(ctx context.Context, store database.Store, workspace database.Workspace, trans database.WorkspaceTransition, priorHistory database.WorkspaceBuild, priorJob database.ProvisionerJob) error {
193+
func build(ctx context.Context, store database.Store, workspace database.Workspace, trans database.WorkspaceTransition, priorHistory database.WorkspaceBuildsWithInitiator, priorJob database.ProvisionerJob) error {
194194
template, err := store.GetTemplateByID(ctx, workspace.TemplateID)
195195
if err != nil {
196196
return xerrors.Errorf("get workspace template: %w", err)

coderd/database/databasefake/databasefake.go

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -476,63 +476,63 @@ func (q *fakeQuerier) GetWorkspaceOwnerCountsByTemplateIDs(_ context.Context, te
476476
return res, nil
477477
}
478478

479-
func (q *fakeQuerier) GetWorkspaceBuildByID(_ context.Context, id uuid.UUID) (database.WorkspaceBuild, error) {
479+
func (q *fakeQuerier) GetWorkspaceBuildByID(_ context.Context, id uuid.UUID) (database.WorkspaceBuildsWithInitiator, error) {
480480
q.mutex.RLock()
481481
defer q.mutex.RUnlock()
482482

483483
for _, history := range q.workspaceBuilds {
484484
if history.ID.String() == id.String() {
485-
return history, nil
485+
return q.workspaceBuildWithInitiator(history), nil
486486
}
487487
}
488-
return database.WorkspaceBuild{}, sql.ErrNoRows
488+
return database.WorkspaceBuildsWithInitiator{}, sql.ErrNoRows
489489
}
490490

491-
func (q *fakeQuerier) GetWorkspaceBuildByJobID(_ context.Context, jobID uuid.UUID) (database.WorkspaceBuild, error) {
491+
func (q *fakeQuerier) GetWorkspaceBuildByJobID(_ context.Context, jobID uuid.UUID) (database.WorkspaceBuildsWithInitiator, error) {
492492
q.mutex.RLock()
493493
defer q.mutex.RUnlock()
494494

495495
for _, build := range q.workspaceBuilds {
496496
if build.JobID.String() == jobID.String() {
497-
return build, nil
497+
return q.workspaceBuildWithInitiator(build), nil
498498
}
499499
}
500-
return database.WorkspaceBuild{}, sql.ErrNoRows
500+
return database.WorkspaceBuildsWithInitiator{}, sql.ErrNoRows
501501
}
502502

503-
func (q *fakeQuerier) GetLatestWorkspaceBuildByWorkspaceID(_ context.Context, workspaceID uuid.UUID) (database.WorkspaceBuild, error) {
503+
func (q *fakeQuerier) GetLatestWorkspaceBuildByWorkspaceID(_ context.Context, workspaceID uuid.UUID) (database.WorkspaceBuildsWithInitiator, error) {
504504
q.mutex.RLock()
505505
defer q.mutex.RUnlock()
506506

507-
var row database.WorkspaceBuild
507+
var row database.WorkspaceBuildsWithInitiator
508508
var buildNum int32
509509
for _, workspaceBuild := range q.workspaceBuilds {
510510
if workspaceBuild.WorkspaceID.String() == workspaceID.String() && workspaceBuild.BuildNumber > buildNum {
511-
row = workspaceBuild
511+
row = q.workspaceBuildWithInitiator(workspaceBuild)
512512
buildNum = workspaceBuild.BuildNumber
513513
}
514514
}
515515
if buildNum == 0 {
516-
return database.WorkspaceBuild{}, sql.ErrNoRows
516+
return database.WorkspaceBuildsWithInitiator{}, sql.ErrNoRows
517517
}
518518
return row, nil
519519
}
520520

521-
func (q *fakeQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(_ context.Context, ids []uuid.UUID) ([]database.WorkspaceBuild, error) {
521+
func (q *fakeQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(_ context.Context, ids []uuid.UUID) ([]database.WorkspaceBuildsWithInitiator, error) {
522522
q.mutex.RLock()
523523
defer q.mutex.RUnlock()
524524

525-
builds := make(map[uuid.UUID]database.WorkspaceBuild)
525+
builds := make(map[uuid.UUID]database.WorkspaceBuildsWithInitiator)
526526
buildNumbers := make(map[uuid.UUID]int32)
527527
for _, workspaceBuild := range q.workspaceBuilds {
528528
for _, id := range ids {
529529
if id.String() == workspaceBuild.WorkspaceID.String() && workspaceBuild.BuildNumber > buildNumbers[id] {
530-
builds[id] = workspaceBuild
530+
builds[id] = q.workspaceBuildWithInitiator(workspaceBuild)
531531
buildNumbers[id] = workspaceBuild.BuildNumber
532532
}
533533
}
534534
}
535-
var returnBuilds []database.WorkspaceBuild
535+
var returnBuilds []database.WorkspaceBuildsWithInitiator
536536
for i, n := range buildNumbers {
537537
if n > 0 {
538538
b := builds[i]
@@ -546,19 +546,19 @@ func (q *fakeQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(_ context.Context,
546546
}
547547

548548
func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceID(_ context.Context,
549-
params database.GetWorkspaceBuildByWorkspaceIDParams) ([]database.WorkspaceBuild, error) {
549+
params database.GetWorkspaceBuildByWorkspaceIDParams) ([]database.WorkspaceBuildsWithInitiator, error) {
550550
q.mutex.RLock()
551551
defer q.mutex.RUnlock()
552552

553-
history := make([]database.WorkspaceBuild, 0)
553+
history := make([]database.WorkspaceBuildsWithInitiator, 0)
554554
for _, workspaceBuild := range q.workspaceBuilds {
555555
if workspaceBuild.WorkspaceID.String() == params.WorkspaceID.String() {
556-
history = append(history, workspaceBuild)
556+
history = append(history, q.workspaceBuildWithInitiator(workspaceBuild))
557557
}
558558
}
559559

560560
// Order by build_number
561-
slices.SortFunc(history, func(a, b database.WorkspaceBuild) bool {
561+
slices.SortFunc(history, func(a, b database.WorkspaceBuildsWithInitiator) bool {
562562
// use greater than since we want descending order
563563
return a.BuildNumber > b.BuildNumber
564564
})
@@ -600,7 +600,7 @@ func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceID(_ context.Context,
600600
return history, nil
601601
}
602602

603-
func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceIDAndName(_ context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndNameParams) (database.WorkspaceBuild, error) {
603+
func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceIDAndName(_ context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndNameParams) (database.WorkspaceBuildsWithInitiator, error) {
604604
q.mutex.RLock()
605605
defer q.mutex.RUnlock()
606606

@@ -611,9 +611,33 @@ func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceIDAndName(_ context.Context, a
611611
if !strings.EqualFold(workspaceBuild.Name, arg.Name) {
612612
continue
613613
}
614-
return workspaceBuild, nil
614+
615+
return q.workspaceBuildWithInitiator(workspaceBuild), nil
616+
}
617+
return database.WorkspaceBuildsWithInitiator{}, sql.ErrNoRows
618+
}
619+
620+
func (q *fakeQuerier) workspaceBuildWithInitiator(build database.WorkspaceBuild) database.WorkspaceBuildsWithInitiator {
621+
username := "unknown"
622+
usr, err := q.GetUserByID(context.Background(), build.InitiatorID)
623+
if err == nil {
624+
username = usr.Username
625+
}
626+
return database.WorkspaceBuildsWithInitiator{
627+
ID: build.ID,
628+
CreatedAt: build.CreatedAt,
629+
UpdatedAt: build.UpdatedAt,
630+
WorkspaceID: build.WorkspaceID,
631+
TemplateVersionID: build.TemplateVersionID,
632+
Name: build.Name,
633+
BuildNumber: build.BuildNumber,
634+
Transition: build.Transition,
635+
InitiatorID: build.InitiatorID,
636+
ProvisionerState: build.ProvisionerState,
637+
JobID: build.JobID,
638+
Deadline: build.Deadline,
639+
InitiatorUsername: username,
615640
}
616-
return database.WorkspaceBuild{}, sql.ErrNoRows
617641
}
618642

619643
func (q *fakeQuerier) GetWorkspacesByOrganizationIDs(_ context.Context, req database.GetWorkspacesByOrganizationIDsParams) ([]database.Workspace, error) {

coderd/database/dump.sql

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
DROP VIEW IF EXISTS workspace_builds_with_initiator;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
-- This view adds the initiator name to the query for UI purposes.
2+
-- Showing the initiator user ID is not very friendly.
3+
CREATE VIEW workspace_builds_with_initiator AS
4+
-- If the user is nil, just use 'unknown' for now.
5+
SELECT workspace_builds.*, coalesce(users.username, 'unknown') AS initiator_username
6+
FROM workspace_builds
7+
LEFT JOIN users ON workspace_builds.initiator_id = users.id;

coderd/database/models.go

Lines changed: 16 additions & 0 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: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy