diff --git a/backend/src/database/DatabaseManager.js b/backend/src/database/DatabaseManager.js index 45d0f43..b0eeee1 100644 --- a/backend/src/database/DatabaseManager.js +++ b/backend/src/database/DatabaseManager.js @@ -34,6 +34,9 @@ class DatabaseManager { // Erstelle Schema await this.createSchema(); + // Generate missing previews for existing images + await this.generateMissingPreviews(); + console.log('✓ Datenbank erfolgreich initialisiert'); } catch (error) { console.error('Fehler bei Datenbank-Initialisierung:', error); @@ -206,6 +209,68 @@ class DatabaseManager { return false; } } + + // Generate missing previews for existing images + async generateMissingPreviews() { + try { + console.log('🔍 Checking for images without previews...'); + + // Get all images that don't have a preview_path yet + const imagesWithoutPreview = await this.all(` + SELECT id, group_id, file_name, file_path + FROM images + WHERE preview_path IS NULL OR preview_path = '' + `); + + if (imagesWithoutPreview.length === 0) { + console.log('✓ All images have previews'); + return; + } + + console.log(`📸 Found ${imagesWithoutPreview.length} image(s) without preview, generating...`); + + const ImagePreviewService = require('../services/ImagePreviewService'); + const fsp = require('fs').promises; + let successCount = 0; + let failCount = 0; + + for (const image of imagesWithoutPreview) { + try { + // Check if original file exists + const originalPath = ImagePreviewService.getOriginalPath(image.file_name); + await fsp.access(originalPath); + + // Generate preview + const previewFileName = ImagePreviewService._getPreviewFileName(image.file_name); + const previewPath = ImagePreviewService.getPreviewPath(previewFileName); + + const result = await ImagePreviewService.generatePreview(originalPath, previewPath); + + if (result.success) { + // Update database with preview_path + await this.run(` + UPDATE images + SET preview_path = ? + WHERE id = ? + `, [previewFileName, image.id]); + + successCount++; + } else { + console.warn(` ⚠️ Preview generation failed for ${image.file_name}: ${result.error}`); + failCount++; + } + } catch (error) { + console.warn(` ⚠️ Could not process ${image.file_name}: ${error.message}`); + failCount++; + } + } + + console.log(`✓ Preview generation complete: ${successCount} success, ${failCount} failed`); + } catch (error) { + console.warn('⚠️ Preview generation check failed:', error.message); + // Don't throw - this shouldn't prevent DB initialization + } + } } // Singleton Instance