From 37c82a74e6f64c4eef56dfff4aaf844aa19e3618 Mon Sep 17 00:00:00 2001
From: Leysan Nigmatullina <86958548+einlied753@users.noreply.github.com>
Date: Wed, 19 Jan 2022 16:44:17 +0300
Subject: [PATCH] PT-6139: Add payment and shipment addresses for anonymize and
download data (#7)
* fix: Add payment and shipment addresses for anonymize and download data
* fix: Fix saving CreatedBy, ModifiedBy
---
.../Models/DownloadData/Address.cs | 1 +
.../Models/DownloadData/Order.cs | 2 +
.../Services/AnonymizeContactDataService.cs | 48 ++++++++++++++++---
.../Services/DownloadContactDataService.cs | 32 ++++++++++++-
4 files changed, 76 insertions(+), 7 deletions(-)
diff --git a/src/VirtoCommerce.GDPR.Core/Models/DownloadData/Address.cs b/src/VirtoCommerce.GDPR.Core/Models/DownloadData/Address.cs
index d74de5d..55362fd 100644
--- a/src/VirtoCommerce.GDPR.Core/Models/DownloadData/Address.cs
+++ b/src/VirtoCommerce.GDPR.Core/Models/DownloadData/Address.cs
@@ -5,6 +5,7 @@ namespace VirtoCommerce.GDPR.Core.Models.DownloadData
///
public class Address
{
+ public string Name { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Country { get; set; }
diff --git a/src/VirtoCommerce.GDPR.Core/Models/DownloadData/Order.cs b/src/VirtoCommerce.GDPR.Core/Models/DownloadData/Order.cs
index 8ad2131..95e8f40 100644
--- a/src/VirtoCommerce.GDPR.Core/Models/DownloadData/Order.cs
+++ b/src/VirtoCommerce.GDPR.Core/Models/DownloadData/Order.cs
@@ -11,5 +11,7 @@ public class Order
public string CreatedBy { get; set; }
public string ModifiedBy { get; set; }
public ICollection
Addresses { get; set; }
+ public ICollection InPayments { get; set; }
+ public ICollection Shipments { get; set; }
}
}
diff --git a/src/VirtoCommerce.GDPR.Data/Services/AnonymizeContactDataService.cs b/src/VirtoCommerce.GDPR.Data/Services/AnonymizeContactDataService.cs
index fbf2d07..6b5795c 100644
--- a/src/VirtoCommerce.GDPR.Data/Services/AnonymizeContactDataService.cs
+++ b/src/VirtoCommerce.GDPR.Data/Services/AnonymizeContactDataService.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
+using EntityFrameworkCore.Triggers;
using Microsoft.AspNetCore.Identity;
using VirtoCommerce.CustomerModule.Core.Model;
using VirtoCommerce.CustomerModule.Core.Services;
@@ -56,14 +57,14 @@ public async Task AnonymizeContactDataAsync(string id)
contact.FirstName = _anonymName;
contact.LastName = _anonymName;
contact.FullName = _anonymName;
- contact.CreatedBy = _anonymName;
- contact.ModifiedBy = _anonymName;
+
contact.BirthDate = null;
contact.Emails = new List();
contact.Phones = new List();
contact.IsAnonymized = true;
foreach (var address in contact.Addresses)
{
+ address.Name = _anonymName;
address.FirstName = _anonymName;
address.LastName = _anonymName;
address.City = _anonymName;
@@ -78,18 +79,15 @@ public async Task AnonymizeContactDataAsync(string id)
{
user.UserName = $"{_anonymName}_{Guid.NewGuid():N}";
user.Email = GetRandomEmail();
- user.CreatedBy = _anonymName;
- user.ModifiedBy = _anonymName;
}
foreach (var result in customerOrdersSearchResult.Results)
{
result.CustomerName = _anonymName;
- result.CreatedBy = _anonymName;
- result.ModifiedBy = _anonymName;
foreach (var orderAddress in result.Addresses)
{
+ orderAddress.Name = _anonymName;
orderAddress.FirstName = _anonymName;
orderAddress.LastName = _anonymName;
orderAddress.City = _anonymName;
@@ -99,8 +97,46 @@ public async Task AnonymizeContactDataAsync(string id)
orderAddress.Email = GetRandomEmail();
orderAddress.Phone = _anonymPhone;
}
+
+ foreach (var payment in result.InPayments)
+ {
+ if (payment.BillingAddress != null)
+ {
+ payment.BillingAddress.Name = _anonymName;
+ payment.BillingAddress.FirstName = _anonymName;
+ payment.BillingAddress.LastName = _anonymName;
+ payment.BillingAddress.City = _anonymName;
+ payment.BillingAddress.Line1 = _anonymName;
+ payment.BillingAddress.Line2 = _anonymName;
+ payment.BillingAddress.PostalCode = _anonymPostalCode;
+ payment.BillingAddress.Email = GetRandomEmail();
+ payment.BillingAddress.Phone = _anonymPhone;
+ }
+ }
+
+ foreach (var shipment in result.Shipments)
+ {
+ if (shipment.DeliveryAddress != null)
+ {
+ shipment.DeliveryAddress.Name = _anonymName;
+ shipment.DeliveryAddress.FirstName = _anonymName;
+ shipment.DeliveryAddress.LastName = _anonymName;
+ shipment.DeliveryAddress.City = _anonymName;
+ shipment.DeliveryAddress.Line1 = _anonymName;
+ shipment.DeliveryAddress.Line2 = _anonymName;
+ shipment.DeliveryAddress.PostalCode = _anonymPostalCode;
+ shipment.DeliveryAddress.Email = GetRandomEmail();
+ shipment.DeliveryAddress.Phone = _anonymPhone;
+ }
+ }
}
+ Triggers.Updating += entry =>
+ {
+ entry.Entity.CreatedBy = _anonymName;
+ entry.Entity.ModifiedBy = _anonymName;
+ };
+
await _memberService.SaveChangesAsync(new[] { contact });
await _customerOrderService.SaveChangesAsync(customerOrdersSearchResult.Results.ToArray());
foreach (var user in contact.SecurityAccounts)
diff --git a/src/VirtoCommerce.GDPR.Data/Services/DownloadContactDataService.cs b/src/VirtoCommerce.GDPR.Data/Services/DownloadContactDataService.cs
index 0c6f964..09c3001 100644
--- a/src/VirtoCommerce.GDPR.Data/Services/DownloadContactDataService.cs
+++ b/src/VirtoCommerce.GDPR.Data/Services/DownloadContactDataService.cs
@@ -56,6 +56,7 @@ public async Task GetContactDataAsync(string id)
ModifiedBy = contact.ModifiedBy,
Addresses = contact.Addresses.Select(add => new Core.Models.DownloadData.Address
{
+ Name = add.Name,
FirstName = add.FirstName,
LastName = add.LastName,
Country = add.CountryName,
@@ -83,6 +84,7 @@ public async Task GetContactDataAsync(string id)
ModifiedBy = o.ModifiedBy,
Addresses = o.Addresses.Select(a => new Core.Models.DownloadData.Address
{
+ Name = a.Name,
FirstName = a.FirstName,
LastName = a.LastName,
Country = a.CountryName,
@@ -93,7 +95,35 @@ public async Task GetContactDataAsync(string id)
ZipCode = a.PostalCode,
Email = a.Email,
Phone = a.Phone
- }).ToList()
+ }).ToList(),
+ InPayments = o.InPayments.Select(p => new Core.Models.DownloadData.Address
+ {
+ Name = p.BillingAddress?.Name,
+ FirstName = p.BillingAddress?.FirstName,
+ LastName = p.BillingAddress?.LastName,
+ Country = p.BillingAddress?.CountryName,
+ Region = p.BillingAddress?.RegionName,
+ City = p.BillingAddress?.City,
+ Line1 = p.BillingAddress?.Line1,
+ Line2 = p.BillingAddress?.Line2,
+ ZipCode = p.BillingAddress?.PostalCode,
+ Email = p.BillingAddress?.Email,
+ Phone = p.BillingAddress?.Phone
+ }).ToList(),
+ Shipments = o.Shipments.Select(s => new Core.Models.DownloadData.Address
+ {
+ Name = s.DeliveryAddress?.Name,
+ FirstName = s.DeliveryAddress?.FirstName,
+ LastName = s.DeliveryAddress?.LastName,
+ Country = s.DeliveryAddress?.CountryName,
+ Region = s.DeliveryAddress?.RegionName,
+ City = s.DeliveryAddress?.City,
+ Line1 = s.DeliveryAddress?.Line1,
+ Line2 = s.DeliveryAddress?.Line2,
+ ZipCode = s.DeliveryAddress?.PostalCode,
+ Email = s.DeliveryAddress?.Email,
+ Phone = s.DeliveryAddress?.Phone
+ }).ToList(),
});
}).ToList()
};