@@ -58,7 +58,7 @@ func New() database.Store {
5858workspaceResourceMetadata :make ([]database.WorkspaceResourceMetadatum ,0 ),
5959provisionerJobs :make ([]database.ProvisionerJob ,0 ),
6060templateVersions :make ([]database.TemplateVersion ,0 ),
61- templates :make ([]database.Template ,0 ),
61+ templates :make ([]database.TemplateTable ,0 ),
6262workspaceAgentStats :make ([]database.WorkspaceAgentStat ,0 ),
6363workspaceAgentLogs :make ([]database.WorkspaceAgentStartupLog ,0 ),
6464workspaceBuilds :make ([]database.WorkspaceBuild ,0 ),
@@ -130,7 +130,7 @@ type data struct {
130130templateVersions []database.TemplateVersion
131131templateVersionParameters []database.TemplateVersionParameter
132132templateVersionVariables []database.TemplateVersionVariable
133- templates []database.Template
133+ templates []database.TemplateTable
134134workspaceAgents []database.WorkspaceAgent
135135workspaceAgentMetadata []database.WorkspaceAgentMetadatum
136136workspaceAgentLogs []database.WorkspaceAgentStartupLog
@@ -446,12 +446,37 @@ func (q *FakeQuerier) getLatestWorkspaceBuildByWorkspaceIDNoLock(_ context.Conte
446446func (q * FakeQuerier )getTemplateByIDNoLock (_ context.Context ,id uuid.UUID ) (database.Template ,error ) {
447447for _ ,template := range q .templates {
448448if template .ID == id {
449- return template . DeepCopy ( ),nil
449+ return q . templateWithUserNoLock ( template ),nil
450450}
451451}
452452return database.Template {},sql .ErrNoRows
453453}
454454
455+ func (q * FakeQuerier )templatesWithUserNoLock (tpl []database.TemplateTable ) []database.Template {
456+ cpy := make ([]database.Template ,0 ,len (tpl ))
457+ for _ ,t := range tpl {
458+ cpy = append (cpy ,q .templateWithUserNoLock (t ))
459+ }
460+ return cpy
461+ }
462+
463+ func (q * FakeQuerier )templateWithUserNoLock (tpl database.TemplateTable ) database.Template {
464+ var user database.User
465+ for _ ,_user := range q .users {
466+ if _user .ID == tpl .CreatedBy {
467+ user = _user
468+ break
469+ }
470+ }
471+ var withUser database.Template
472+ // This is a cheeky way to copy the fields over without explicitly listing them all.
473+ d ,_ := json .Marshal (tpl )
474+ _ = json .Unmarshal (d ,& withUser )
475+ withUser .CreatedByUsername = user .Username
476+ withUser .CreatedByAvatarURL = user .AvatarURL .String
477+ return withUser
478+ }
479+
455480func (q * FakeQuerier )getTemplateVersionByIDNoLock (_ context.Context ,templateVersionID uuid.UUID ) (database.TemplateVersion ,error ) {
456481for _ ,templateVersion := range q .templateVersions {
457482if templateVersion .ID != templateVersionID {
@@ -1869,7 +1894,7 @@ func (q *FakeQuerier) GetTemplateByOrganizationAndName(_ context.Context, arg da
18691894if template .Deleted != arg .Deleted {
18701895continue
18711896}
1872- return template . DeepCopy ( ),nil
1897+ return q . templateWithUserNoLock ( template ),nil
18731898}
18741899return database.Template {},sql .ErrNoRows
18751900}
@@ -2092,17 +2117,14 @@ func (q *FakeQuerier) GetTemplates(_ context.Context) ([]database.Template, erro
20922117defer q .mutex .RUnlock ()
20932118
20942119templates := slices .Clone (q .templates )
2095- for i := range templates {
2096- templates [i ]= templates [i ].DeepCopy ()
2097- }
2098- slices .SortFunc (templates ,func (i ,j database.Template )bool {
2120+ slices .SortFunc (templates ,func (i ,j database.TemplateTable )bool {
20992121if i .Name != j .Name {
21002122return i .Name < j .Name
21012123}
21022124return i .ID .String ()< j .ID .String ()
21032125})
21042126
2105- return templates ,nil
2127+ return q . templatesWithUserNoLock ( templates ) ,nil
21062128}
21072129
21082130func (q * FakeQuerier )GetTemplatesWithFilter (ctx context.Context ,arg database.GetTemplatesWithFilterParams ) ([]database.Template ,error ) {
@@ -3436,16 +3458,16 @@ func (q *FakeQuerier) InsertReplica(_ context.Context, arg database.InsertReplic
34363458return replica ,nil
34373459}
34383460
3439- func (q * FakeQuerier )InsertTemplate (_ context.Context ,arg database.InsertTemplateParams )(database. Template , error ) {
3461+ func (q * FakeQuerier )InsertTemplate (_ context.Context ,arg database.InsertTemplateParams )error {
34403462if err := validateDatabaseType (arg );err != nil {
3441- return database. Template {}, err
3463+ return err
34423464}
34433465
34443466q .mutex .Lock ()
34453467defer q .mutex .Unlock ()
34463468
34473469//nolint:gosimple
3448- template := database.Template {
3470+ template := database.TemplateTable {
34493471ID :arg .ID ,
34503472CreatedAt :arg .CreatedAt ,
34513473UpdatedAt :arg .UpdatedAt ,
@@ -3464,7 +3486,7 @@ func (q *FakeQuerier) InsertTemplate(_ context.Context, arg database.InsertTempl
34643486AllowUserAutostop :true ,
34653487}
34663488q .templates = append (q .templates ,template )
3467- return template . DeepCopy (), nil
3489+ return nil
34683490}
34693491
34703492func (q * FakeQuerier )InsertTemplateVersion (_ context.Context ,arg database.InsertTemplateVersionParams ) (database.TemplateVersion ,error ) {
@@ -4172,9 +4194,9 @@ func (q *FakeQuerier) UpdateReplica(_ context.Context, arg database.UpdateReplic
41724194return database.Replica {},sql .ErrNoRows
41734195}
41744196
4175- func (q * FakeQuerier )UpdateTemplateACLByID (_ context.Context ,arg database.UpdateTemplateACLByIDParams )(database. Template , error ) {
4197+ func (q * FakeQuerier )UpdateTemplateACLByID (_ context.Context ,arg database.UpdateTemplateACLByIDParams )error {
41764198if err := validateDatabaseType (arg );err != nil {
4177- return database. Template {}, err
4199+ return err
41784200}
41794201
41804202q .mutex .Lock ()
@@ -4186,11 +4208,11 @@ func (q *FakeQuerier) UpdateTemplateACLByID(_ context.Context, arg database.Upda
41864208template .UserACL = arg .UserACL
41874209
41884210q .templates [i ]= template
4189- return template . DeepCopy (), nil
4211+ return nil
41904212}
41914213}
41924214
4193- return database. Template {}, sql .ErrNoRows
4215+ return sql .ErrNoRows
41944216}
41954217
41964218func (q * FakeQuerier )UpdateTemplateActiveVersionByID (_ context.Context ,arg database.UpdateTemplateActiveVersionByIDParams )error {
@@ -4233,9 +4255,9 @@ func (q *FakeQuerier) UpdateTemplateDeletedByID(_ context.Context, arg database.
42334255return sql .ErrNoRows
42344256}
42354257
4236- func (q * FakeQuerier )UpdateTemplateMetaByID (_ context.Context ,arg database.UpdateTemplateMetaByIDParams )(database. Template , error ) {
4258+ func (q * FakeQuerier )UpdateTemplateMetaByID (_ context.Context ,arg database.UpdateTemplateMetaByIDParams )error {
42374259if err := validateDatabaseType (arg );err != nil {
4238- return database. Template {}, err
4260+ return err
42394261}
42404262
42414263q .mutex .Lock ()
@@ -4251,15 +4273,15 @@ func (q *FakeQuerier) UpdateTemplateMetaByID(_ context.Context, arg database.Upd
42514273tpl .Description = arg .Description
42524274tpl .Icon = arg .Icon
42534275q .templates [idx ]= tpl
4254- return tpl . DeepCopy (), nil
4276+ return nil
42554277}
42564278
4257- return database. Template {}, sql .ErrNoRows
4279+ return sql .ErrNoRows
42584280}
42594281
4260- func (q * FakeQuerier )UpdateTemplateScheduleByID (_ context.Context ,arg database.UpdateTemplateScheduleByIDParams )(database. Template , error ) {
4282+ func (q * FakeQuerier )UpdateTemplateScheduleByID (_ context.Context ,arg database.UpdateTemplateScheduleByIDParams )error {
42614283if err := validateDatabaseType (arg );err != nil {
4262- return database. Template {}, err
4284+ return err
42634285}
42644286
42654287q .mutex .Lock ()
@@ -4278,10 +4300,10 @@ func (q *FakeQuerier) UpdateTemplateScheduleByID(_ context.Context, arg database
42784300tpl .InactivityTTL = arg .InactivityTTL
42794301tpl .LockedTTL = arg .LockedTTL
42804302q .templates [idx ]= tpl
4281- return tpl . DeepCopy (), nil
4303+ return nil
42824304}
42834305
4284- return database. Template {}, sql .ErrNoRows
4306+ return sql .ErrNoRows
42854307}
42864308
42874309func (q * FakeQuerier )UpdateTemplateVersionByID (_ context.Context ,arg database.UpdateTemplateVersionByIDParams ) (database.TemplateVersion ,error ) {
@@ -4984,7 +5006,8 @@ func (q *FakeQuerier) GetAuthorizedTemplates(ctx context.Context, arg database.G
49845006}
49855007
49865008var templates []database.Template
4987- for _ ,template := range q .templates {
5009+ for _ ,templateTable := range q .templates {
5010+ template := q .templateWithUserNoLock (templateTable )
49885011if prepared != nil && prepared .Authorize (ctx ,template .RBACObject ())!= nil {
49895012continue
49905013}
@@ -5012,7 +5035,7 @@ func (q *FakeQuerier) GetAuthorizedTemplates(ctx context.Context, arg database.G
50125035continue
50135036}
50145037}
5015- templates = append (templates ,template . DeepCopy () )
5038+ templates = append (templates ,template )
50165039}
50175040if len (templates )> 0 {
50185041slices .SortFunc (templates ,func (i ,j database.Template )bool {
@@ -5031,7 +5054,7 @@ func (q *FakeQuerier) GetTemplateGroupRoles(_ context.Context, id uuid.UUID) ([]
50315054q .mutex .RLock ()
50325055defer q .mutex .RUnlock ()
50335056
5034- var template database.Template
5057+ var template database.TemplateTable
50355058for _ ,t := range q .templates {
50365059if t .ID == id {
50375060template = t
@@ -5068,7 +5091,7 @@ func (q *FakeQuerier) GetTemplateUserRoles(_ context.Context, id uuid.UUID) ([]d
50685091q .mutex .RLock ()
50695092defer q .mutex .RUnlock ()
50705093
5071- var template database.Template
5094+ var template database.TemplateTable
50725095for _ ,t := range q .templates {
50735096if t .ID == id {
50745097template = t