130 lines
4.5 KiB
TypeScript
130 lines
4.5 KiB
TypeScript
import { getInterestById, updateInterest } from '~/server/utils/nocodb';
|
|
import { getDocumesoDocument } from '~/server/utils/documeso';
|
|
import type { InterestSalesProcessLevel, EOIStatus } from '~/utils/types';
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const xTagHeader = getRequestHeader(event, "x-tag");
|
|
|
|
console.log('[Validate Document] Request received with x-tag:', xTagHeader);
|
|
|
|
if (!xTagHeader || (xTagHeader !== "094ut234" && xTagHeader !== "pjnvü1230")) {
|
|
console.error('[Validate Document] Authentication failed - invalid x-tag');
|
|
throw createError({ statusCode: 401, statusMessage: "unauthenticated" });
|
|
}
|
|
|
|
try {
|
|
const query = getQuery(event);
|
|
const { interestId } = query;
|
|
|
|
console.log('[Validate Document] Interest ID:', interestId);
|
|
|
|
if (!interestId) {
|
|
console.error('[Validate Document] No interest ID provided');
|
|
throw createError({
|
|
statusCode: 400,
|
|
statusMessage: 'Interest ID is required',
|
|
});
|
|
}
|
|
|
|
// Get current interest data
|
|
const interest = await getInterestById(interestId.toString());
|
|
if (!interest) {
|
|
throw createError({
|
|
statusCode: 404,
|
|
statusMessage: 'Interest not found',
|
|
});
|
|
}
|
|
|
|
const documensoID = interest['documensoID'];
|
|
console.log('[Validate Document] Documenso ID:', documensoID);
|
|
|
|
// If no documensoID, the state is already clean
|
|
if (!documensoID) {
|
|
console.log('[Validate Document] No documensoID found - state is clean');
|
|
return {
|
|
success: true,
|
|
valid: true,
|
|
message: 'No document ID found - state is clean',
|
|
cleaned: false
|
|
};
|
|
}
|
|
|
|
// Try to fetch the document from Documenso
|
|
let documentExists = true;
|
|
let documentStatus = null;
|
|
|
|
try {
|
|
console.log('[Validate Document] Checking document existence in Documenso');
|
|
const document = await getDocumesoDocument(parseInt(documensoID));
|
|
documentStatus = document.status;
|
|
console.log('[Validate Document] Document exists with status:', documentStatus);
|
|
} catch (error: any) {
|
|
console.log('[Validate Document] Document check failed:', error.message);
|
|
|
|
// If it's a 404 or similar error, the document doesn't exist
|
|
if (error.status === 404 || error.statusCode === 404 || error.message?.includes('404')) {
|
|
documentExists = false;
|
|
console.log('[Validate Document] Document not found in Documenso - will clean up database');
|
|
} else {
|
|
// For other errors, we'll assume the document exists but there's a connection issue
|
|
console.warn('[Validate Document] Unable to verify document existence due to API error:', error.message);
|
|
return {
|
|
success: true,
|
|
valid: true,
|
|
message: 'Unable to verify document existence due to API error',
|
|
cleaned: false,
|
|
error: error.message
|
|
};
|
|
}
|
|
}
|
|
|
|
// If document doesn't exist, clean up the database
|
|
if (!documentExists) {
|
|
console.log('[Validate Document] Cleaning up orphaned database records');
|
|
|
|
const updateData = {
|
|
'EOI Status': 'Awaiting Further Details' as EOIStatus,
|
|
'Sales Process Level': 'Specific Qualified Interest' as InterestSalesProcessLevel,
|
|
'EOI Time Sent': undefined,
|
|
'Signature Link Client': undefined,
|
|
'Signature Link CC': undefined,
|
|
'Signature Link Developer': undefined,
|
|
'EmbeddedSignatureLinkClient': undefined,
|
|
'EmbeddedSignatureLinkCC': undefined,
|
|
'EmbeddedSignatureLinkDeveloper': undefined,
|
|
'documensoID': undefined,
|
|
'reminder_enabled': false
|
|
};
|
|
|
|
// Update the interest
|
|
await updateInterest(interestId.toString(), updateData);
|
|
|
|
console.log('[Validate Document] Database cleanup completed');
|
|
|
|
return {
|
|
success: true,
|
|
valid: false,
|
|
message: 'Document not found in Documenso - database cleaned up',
|
|
cleaned: true
|
|
};
|
|
}
|
|
|
|
// Document exists and is valid
|
|
return {
|
|
success: true,
|
|
valid: true,
|
|
message: 'Document exists and is valid',
|
|
cleaned: false,
|
|
documentStatus
|
|
};
|
|
|
|
} catch (error: any) {
|
|
console.error('[Validate Document] Failed to validate document:', error);
|
|
console.error('[Validate Document] Error stack:', error.stack);
|
|
throw createError({
|
|
statusCode: error.statusCode || 500,
|
|
statusMessage: error.statusMessage || error.message || 'Failed to validate document',
|
|
});
|
|
}
|
|
});
|