import { withBerthQueue } from '~/server/utils/operation-lock'; export default defineEventHandler(async (event) => { const xTagHeader = getRequestHeader(event, "x-tag"); console.log('[unlink-berths] Request received with x-tag:', xTagHeader); if (!xTagHeader || (xTagHeader !== "094ut234" && xTagHeader !== "pjnvü1230")) { console.error('[unlink-berths] Authentication failed - invalid x-tag:', xTagHeader); throw createError({ statusCode: 401, statusMessage: "unauthenticated" }); } const body = await readBody(event); const { interestId, berthIds } = body; if (!interestId || !berthIds || !Array.isArray(berthIds)) { throw createError({ statusCode: 400, statusMessage: "interestId and berthIds array are required" }); } // Use queuing system to handle rapid berth operations gracefully return await withBerthQueue(interestId, async () => { const config = getNocoDbConfiguration(); const interestsTableId = "mbs9hjauug4eseo"; const berthsLinkFieldId = "cj7v7bb9pa5eyo3"; // Berths field // Format the berth IDs for the API const berthRecords = berthIds.map(id => ({ Id: id })); const result = await $fetch( `${config.url}/api/v2/tables/${interestsTableId}/links/${berthsLinkFieldId}/records/${interestId}`, { method: 'DELETE', headers: { "xc-token": config.token, }, body: berthRecords, } ); console.log('[unlink-berths] Successfully unlinked berths from interest:', interestId); return result; }); });