85 lines
2.3 KiB
TypeScript
85 lines
2.3 KiB
TypeScript
import { requireAuth } from '~/server/utils/auth';
|
|
import { getNocoDbConfiguration, updateInterest, deleteInterest } from '~/server/utils/nocodb';
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
console.log('[ADMIN] Merge duplicates request');
|
|
|
|
try {
|
|
// Require authentication (any authenticated user with interest access)
|
|
await requireAuth(event);
|
|
|
|
const body = await readBody(event);
|
|
const { masterId, duplicateIds, mergeData } = body;
|
|
|
|
if (!masterId || !duplicateIds || !Array.isArray(duplicateIds)) {
|
|
throw createError({
|
|
statusCode: 400,
|
|
statusMessage: 'Invalid merge request: masterId and duplicateIds array required'
|
|
});
|
|
}
|
|
|
|
console.log('[ADMIN] Merging duplicates:', {
|
|
masterId,
|
|
duplicateIds,
|
|
fieldsToMerge: Object.keys(mergeData || {})
|
|
});
|
|
|
|
// Update the master record with merged data
|
|
if (mergeData && Object.keys(mergeData).length > 0) {
|
|
console.log('[ADMIN] Updating master record with merged data');
|
|
await updateInterest(masterId.toString(), mergeData);
|
|
}
|
|
|
|
// Delete the duplicate records
|
|
const deletionResults = [];
|
|
for (const duplicateId of duplicateIds) {
|
|
try {
|
|
console.log('[ADMIN] Deleting duplicate record:', duplicateId);
|
|
await deleteInterest(duplicateId.toString());
|
|
deletionResults.push({ id: duplicateId, success: true });
|
|
} catch (error: any) {
|
|
console.error('[ADMIN] Failed to delete duplicate:', duplicateId, error);
|
|
deletionResults.push({
|
|
id: duplicateId,
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
}
|
|
|
|
console.log('[ADMIN] Merge operation completed');
|
|
|
|
return {
|
|
success: true,
|
|
data: {
|
|
masterId,
|
|
mergedCount: duplicateIds.length,
|
|
deletionResults,
|
|
updatedFields: Object.keys(mergeData || {})
|
|
}
|
|
};
|
|
|
|
} catch (error: any) {
|
|
console.error('[ADMIN] Failed to merge duplicates:', error);
|
|
|
|
if (error.statusCode === 403) {
|
|
return {
|
|
success: false,
|
|
error: 'Insufficient permissions. Admin access required.'
|
|
};
|
|
}
|
|
|
|
if (error.statusCode === 400) {
|
|
return {
|
|
success: false,
|
|
error: error.statusMessage
|
|
};
|
|
}
|
|
|
|
return {
|
|
success: false,
|
|
error: 'Failed to merge duplicate records'
|
|
};
|
|
}
|
|
});
|