fixes
This commit is contained in:
parent
2f1f970267
commit
cc2cc282b9
|
|
@ -81,14 +81,25 @@
|
||||||
- Added "Waiting for Signatures" as option 2 in EOI Status
|
- Added "Waiting for Signatures" as option 2 in EOI Status
|
||||||
- New order: "Awaiting Further Details" → "Waiting for Signatures" → "Signed"
|
- New order: "Awaiting Further Details" → "Waiting for Signatures" → "Signed"
|
||||||
|
|
||||||
### 11. 404 Errors for Newly Created Records
|
### 11. 404 Errors for Existing Records During Updates
|
||||||
- **Problem**: Newly created records sometimes show 404 when immediately updating/linking
|
- **Problem**: Records that exist in the database return 404 when trying to update them
|
||||||
- **Solution**:
|
- **Solution**:
|
||||||
- Added retry mechanism with exponential backoff to `updateInterest` function
|
- Added verification step to first try fetching the record before updating
|
||||||
- Will retry up to 3 times with increasing delays (1s, 2s, 3s)
|
- Added retry mechanism with exponential backoff (3 retries with 1s, 2s, 3s delays)
|
||||||
- `get-interest-berths` returns empty list instead of throwing error for new records
|
- Enhanced logging to show exact URLs, headers, and request bodies
|
||||||
- This handles NocoDB synchronization delays where records need time to propagate
|
- Added Content-Type header to PATCH requests
|
||||||
- After 3 retries, provides detailed error message explaining possible causes
|
- `get-interest-berths` returns empty list instead of throwing error for 404s
|
||||||
|
|
||||||
|
**Investigation Steps Added:**
|
||||||
|
1. Verify record exists with GET before attempting PATCH
|
||||||
|
2. Log complete request details including URLs and tokens
|
||||||
|
3. Retry with exponential backoff in case of timing issues
|
||||||
|
|
||||||
|
**If the issue persists:**
|
||||||
|
- Check if the NocoDB API token has write permissions
|
||||||
|
- Verify the table ID hasn't changed
|
||||||
|
- Try updating a different record to see if it's record-specific
|
||||||
|
- Check NocoDB logs for more details about the 404 error
|
||||||
|
|
||||||
## Required Environment Variables
|
## Required Environment Variables
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,21 @@ export default defineEventHandler(async (event) => {
|
||||||
try {
|
try {
|
||||||
const body = await readBody(event);
|
const body = await readBody(event);
|
||||||
const { id, data } = body;
|
const { id, data } = body;
|
||||||
console.log('[update-interest] Request body:', { id, dataKeys: data ? Object.keys(data) : 'none' });
|
console.log('[update-interest] Request body:', {
|
||||||
|
id,
|
||||||
|
idType: typeof id,
|
||||||
|
dataKeys: data ? Object.keys(data) : 'none'
|
||||||
|
});
|
||||||
|
|
||||||
if (!id) {
|
if (!id) {
|
||||||
console.error('[update-interest] Missing ID in request');
|
console.error('[update-interest] Missing ID in request');
|
||||||
throw createError({ statusCode: 400, statusMessage: "ID is required" });
|
throw createError({ statusCode: 400, statusMessage: "ID is required" });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure ID is a string
|
||||||
|
const interestId = String(id);
|
||||||
|
console.log('[update-interest] Using ID:', interestId, 'Type:', typeof interestId);
|
||||||
|
|
||||||
if (!data || Object.keys(data).length === 0) {
|
if (!data || Object.keys(data).length === 0) {
|
||||||
console.error('[update-interest] No data provided for update');
|
console.error('[update-interest] No data provided for update');
|
||||||
throw createError({ statusCode: 400, statusMessage: "No data provided for update" });
|
throw createError({ statusCode: 400, statusMessage: "No data provided for update" });
|
||||||
|
|
@ -31,9 +39,9 @@ export default defineEventHandler(async (event) => {
|
||||||
console.log('[update-interest] Removed Id from update data');
|
console.log('[update-interest] Removed Id from update data');
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('[update-interest] Updating interest:', id, 'with fields:', Object.keys(updateData));
|
console.log('[update-interest] Updating interest:', interestId, 'with fields:', Object.keys(updateData));
|
||||||
const updatedInterest = await updateInterest(id, updateData);
|
const updatedInterest = await updateInterest(interestId, updateData);
|
||||||
console.log('[update-interest] Successfully updated interest:', id);
|
console.log('[update-interest] Successfully updated interest:', interestId);
|
||||||
|
|
||||||
return updatedInterest;
|
return updatedInterest;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,17 @@ export enum Table {
|
||||||
Interest = "mbs9hjauug4eseo",
|
Interest = "mbs9hjauug4eseo",
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getNocoDbConfiguration = () => useRuntimeConfig().nocodb;
|
export const getNocoDbConfiguration = () => {
|
||||||
|
const config = useRuntimeConfig().nocodb;
|
||||||
|
console.log('[nocodb] Configuration URL:', config.url);
|
||||||
|
return config;
|
||||||
|
};
|
||||||
|
|
||||||
export const createTableUrl = (table: Table) =>
|
export const createTableUrl = (table: Table) => {
|
||||||
`${getNocoDbConfiguration().url}/api/v2/tables/${table}/records`;
|
const url = `${getNocoDbConfiguration().url}/api/v2/tables/${table}/records`;
|
||||||
|
console.log('[nocodb] Table URL:', url);
|
||||||
|
return url;
|
||||||
|
};
|
||||||
|
|
||||||
export const getInterests = async () =>
|
export const getInterests = async () =>
|
||||||
$fetch<InterestsResponse>(createTableUrl(Table.Interest), {
|
$fetch<InterestsResponse>(createTableUrl(Table.Interest), {
|
||||||
|
|
@ -41,6 +48,20 @@ export const updateInterest = async (id: string, data: Partial<Interest>, retryC
|
||||||
console.log('[nocodb.updateInterest] Updating interest:', id, 'Retry:', retryCount);
|
console.log('[nocodb.updateInterest] Updating interest:', id, 'Retry:', retryCount);
|
||||||
console.log('[nocodb.updateInterest] Data fields:', Object.keys(data));
|
console.log('[nocodb.updateInterest] Data fields:', Object.keys(data));
|
||||||
|
|
||||||
|
// First, try to verify the record exists
|
||||||
|
if (retryCount === 0) {
|
||||||
|
try {
|
||||||
|
console.log('[nocodb.updateInterest] Verifying record exists...');
|
||||||
|
const existingRecord = await getInterestById(id);
|
||||||
|
console.log('[nocodb.updateInterest] Record exists with ID:', existingRecord.Id);
|
||||||
|
} catch (verifyError: any) {
|
||||||
|
console.error('[nocodb.updateInterest] Failed to verify record:', verifyError);
|
||||||
|
if (verifyError.statusCode === 404 || verifyError.status === 404) {
|
||||||
|
console.error('[nocodb.updateInterest] Record verification failed - record not found');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Create a clean data object that matches the InterestsRequest schema
|
// Create a clean data object that matches the InterestsRequest schema
|
||||||
// Remove any properties that are not in the schema or shouldn't be sent
|
// Remove any properties that are not in the schema or shouldn't be sent
|
||||||
const cleanData: Record<string, any> = {};
|
const cleanData: Record<string, any> = {};
|
||||||
|
|
@ -97,10 +118,16 @@ export const updateInterest = async (id: string, data: Partial<Interest>, retryC
|
||||||
console.log('[nocodb.updateInterest] URL:', url);
|
console.log('[nocodb.updateInterest] URL:', url);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
console.log('[nocodb.updateInterest] Sending PATCH request with headers:', {
|
||||||
|
"xc-token": getNocoDbConfiguration().token ? "***" + getNocoDbConfiguration().token.slice(-4) : "not set"
|
||||||
|
});
|
||||||
|
console.log('[nocodb.updateInterest] Request body:', JSON.stringify(cleanData, null, 2));
|
||||||
|
|
||||||
const result = await $fetch<Interest>(url, {
|
const result = await $fetch<Interest>(url, {
|
||||||
method: "PATCH",
|
method: "PATCH",
|
||||||
headers: {
|
headers: {
|
||||||
"xc-token": getNocoDbConfiguration().token,
|
"xc-token": getNocoDbConfiguration().token,
|
||||||
|
"Content-Type": "application/json"
|
||||||
},
|
},
|
||||||
body: cleanData
|
body: cleanData
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue