mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
chore: add template_with_user view to include user contextual data (#8568)
* chore: Refactor template sql queries to use new view * TemplateWithUser -> Template * Add unit test to enforce good view
This commit is contained in:
@@ -343,39 +343,52 @@ func (*EnterpriseTemplateScheduleStore) SetTemplateScheduleOptions(ctx context.C
|
||||
return tpl, nil
|
||||
}
|
||||
|
||||
template, err := db.UpdateTemplateScheduleByID(ctx, database.UpdateTemplateScheduleByIDParams{
|
||||
ID: tpl.ID,
|
||||
UpdatedAt: database.Now(),
|
||||
AllowUserAutostart: opts.UserAutostartEnabled,
|
||||
AllowUserAutostop: opts.UserAutostopEnabled,
|
||||
DefaultTTL: int64(opts.DefaultTTL),
|
||||
MaxTTL: int64(opts.MaxTTL),
|
||||
FailureTTL: int64(opts.FailureTTL),
|
||||
InactivityTTL: int64(opts.InactivityTTL),
|
||||
LockedTTL: int64(opts.LockedTTL),
|
||||
})
|
||||
if err != nil {
|
||||
return database.Template{}, xerrors.Errorf("update template schedule: %w", err)
|
||||
}
|
||||
|
||||
// Update all workspaces using the template to set the user defined schedule
|
||||
// to be within the new bounds. This essentially does the following for each
|
||||
// workspace using the template.
|
||||
// if (template.ttl != NULL) {
|
||||
// workspace.ttl = min(workspace.ttl, template.ttl)
|
||||
// }
|
||||
//
|
||||
// NOTE: this does not apply to currently running workspaces as their
|
||||
// schedule information is committed to the workspace_build during start.
|
||||
// This limitation is displayed to the user while editing the template.
|
||||
if opts.MaxTTL > 0 {
|
||||
err = db.UpdateWorkspaceTTLToBeWithinTemplateMax(ctx, database.UpdateWorkspaceTTLToBeWithinTemplateMaxParams{
|
||||
TemplateID: template.ID,
|
||||
TemplateMaxTTL: int64(opts.MaxTTL),
|
||||
var template database.Template
|
||||
err := db.InTx(func(db database.Store) error {
|
||||
err := db.UpdateTemplateScheduleByID(ctx, database.UpdateTemplateScheduleByIDParams{
|
||||
ID: tpl.ID,
|
||||
UpdatedAt: database.Now(),
|
||||
AllowUserAutostart: opts.UserAutostartEnabled,
|
||||
AllowUserAutostop: opts.UserAutostopEnabled,
|
||||
DefaultTTL: int64(opts.DefaultTTL),
|
||||
MaxTTL: int64(opts.MaxTTL),
|
||||
FailureTTL: int64(opts.FailureTTL),
|
||||
InactivityTTL: int64(opts.InactivityTTL),
|
||||
LockedTTL: int64(opts.LockedTTL),
|
||||
})
|
||||
if err != nil {
|
||||
return database.Template{}, xerrors.Errorf("update TTL of all workspaces on template to be within new template max TTL: %w", err)
|
||||
return xerrors.Errorf("update template schedule: %w", err)
|
||||
}
|
||||
|
||||
// Update all workspaces using the template to set the user defined schedule
|
||||
// to be within the new bounds. This essentially does the following for each
|
||||
// workspace using the template.
|
||||
// if (template.ttl != NULL) {
|
||||
// workspace.ttl = min(workspace.ttl, template.ttl)
|
||||
// }
|
||||
//
|
||||
// NOTE: this does not apply to currently running workspaces as their
|
||||
// schedule information is committed to the workspace_build during start.
|
||||
// This limitation is displayed to the user while editing the template.
|
||||
if opts.MaxTTL > 0 {
|
||||
err = db.UpdateWorkspaceTTLToBeWithinTemplateMax(ctx, database.UpdateWorkspaceTTLToBeWithinTemplateMaxParams{
|
||||
TemplateID: tpl.ID,
|
||||
TemplateMaxTTL: int64(opts.MaxTTL),
|
||||
})
|
||||
if err != nil {
|
||||
return xerrors.Errorf("update TTL of all workspaces on template to be within new template max TTL: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
template, err = db.GetTemplateByID(ctx, tpl.ID)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("get updated template schedule: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}, nil)
|
||||
if err != nil {
|
||||
return database.Template{}, err
|
||||
}
|
||||
|
||||
return template, nil
|
||||
|
||||
@@ -163,7 +163,7 @@ func (api *API) patchTemplateACL(rw http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
template, err = tx.UpdateTemplateACLByID(ctx, database.UpdateTemplateACLByIDParams{
|
||||
err = tx.UpdateTemplateACLByID(ctx, database.UpdateTemplateACLByIDParams{
|
||||
ID: template.ID,
|
||||
UserACL: template.UserACL,
|
||||
GroupACL: template.GroupACL,
|
||||
@@ -171,6 +171,10 @@ func (api *API) patchTemplateACL(rw http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
return xerrors.Errorf("update template ACL by ID: %w", err)
|
||||
}
|
||||
template, err = tx.GetTemplateByID(ctx, template.ID)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("get updated template by ID: %w", err)
|
||||
}
|
||||
return nil
|
||||
}, nil)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user