122 lines
4.0 KiB
TypeScript
122 lines
4.0 KiB
TypeScript
|
|
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;
|
||
|
|
}
|
||
|
|
});
|