import { getInterestById, updateInterest } from '~/server/utils/nocodb'; import { getDocumesoDocumentByExternalId, checkDocumentSignatureStatus } from '~/server/utils/documeso'; export default defineEventHandler(async (event) => { const xTagHeader = getRequestHeader(event, "x-tag"); console.log('[EOI Delete Generated] Request received with x-tag:', xTagHeader); if (!xTagHeader || (xTagHeader !== "094ut234" && xTagHeader !== "pjnvü1230")) { console.error('[EOI Delete Generated] Authentication failed - invalid x-tag'); throw createError({ statusCode: 401, statusMessage: "unauthenticated" }); } try { const body = await readBody(event); const { interestId } = body; console.log('[EOI Delete Generated] Interest ID:', interestId); if (!interestId) { console.error('[EOI Delete Generated] No interest ID provided'); throw createError({ statusCode: 400, statusMessage: 'Interest ID is required', }); } // Get current interest data const interest = await getInterestById(interestId); if (!interest) { throw createError({ statusCode: 404, statusMessage: 'Interest not found', }); } // Check if there are signature links (indicating a generated document) const hasSignatureLinks = !!(interest['Signature Link Client'] || interest['Signature Link CC'] || interest['Signature Link Developer']); if (!hasSignatureLinks) { throw createError({ statusCode: 400, statusMessage: 'No generated EOI document found for this interest', }); } // Check signature status to prevent deletion of fully signed documents const externalId = `loi-${interestId}`; let documentId: number | null = null; try { const document = await getDocumesoDocumentByExternalId(externalId); if (document) { documentId = document.id; // Check if all parties have signed const signatureStatus = await checkDocumentSignatureStatus(documentId); if (signatureStatus.allSigned) { throw createError({ statusCode: 403, statusMessage: 'Cannot delete: All parties have already signed this document', }); } console.log('[EOI Delete Generated] Document found in Documenso:', documentId); console.log('[EOI Delete Generated] Signature status:', { allSigned: signatureStatus.allSigned, clientSigned: signatureStatus.clientSigned, signedCount: signatureStatus.signedRecipients.length, unsignedCount: signatureStatus.unsignedRecipients.length }); } } catch (error: any) { console.warn('[EOI Delete Generated] Could not find or check Documenso document:', error.message); // Continue with deletion even if Documenso document not found } // Delete document from Documenso if it exists if (documentId) { try { const documensoApiKey = process.env.NUXT_DOCUMENSO_API_KEY; const documensoBaseUrl = process.env.NUXT_DOCUMENSO_BASE_URL; if (!documensoApiKey || !documensoBaseUrl) { console.error('[EOI Delete Generated] Documenso configuration missing'); throw createError({ statusCode: 500, statusMessage: 'Documenso configuration missing', }); } console.log('[EOI Delete Generated] Deleting document from Documenso:', documentId); const deleteResponse = await fetch(`${documensoBaseUrl}/api/v1/documents/${documentId}`, { method: 'DELETE', headers: { 'Authorization': `Bearer ${documensoApiKey}`, 'Content-Type': 'application/json' } }); if (!deleteResponse.ok) { const errorText = await deleteResponse.text(); console.error('[EOI Delete Generated] Failed to delete from Documenso:', errorText); throw new Error(`Failed to delete document from Documenso: ${deleteResponse.statusText}`); } console.log('[EOI Delete Generated] Successfully deleted document from Documenso'); } catch (error: any) { console.error('[EOI Delete Generated] Error deleting from Documenso:', error); // Don't throw here - continue with database cleanup even if Documenso deletion fails } } // Reset interest fields const updateData = { 'EOI Status': 'Awaiting Further Details' as const, 'Sales Process Level': 'Specific Qualified Interest' as const, 'EOI Time Sent': undefined, 'Signature Link Client': undefined, 'Signature Link CC': undefined, 'Signature Link Developer': undefined, 'Documeso ID': undefined, 'reminder_enabled': false }; console.log('[EOI Delete Generated] Resetting interest fields'); // Update the interest await updateInterest(interestId, updateData); console.log('[EOI Delete Generated] Delete completed successfully'); return { success: true, message: 'Generated EOI document deleted successfully', }; } catch (error: any) { console.error('[EOI Delete Generated] Failed to delete generated EOI document:', error); console.error('[EOI Delete Generated] Error stack:', error.stack); throw createError({ statusCode: error.statusCode || 500, statusMessage: error.statusMessage || error.message || 'Failed to delete generated EOI document', }); } });