@@ -14,6 +14,7 @@ import (
14
14
15
15
"github.com/google/uuid"
16
16
"github.com/tabbed/pqtype"
17
+ "golang.org/x/xerrors"
17
18
18
19
"cdr.dev/slog"
19
20
"github.com/coder/coder/coderd/database"
@@ -240,30 +241,50 @@ func (api *API) auditLogIsResourceDeleted(ctx context.Context, alog database.Get
240
241
case database .ResourceTypeTemplate :
241
242
template , err := api .Database .GetTemplateByID (ctx , alog .ResourceID )
242
243
if err != nil {
243
- api .Logger .Error (ctx , "could not fetch template" , slog .Error (err ))
244
+ if xerrors .Is (err , sql .ErrNoRows ) {
245
+ return true
246
+ } else {
247
+ api .Logger .Error (ctx , "fetch template" , slog .Error (err ))
248
+ }
244
249
}
245
250
return template .Deleted
246
251
case database .ResourceTypeUser :
247
252
user , err := api .Database .GetUserByID (ctx , alog .ResourceID )
248
253
if err != nil {
249
- api .Logger .Error (ctx , "could not fetch user" , slog .Error (err ))
254
+ if xerrors .Is (err , sql .ErrNoRows ) {
255
+ return true
256
+ } else {
257
+ api .Logger .Error (ctx , "fetch user" , slog .Error (err ))
258
+ }
250
259
}
251
260
return user .Deleted
252
261
case database .ResourceTypeWorkspace :
253
262
workspace , err := api .Database .GetWorkspaceByID (ctx , alog .ResourceID )
254
263
if err != nil {
255
- api .Logger .Error (ctx , "could not fetch workspace" , slog .Error (err ))
264
+ if xerrors .Is (err , sql .ErrNoRows ) {
265
+ return true
266
+ } else {
267
+ api .Logger .Error (ctx , "fetch workspace" , slog .Error (err ))
268
+ }
256
269
}
257
270
return workspace .Deleted
258
271
case database .ResourceTypeWorkspaceBuild :
259
272
workspaceBuild , err := api .Database .GetWorkspaceBuildByID (ctx , alog .ResourceID )
260
273
if err != nil {
261
- api .Logger .Error (ctx , "could not fetch workspace build" , slog .Error (err ))
274
+ if xerrors .Is (err , sql .ErrNoRows ) {
275
+ return true
276
+ } else {
277
+ api .Logger .Error (ctx , "fetch workspace build" , slog .Error (err ))
278
+ }
262
279
}
263
280
// We use workspace as a proxy for workspace build here
264
281
workspace , err := api .Database .GetWorkspaceByID (ctx , workspaceBuild .WorkspaceID )
265
282
if err != nil {
266
- api .Logger .Error (ctx , "could not fetch workspace" , slog .Error (err ))
283
+ if xerrors .Is (err , sql .ErrNoRows ) {
284
+ return true
285
+ } else {
286
+ api .Logger .Error (ctx , "fetch workspace" , slog .Error (err ))
287
+ }
267
288
}
268
289
return workspace .Deleted
269
290
default :
@@ -296,7 +317,7 @@ func (api *API) auditLogResourceLink(ctx context.Context, alog database.GetAudit
296
317
var additionalFields AdditionalFields
297
318
err := json .Unmarshal (additionalFieldsBytes , & additionalFields )
298
319
if err != nil {
299
- api .Logger .Error (ctx , "could not unmarshal workspace name" , slog .Error (err ))
320
+ api .Logger .Error (ctx , "unmarshal workspace name" , slog .Error (err ))
300
321
}
301
322
return fmt .Sprintf ("/@%s/%s/builds/%s" ,
302
323
alog .UserUsername .String , additionalFields .WorkspaceName , additionalFields .BuildNumber )
0 commit comments