Thanks to visit codestin.com
Credit goes to github.com

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)