port-nimara-client-portal/server/api/get-berth-interested-partie...

122 lines
4.0 KiB
TypeScript
Raw Normal View History

import { getNocoDbConfiguration } from "../utils/nocodb";
import { requireAuth } from "../utils/auth";
export default defineEventHandler(async (event) => {
console.log('[get-berth-interested-parties] Request received');
// Check authentication
await requireAuth(event);
try {
const query = getQuery(event);
const { berthId } = query;
console.log('[get-berth-interested-parties] Request params:', { berthId });
if (!berthId) {
throw createError({
statusCode: 400,
statusMessage: "berthId is required"
});
}
const config = getNocoDbConfiguration();
const berthsTableId = "mczgos9hr3oa9qc"; // Berth table ID
// The "Interested Parties" field ID needs to be determined
// For now, let's try to fetch the berth first and see what we get
const berthUrl = `${config.url}/api/v2/tables/${berthsTableId}/records/${berthId}`;
console.log('[get-berth-interested-parties] Fetching berth:', berthUrl);
const berth = await $fetch(berthUrl, {
headers: {
"xc-token": config.token,
}
});
console.log('[get-berth-interested-parties] Berth data:', JSON.stringify(berth, null, 2));
// Check if we have Interested Parties field
const interestedPartiesField = (berth as any)['Interested Parties'];
console.log('[get-berth-interested-parties] Interested Parties field:', JSON.stringify(interestedPartiesField, null, 2));
// If we have interested parties, fetch their details
if (interestedPartiesField && Array.isArray(interestedPartiesField)) {
// Extract IDs from the interested parties
const partyIds = interestedPartiesField.map((party: any) => {
// Handle different possible formats
if (typeof party === 'number') return party;
if (typeof party === 'string') return parseInt(party);
if (party && typeof party === 'object' && party.Id) return party.Id;
if (party && typeof party === 'object' && party.id) return party.id;
return null;
}).filter(id => id !== null);
console.log('[get-berth-interested-parties] Party IDs to fetch:', partyIds);
// Fetch full interest records
if (partyIds.length > 0) {
const interestsTableId = "mbs9hjauug4eseo";
const interestPromises = partyIds.map(id =>
$fetch(`${config.url}/api/v2/tables/${interestsTableId}/records/${id}`, {
headers: {
"xc-token": config.token,
}
}).catch(error => {
console.error(`[get-berth-interested-parties] Failed to fetch interest ${id}:`, error);
return null;
})
);
const interests = await Promise.all(interestPromises);
const validInterests = interests.filter(i => i !== null);
console.log('[get-berth-interested-parties] Fetched interests:', validInterests.length);
return {
list: validInterests,
pageInfo: {
totalRows: validInterests.length,
page: 1,
pageSize: validInterests.length,
isFirstPage: true,
isLastPage: true
}
};
}
}
// Return empty list if no interested parties
return {
list: [],
pageInfo: {
totalRows: 0,
page: 1,
pageSize: 0,
isFirstPage: true,
isLastPage: true
}
};
} catch (error: any) {
console.error('[get-berth-interested-parties] Error occurred:', error);
console.error('[get-berth-interested-parties] Error details:', error instanceof Error ? error.message : 'Unknown error');
// Check if it's a 404 error
if (error.statusCode === 404 || error.status === 404) {
// Return empty list instead of throwing error
return {
list: [],
pageInfo: {
totalRows: 0,
page: 1,
pageSize: 0,
isFirstPage: true,
isLastPage: true
}
};
}
throw error;
}
});