feat: enhance error handling and status updates in dataset processing

This commit is contained in:
averel10
2026-03-13 09:51:51 +01:00
parent 1debc1b36e
commit d8a7fdf1f0
2 changed files with 52 additions and 19 deletions

View File

@@ -52,30 +52,46 @@ export async function processDatasetEntries(
datasetId: number, datasetId: number,
tempDir: string tempDir: string
) { ) {
try {
const result = await requireAdmin(); const result = await requireAdmin();
if (!result.authenticated || !result.admin) { if (!result.authenticated || !result.admin) {
throw new Error('Unauthorized'); return {
success: false,
error: 'Unauthorized',
entriesCreated: 0,
};
} }
const datasetDir = join(process.cwd(), 'public', 'datasets', datasetId.toString()); const datasetDir = join(process.cwd(), 'public', 'datasets', datasetId.toString());
try {
// Validate temp directory exists // Validate temp directory exists
if (!existsSync(tempDir)) { if (!existsSync(tempDir)) {
throw new Error('Temporary extraction directory not found'); return {
success: false,
error: 'Temporary extraction directory not found',
entriesCreated: 0,
};
} }
// Read metadata.csv again // Read metadata.csv again
const metadataPath = join(tempDir, 'metadata.csv'); const metadataPath = join(tempDir, 'metadata.csv');
if (!existsSync(metadataPath)) { if (!existsSync(metadataPath)) {
throw new Error('metadata.csv not found in extracted files'); return {
success: false,
error: 'metadata.csv not found in extracted files',
entriesCreated: 0,
};
} }
const metadataContent = await readFile(metadataPath, 'utf-8'); const metadataContent = await readFile(metadataPath, 'utf-8');
const lines = metadataContent.split('\n').filter(line => line.trim()); const lines = metadataContent.split('\n').filter(line => line.trim());
if (lines.length < 2) { if (lines.length < 2) {
throw new Error('metadata.csv is empty or invalid'); return {
success: false,
error: 'metadata.csv is empty or invalid',
entriesCreated: 0,
};
} }
// Parse CSV // Parse CSV
@@ -123,7 +139,11 @@ export async function processDatasetEntries(
} }
if (entries.length === 0) { if (entries.length === 0) {
throw new Error('No valid audio files found for entries'); return {
success: false,
error: 'No valid audio files found for entries',
entriesCreated: 0,
};
} }
// Check for existing entries to avoid duplicates // Check for existing entries to avoid duplicates
@@ -138,7 +158,11 @@ export async function processDatasetEntries(
const newEntries = entries.filter(entry => !existingExternalIds.has(entry.externalId)); const newEntries = entries.filter(entry => !existingExternalIds.has(entry.externalId));
if (newEntries.length === 0) { if (newEntries.length === 0) {
throw new Error('All entries already exist in the dataset'); return {
success: false,
error: 'All entries already exist in the dataset',
entriesCreated: 0,
};
} }
// Insert new entries into database // Insert new entries into database
@@ -153,9 +177,12 @@ export async function processDatasetEntries(
}; };
} catch (error) { } catch (error) {
console.error('Error processing dataset entries:', error); console.error('Error processing dataset entries:', error);
throw new Error( const errorMessage = error instanceof Error ? error.message : 'Failed to process dataset entries';
error instanceof Error ? error.message : 'Failed to process dataset entries' return {
); success: false,
error: errorMessage,
entriesCreated: 0,
};
} finally { } finally {
// Clean up temp directory // Clean up temp directory
try { try {

View File

@@ -59,13 +59,19 @@ export default function UploadDatasetEntriesModal({
// Process the extracted data // Process the extracted data
const processResult = await processDatasetEntries(datasetId, uploadResult.tempDir); const processResult = await processDatasetEntries(datasetId, uploadResult.tempDir);
if (!processResult.success) {
item.status = 'failed';
item.progress = 0;
item.message = `${processResult.error || 'Processing failed'}`;
} else {
item.status = 'completed'; item.status = 'completed';
item.progress = 100; item.progress = 100;
item.message = `✓ Processed (${processResult.entriesCreated} entries)`; item.message = `✓ Processed (${processResult.entriesCreated} entries)`;
}
} catch (err) { } catch (err) {
item.status = 'failed'; item.status = 'failed';
item.progress = 0; item.progress = 0;
item.message = err instanceof Error ? err.message : 'Unknown error'; item.message = `${err instanceof Error ? err.message : 'Network error'}`;
} }
setUploadQueue([...newQueue]); setUploadQueue([...newQueue]);