import { StorageProviderFactory } from './dist/services/storageProvider.js'; import { AudioMetadataService } from './dist/services/audioMetadataService.js'; async function testBackgroundJobSimulation() { try { console.log('🔍 Testing Background Job Simulation:'); console.log(''); // Step 1: Load config and create provider (exactly like background job) console.log('1️⃣ Loading storage configuration...'); const config = await StorageProviderFactory.loadConfig(); console.log('Config provider:', config.provider); console.log('Config basePath:', config.basePath); console.log(''); // Step 2: Create storage service (exactly like background job) console.log('2️⃣ Creating storage service...'); const storageService = await StorageProviderFactory.createProvider(config); console.log('Storage service created:', storageService.constructor.name); console.log(''); // Step 3: Create audio metadata service (exactly like background job) console.log('3️⃣ Creating audio metadata service...'); const audioMetadataService = new AudioMetadataService(); console.log('Audio metadata service created'); console.log(''); // Step 4: List all files (exactly like background job) console.log('4️⃣ Listing all files from storage...'); const startTime = Date.now(); const storageFiles = await storageService.listAllFiles(); const endTime = Date.now(); console.log(`✅ listAllFiles completed in ${endTime - startTime}ms`); console.log('Total storage files found:', storageFiles.length); console.log(''); // Step 5: Filter for audio files (exactly like background job) console.log('5️⃣ Filtering for audio files...'); const audioFiles = storageFiles.filter(storageFile => { const filename = storageFile.key.split('/').pop() || storageFile.key; const isAudio = audioMetadataService.isAudioFile(filename); return isAudio; }); console.log('Audio files found:', audioFiles.length); console.log(''); // Step 6: Show MP3 breakdown console.log('6️⃣ MP3 files breakdown:'); const mp3Files = audioFiles.filter(file => { const filename = file.key.split('/').pop() || file.key; return filename.toLowerCase().endsWith('.mp3'); }); console.log('MP3 files found:', mp3Files.length); console.log(''); // Step 7: Show file type breakdown console.log('7️⃣ File type breakdown:'); const fileTypes = new Map(); audioFiles.forEach(file => { const filename = file.key.split('/').pop() || file.key; const ext = filename.split('.').pop()?.toLowerCase() || 'no-extension'; fileTypes.set(ext, (fileTypes.get(ext) || 0) + 1); }); const sortedTypes = Array.from(fileTypes.entries()).sort((a, b) => b[1] - a[1]); sortedTypes.forEach(([ext, count]) => { console.log(` .${ext}: ${count} files`); }); console.log(''); // Step 8: Show directory breakdown console.log('8️⃣ Directory breakdown:'); const dirCounts = new Map(); audioFiles.forEach(file => { const dir = file.key.split('/')[0]; dirCounts.set(dir, (dirCounts.get(dir) || 0) + 1); }); const sortedDirs = Array.from(dirCounts.entries()).sort((a, b) => b[1] - a[1]); sortedDirs.forEach(([dir, count]) => { console.log(` 📁 ${dir}: ${count} audio files`); }); } catch (error) { console.error('❌ Failed to test background job simulation:', error); console.error('Error details:', error.message); console.error('Stack trace:', error.stack); } } // Run the test testBackgroundJobSimulation().catch(console.error);