This commit is contained in:
Tizian.Breuch
2025-07-29 15:06:27 +02:00
parent d4255b8c0d
commit 93a1f2411b
3 changed files with 25 additions and 9 deletions

View File

@@ -193,6 +193,20 @@ namespace Webshop.Api.SwaggerFilters
["defaultBillingAddressId"] = new OpenApiNull() ["defaultBillingAddressId"] = new OpenApiNull()
}; };
} }
else if (type == typeof(UpdateCustomerDto)) // Dieses DTO verarbeitet jetzt alles
{
schema.Example = new OpenApiObject
{
["firstName"] = new OpenApiString("Max"),
["lastName"] = new OpenApiString("Mustermann"),
["phoneNumber"] = new OpenApiString("+491701234567"),
["email"] = new OpenApiString($"max.mustermann.neu.{uniqueId}@example.com"),
["currentPassword"] = new OpenApiString("SecureCustomerPass123!"),
["defaultShippingAddressId"] = new OpenApiNull(),
["defaultBillingAddressId"] = new OpenApiNull()
};
}
// --- Rabatte --- // --- Rabatte ---
else if (type == typeof(DiscountDto)) else if (type == typeof(DiscountDto))
{ {

View File

@@ -22,5 +22,8 @@ namespace Webshop.Application.DTOs.Customers
// Optional, aber gute Sicherheitspraxis: Aktuelles Passwort zur Bestätigung sensibler Änderungen // Optional, aber gute Sicherheitspraxis: Aktuelles Passwort zur Bestätigung sensibler Änderungen
[Required(ErrorMessage = "Aktuelles Passwort ist zur Bestätigung erforderlich.")] [Required(ErrorMessage = "Aktuelles Passwort ist zur Bestätigung erforderlich.")]
public string CurrentPassword { get; set; } = string.Empty; public string CurrentPassword { get; set; } = string.Empty;
public Guid? DefaultShippingAddressId { get; set; }
public Guid? DefaultBillingAddressId { get; set; }
} }
} }

View File

@@ -70,17 +70,20 @@ namespace Webshop.Application.Services.Customers
var identityUser = await _userManager.FindByIdAsync(userId); var identityUser = await _userManager.FindByIdAsync(userId);
if (identityUser == null) return (false, "Benutzerkonto nicht gefunden."); if (identityUser == null) return (false, "Benutzerkonto nicht gefunden.");
// 1. Aktuelles Passwort prüfen (für alle sensiblen Änderungen) // 1. Aktuelles Passwort prüfen
if (!await _userManager.CheckPasswordAsync(identityUser, profileDto.CurrentPassword)) if (!await _userManager.CheckPasswordAsync(identityUser, profileDto.CurrentPassword))
{ {
return (false, "Falsches aktuelles Passwort zur Bestätigung."); return (false, "Falsches aktuelles Passwort zur Bestätigung.");
} }
// 2. Felder der Customer-Entität aktualisieren (FirstName, LastName) // 2. Felder der Customer-Entität aktualisieren (FirstName, LastName, DEFAULT ADDRESS IDs)
customer.FirstName = profileDto.FirstName; customer.FirstName = profileDto.FirstName;
customer.LastName = profileDto.LastName; customer.LastName = profileDto.LastName;
// customer.PhoneNumber = profileDto.PhoneNumber; // Entfernt, da es jetzt in ApplicationUser zentralisiert ist // << NEU: DEFAULT ADDRESS IDs aktualisieren >>
await _customerRepository.UpdateAsync(customer); // Speichert Änderungen im Customer-Profil customer.DefaultShippingAddressId = profileDto.DefaultShippingAddressId;
customer.DefaultBillingAddressId = profileDto.DefaultBillingAddressId;
// -- ENDE NEU --
await _customerRepository.UpdateAsync(customer);
// 3. Felder des ApplicationUser (IdentityUser) aktualisieren (Email, PhoneNumber) // 3. Felder des ApplicationUser (IdentityUser) aktualisieren (Email, PhoneNumber)
bool identityUserChanged = false; bool identityUserChanged = false;
@@ -90,9 +93,8 @@ namespace Webshop.Application.Services.Customers
{ {
identityUser.Email = profileDto.Email; identityUser.Email = profileDto.Email;
identityUser.NormalizedEmail = _userManager.NormalizeEmail(profileDto.Email); identityUser.NormalizedEmail = _userManager.NormalizeEmail(profileDto.Email);
identityUser.UserName = profileDto.Email; // Oft wird der UserName auch mit der E-Mail synchronisiert identityUser.UserName = profileDto.Email;
identityUser.NormalizedUserName = _userManager.NormalizeName(profileDto.Email); identityUser.NormalizedUserName = _userManager.NormalizeName(profileDto.Email);
// Optional: user.EmailConfirmed = false; wenn Sie Bestätigungs-E-Mails senden
identityUserChanged = true; identityUserChanged = true;
} }
@@ -100,7 +102,6 @@ namespace Webshop.Application.Services.Customers
if (!string.IsNullOrEmpty(profileDto.PhoneNumber) && identityUser.PhoneNumber != profileDto.PhoneNumber) if (!string.IsNullOrEmpty(profileDto.PhoneNumber) && identityUser.PhoneNumber != profileDto.PhoneNumber)
{ {
identityUser.PhoneNumber = profileDto.PhoneNumber; identityUser.PhoneNumber = profileDto.PhoneNumber;
// Optional: identityUser.PhoneNumberConfirmed = false;
identityUserChanged = true; identityUserChanged = true;
} }
@@ -116,7 +117,5 @@ namespace Webshop.Application.Services.Customers
return (true, "Profil und Kontaktdaten erfolgreich aktualisiert."); return (true, "Profil und Kontaktdaten erfolgreich aktualisiert.");
} }
// << ENTFERNT: UpdateMyContactInfoAsync >>
} }
} }