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() };