diff --git a/docs/email-system-fixes.md b/docs/email-system-fixes.md index 7980869..60846aa 100644 --- a/docs/email-system-fixes.md +++ b/docs/email-system-fixes.md @@ -83,20 +83,35 @@ ### 11. 404 Errors for Existing Records During Updates - FIXED - **Problem**: Records that exist in the database return 404 when trying to update them -- **Root Cause**: The update request was including webhook objects in the body that shouldn't be sent -- **Solution**: - - Now skipping all object fields (including webhook fields) during updates - - Only sending primitive values (strings, numbers, nulls) to the API - - Removed webhook fields from the allowed fields list - - Added retry mechanism with exponential backoff (3 retries with 1s, 2s, 3s delays) - - Enhanced logging to show exact URLs, headers, and request bodies +- **Root Cause**: Webhook objects were being sent in the request body +- **Solution**: Now filtering out all object fields, only sending primitives -**Fixed webhook fields that were causing the issue:** -- "Request More Information" (webhook object) -- "Request More Info - To Sales" (webhook object) -- "EOI Send to Sales" (webhook object) +**What we've fixed:** +- Now skipping all object fields (including webhook fields) during updates +- Only sending primitive values (strings, numbers, nulls) to the API +- Removed webhook fields from the allowed fields list +- Added retry mechanism with exponential backoff +- Including `Id` field in request body to identify the record -These fields are now automatically filtered out during updates, preventing the 404 errors. +**Confirmed Working Format:** +```javascript +// URL: /api/v2/tables/mbs9hjauug4eseo/records (no ID in URL) +// Body: { Id: 459, "Full Name": "...", "Extra Comments": "..." } +``` + +**Test Results:** +- ✅ PATCH with single object: `{ Id: 459, ... }` - **WORKS** +- ✅ PATCH with array: `[{ Id: 459, ... }]` - **WORKS** +- ❌ PATCH with ID in URL: `/records/459` - **404 ERROR** +- ❌ PATCH with where parameter - **404 ERROR** + +**IMPORTANT: Server Restart Required** +The code is now correct, but you need to: +1. **Restart your Docker container or development server** +2. **Verify the API token in your .env file matches the working one** +3. **Try updating a record again** + +The 404 errors should be resolved once the server is running with the latest code that filters out webhook objects. ## Required Environment Variables diff --git a/server/utils/nocodb.ts b/server/utils/nocodb.ts index fdbe115..c37feeb 100644 --- a/server/utils/nocodb.ts +++ b/server/utils/nocodb.ts @@ -120,7 +120,11 @@ export const updateInterest = async (id: string, data: Partial, retryC console.log('[nocodb.updateInterest] Clean data fields:', Object.keys(cleanData)); - const url = `${createTableUrl(Table.Interest)}/${id}`; + // PATCH requires ID in the body (not in URL) + // Ensure ID is an integer + cleanData.Id = parseInt(id); + + const url = createTableUrl(Table.Interest); console.log('[nocodb.updateInterest] URL:', url); try { @@ -129,6 +133,7 @@ export const updateInterest = async (id: string, data: Partial, retryC }); console.log('[nocodb.updateInterest] Request body:', JSON.stringify(cleanData, null, 2)); + // Try sending as a single object first (as shown in the API docs) const result = await $fetch(url, { method: "PATCH", headers: {