using GhostImageManager.Models; namespace GhostImageManager.Services; public class ImageReplacementService { private readonly ILogger _logger; public ImageReplacementService(ILogger logger) { _logger = logger; } public async Task ReplaceImageAsync(GhostImage oldImage, Stream newImageStream, string newFileName) { try { if (!File.Exists(oldImage.FilePath)) { _logger.LogError("Alte Bilddatei nicht gefunden: {Path}", oldImage.FilePath); return false; } // Backup der alten Datei erstellen var backupPath = oldImage.FilePath + ".backup"; File.Copy(oldImage.FilePath, backupPath, overwrite: true); // Neue Datei schreiben using (var fileStream = File.Create(oldImage.FilePath)) { await newImageStream.CopyToAsync(fileStream); } _logger.LogInformation("Bild ersetzt: {OldFile} durch {NewFile}", oldImage.FileName, newFileName); return true; } catch (Exception ex) { _logger.LogError(ex, "Fehler beim Ersetzen des Bildes {File}", oldImage.FileName); return false; } } public bool RestoreBackup(GhostImage image) { try { var backupPath = image.FilePath + ".backup"; if (!File.Exists(backupPath)) return false; File.Copy(backupPath, image.FilePath, overwrite: true); return true; } catch (Exception ex) { _logger.LogError(ex, "Fehler beim Wiederherstellen des Backups für {File}", image.FileName); return false; } } }