fix(handlers): handle RowsAffected errors in tokens, approvals, restart #1905

Merged
agent-dev-a merged 1 commits from fix/rowsaffected-batch-2 into main 2026-05-26 13:27:36 +00:00
3 changed files with 17 additions and 3 deletions
@@ -200,7 +200,12 @@ func (h *ApprovalsHandler) Decide(c *gin.Context) {
return
}
rows, _ := result.RowsAffected()
rows, err := result.RowsAffected()
if err != nil {
log.Printf("Approval decision RowsAffected error approval=%s workspace=%s: %v", approvalID, workspaceID, err)
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to update"})
return
}
if rows == 0 {
c.JSON(http.StatusNotFound, gin.H{"error": "approval not found or already decided"})
return
+6 -1
View File
@@ -153,7 +153,12 @@ func (h *TokenHandler) Revoke(c *gin.Context) {
return
}
rows, _ := result.RowsAffected()
rows, err := result.RowsAffected()
if err != nil {
log.Printf("tokens: revoke RowsAffected error token=%s workspace=%s: %v", tokenID, workspaceID, err)
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to revoke token"})
return
}
if rows == 0 {
c.JSON(http.StatusNotFound, gin.H{"error": "token not found or already revoked"})
return
@@ -466,7 +466,11 @@ func (h *WorkspaceHandler) HibernateWorkspace(ctx context.Context, workspaceID s
log.Printf("Hibernate: atomic claim failed for %s: %v", workspaceID, err)
return
}
rowsAffected, _ := result.RowsAffected()
rowsAffected, err := result.RowsAffected()
if err != nil {
log.Printf("Hibernate: RowsAffected error for %s: %v", workspaceID, err)
return
}
if rowsAffected == 0 {
// Either already hibernating/hibernated/paused/removed, or active_tasks > 0 —
// safe to abort without side-effects.