customer
This commit is contained in:
@@ -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))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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 >>
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user