fix(store): return ErrRecordNotFound when updating non-existent template
RowsAffected == 0 now returns gorm.ErrRecordNotFound so the handler can respond with 404 instead of silently returning 200. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strconv"
|
||||
|
||||
"gcy_hpc_server/internal/model"
|
||||
@@ -9,6 +10,7 @@ import (
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.uber.org/zap"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type TemplateHandler struct {
|
||||
@@ -111,8 +113,13 @@ func (h *TemplateHandler) UpdateTemplate(c *gin.Context) {
|
||||
}
|
||||
|
||||
if err := h.store.Update(c.Request.Context(), id, &req); err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
h.logger.Warn("template not found for update", zap.Int64("id", id))
|
||||
server.NotFound(c, "template not found")
|
||||
return
|
||||
}
|
||||
h.logger.Error("failed to update template", zap.Int64("id", id), zap.Error(err))
|
||||
server.InternalError(c, err.Error())
|
||||
server.InternalError(c, "failed to update template")
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -100,8 +100,14 @@ func (s *TemplateStore) Update(ctx context.Context, id int64, req *model.UpdateT
|
||||
}
|
||||
|
||||
result := s.db.WithContext(ctx).Model(&model.JobTemplate{}).Where("id = ?", id).Updates(updates)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return gorm.ErrRecordNotFound
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Delete removes a job template by ID. Idempotent — returns nil even if the row doesn't exist.
|
||||
func (s *TemplateStore) Delete(ctx context.Context, id int64) error {
|
||||
|
||||
Reference in New Issue
Block a user