2025-06-17 17:31:07 +02:00
|
|
|
import { getBerthById, getInterestById } from '~/server/utils/nocodb';
|
2025-06-17 17:24:04 +02:00
|
|
|
import { requireAuth } from '~/server/utils/auth';
|
|
|
|
|
|
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
|
|
|
console.log('[test-berth-with-parties] Testing berth with interested parties...');
|
|
|
|
|
|
|
|
|
|
// Check authentication
|
|
|
|
|
await requireAuth(event);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// Get a berth ID from query params or use a default
|
|
|
|
|
const query = getQuery(event);
|
|
|
|
|
const berthId = query.id as string || '1'; // Default to berth ID 1 (A1)
|
|
|
|
|
|
|
|
|
|
console.log('[test-berth-with-parties] Fetching berth:', berthId);
|
|
|
|
|
const berth = await getBerthById(berthId);
|
|
|
|
|
|
|
|
|
|
// Extract interested parties info
|
|
|
|
|
const interestedParties = berth['Interested Parties'];
|
|
|
|
|
let partiesInfo = null;
|
2025-06-17 17:31:07 +02:00
|
|
|
let directFetchComparison = null;
|
2025-06-17 17:24:04 +02:00
|
|
|
|
|
|
|
|
if (interestedParties) {
|
|
|
|
|
if (Array.isArray(interestedParties)) {
|
|
|
|
|
partiesInfo = {
|
|
|
|
|
type: 'array',
|
|
|
|
|
count: interestedParties.length,
|
|
|
|
|
parties: interestedParties.map(party => ({
|
|
|
|
|
id: party.Id,
|
|
|
|
|
name: party['Full Name'],
|
|
|
|
|
email: party['Email Address'],
|
|
|
|
|
salesLevel: party['Sales Process Level'],
|
2025-06-17 17:31:07 +02:00
|
|
|
eoiStatus: party['EOI Status'],
|
|
|
|
|
contractStatus: party['Contract Status'],
|
|
|
|
|
allFields: Object.keys(party).sort()
|
2025-06-17 17:24:04 +02:00
|
|
|
}))
|
|
|
|
|
};
|
2025-06-17 17:31:07 +02:00
|
|
|
|
|
|
|
|
// Compare with direct fetch of first party
|
|
|
|
|
if (interestedParties.length > 0) {
|
|
|
|
|
try {
|
|
|
|
|
const firstPartyId = interestedParties[0].Id;
|
|
|
|
|
const directFetch = await getInterestById(firstPartyId.toString());
|
|
|
|
|
directFetchComparison = {
|
|
|
|
|
fromLinksAPI: {
|
|
|
|
|
id: interestedParties[0].Id,
|
|
|
|
|
name: interestedParties[0]['Full Name'],
|
|
|
|
|
salesLevel: interestedParties[0]['Sales Process Level'],
|
|
|
|
|
eoiStatus: interestedParties[0]['EOI Status'],
|
|
|
|
|
contractStatus: interestedParties[0]['Contract Status'],
|
|
|
|
|
fieldCount: Object.keys(interestedParties[0]).length
|
|
|
|
|
},
|
|
|
|
|
fromDirectFetch: {
|
|
|
|
|
id: directFetch.Id,
|
|
|
|
|
name: directFetch['Full Name'],
|
|
|
|
|
salesLevel: directFetch['Sales Process Level'],
|
|
|
|
|
eoiStatus: directFetch['EOI Status'],
|
|
|
|
|
contractStatus: directFetch['Contract Status'],
|
|
|
|
|
fieldCount: Object.keys(directFetch).length,
|
|
|
|
|
allFields: Object.keys(directFetch).sort()
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
} catch (err) {
|
|
|
|
|
directFetchComparison = { error: 'Failed to fetch directly' };
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-06-17 17:24:04 +02:00
|
|
|
} else if (typeof interestedParties === 'number') {
|
|
|
|
|
partiesInfo = {
|
|
|
|
|
type: 'number',
|
|
|
|
|
count: interestedParties,
|
|
|
|
|
note: 'This is just a count - should have been replaced with actual data'
|
|
|
|
|
};
|
|
|
|
|
} else {
|
|
|
|
|
partiesInfo = {
|
|
|
|
|
type: typeof interestedParties,
|
|
|
|
|
value: interestedParties
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
berthId: berth.Id,
|
|
|
|
|
mooringNumber: berth['Mooring Number'],
|
|
|
|
|
interestedPartiesField: partiesInfo,
|
2025-06-17 17:31:07 +02:00
|
|
|
directFetchComparison,
|
2025-06-17 17:24:04 +02:00
|
|
|
success: Array.isArray(interestedParties) && interestedParties.length > 0
|
|
|
|
|
};
|
|
|
|
|
} catch (error: any) {
|
|
|
|
|
console.error('[test-berth-with-parties] Error:', error);
|
|
|
|
|
return {
|
|
|
|
|
error: error.message || 'Unknown error',
|
|
|
|
|
details: error
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
});
|