@@ -47,7 +47,9 @@ namespace Webshop.Application.Services.Admin
}
}
string? imageUrl = null ;
string? imageUrl = null ;
if ( categorieDto . ImageFile ! = null )
// FIX: Pr<50> fung auf Length > 0 hinzugef<65> gt, wie im ProductService
if ( categorieDto . ImageFile ! = null & & categorieDto . ImageFile . Length > 0 )
{
{
await using var stream = categorieDto . ImageFile . OpenReadStream ( ) ;
await using var stream = categorieDto . ImageFile . OpenReadStream ( ) ;
imageUrl = await _fileStorageService . SaveFileAsync ( stream , categorieDto . ImageFile . FileName , categorieDto . ImageFile . ContentType ) ;
imageUrl = await _fileStorageService . SaveFileAsync ( stream , categorieDto . ImageFile . FileName , categorieDto . ImageFile . ContentType ) ;
@@ -84,23 +86,41 @@ namespace Webshop.Application.Services.Admin
return ServiceResult . Fail ( ServiceResultType . Conflict , "Eine andere Kategorie mit diesem Slug existiert bereits." ) ;
return ServiceResult . Fail ( ServiceResultType . Conflict , "Eine andere Kategorie mit diesem Slug existiert bereits." ) ;
}
}
string? imageUrl = existing . ImageUrl ;
// -----------------------------------------------------------------------
if ( categorieDto . ImageFile ! = null )
// BILD UPDATE LOGIK (Verbessert )
// -----------------------------------------------------------------------
// 1. Neues Bild hochladen, falls vorhanden
if ( categorieDto . ImageFile ! = null & & categorieDto . ImageFile . Length > 0 )
{
{
await using var stream = categorieDto . ImageFile . OpenReadStream ( ) ;
await using var stream = categorieDto . ImageFile . OpenReadStream ( ) ;
image Url = await _fileStorageService . SaveFileAsync ( stream , categorieDto . ImageFile . FileName , categorieDto . ImageFile . ContentType ) ;
var new Url = await _fileStorageService . SaveFileAsync ( stream , categorieDto . ImageFile . FileName , categorieDto . ImageFile . ContentType ) ;
}
else if ( string . IsNullOrEmpty ( categorieDto . ImageUrl ) & & ! string . IsNullOrEmpty ( existing . ImageUrl ) )
{
// Hier k<> nnte Logik zum L<> schen der alten Datei stehen, falls gew<65> nscht
imageUrl = null ;
}
// Bestehendes Bild <20> berschreiben
existing . ImageUrl = newUrl ;
}
// 2. Optional: Logik zum L<> schen des Bildes
// ACHTUNG: Die vorherige Logik hat das Bild oft versehentlich gel<65> scht, wenn das DTO
// das Feld 'ImageUrl' leer hatte (was bei Datei-Uploads oft passiert).
// Wir l<> schen nur, wenn KEIN neues File da ist UND explizit ein leerer String <20> bergeben wurde,
// aber wir m<> ssen vorsichtig sein, dass null (nicht gesendet) das Bild nicht l<> scht.
// Im Zweifel: Wenn du das Bild l<> schen willst, br<62> uchtest du ein explizites Flag (z.B. bool DeleteImage).
// Hier belassen wir es dabei: Wenn kein neues Bild kommt, bleibt das alte erhalten.
// Falls du explizit L<> schen unterst<73> tzen willst, wenn ImageUrl leer ist, nutze dies mit Vorsicht:
/*
else if (categorieDto.ImageUrl != null && string.IsNullOrEmpty(categorieDto.ImageUrl))
{
// Nur l<> schen, wenn ImageUrl explizit als leerer String (nicht null) gesendet wurde
existing.ImageUrl = null;
}
*/
// Mapping der restlichen Felder
existing . Name = categorieDto . Name ;
existing . Name = categorieDto . Name ;
existing . Slug = categorieDto . Slug ;
existing . Slug = categorieDto . Slug ;
existing . Description = categorieDto . Description ;
existing . Description = categorieDto . Description ;
existing . ParentcategorieId = categorieDto . ParentcategorieId ;
existing . ParentcategorieId = categorieDto . ParentcategorieId ;
existing . ImageUrl = imageUrl ;
existing . IsActive = categorieDto . IsActive ;
existing . IsActive = categorieDto . IsActive ;
existing . DisplayOrder = categorieDto . DisplayOrder ;
existing . DisplayOrder = categorieDto . DisplayOrder ;
existing . LastModifiedDate = DateTimeOffset . UtcNow ;
existing . LastModifiedDate = DateTimeOffset . UtcNow ;
@@ -124,8 +144,6 @@ namespace Webshop.Application.Services.Admin
return ServiceResult . Fail ( ServiceResultType . Conflict , "Kategorie kann nicht gel<65> scht werden, da sie als <20> bergeordnete Kategorie f<> r andere Kategorien dient." ) ;
return ServiceResult . Fail ( ServiceResultType . Conflict , "Kategorie kann nicht gel<65> scht werden, da sie als <20> bergeordnete Kategorie f<> r andere Kategorien dient." ) ;
}
}
// Hier k<> nnte man auch pr<70> fen, ob Produkte dieser Kategorie zugeordnet sind.
await _categorieRepository . DeleteAsync ( id ) ;
await _categorieRepository . DeleteAsync ( id ) ;
return ServiceResult . Ok ( ) ;
return ServiceResult . Ok ( ) ;
}
}