diff --git a/pkg/restheadspec/handler.go b/pkg/restheadspec/handler.go index 99fa00d..d734698 100644 --- a/pkg/restheadspec/handler.go +++ b/pkg/restheadspec/handler.go @@ -1480,18 +1480,7 @@ func (h *Handler) handleUpdate(ctx context.Context, w common.ResponseWriter, id } } - // Fetch the updated record to return the new values - modelValue := reflect.New(reflect.TypeOf(model)).Interface() - selectQuery = tx.NewSelect().Model(modelValue).Where(fmt.Sprintf("%s = ?", common.QuoteIdent(pkName)), targetID) - if err := selectQuery.ScanModel(ctx); err != nil { - return fmt.Errorf("failed to fetch updated record: %w", err) - } - - updatedRecord = modelValue - - // Store result for hooks - hookCtx.Result = updatedRecord - _ = result // Keep result variable for potential future use + _ = result return nil }) @@ -1501,6 +1490,16 @@ func (h *Handler) handleUpdate(ctx context.Context, w common.ResponseWriter, id return } + // Fetch the updated record after the transaction commits to capture any trigger changes + fetchedRecord := reflect.New(reflect.TypeOf(model)).Interface() + selectQuery := h.db.NewSelect().Model(fetchedRecord).Where(fmt.Sprintf("%s = ?", common.QuoteIdent(pkName)), targetID) + if err := selectQuery.ScanModel(ctx); err != nil { + logger.Error("Failed to fetch updated record: %v", err) + h.sendError(w, http.StatusInternalServerError, "fetch_error", "Failed to fetch updated record", err) + return + } + updatedRecord = fetchedRecord + // Merge the updated record with the original request data // This preserves extra keys from the request and updates values from the database mergedData := h.mergeRecordWithRequest(updatedRecord, dataMap)