From e854a04aec01174eb6852ebc3b096cccd8621c8b Mon Sep 17 00:00:00 2001 From: KrzysztofPajak Date: Mon, 5 Jan 2026 17:17:24 +0100 Subject: [PATCH] Refactor: move message handlers to Messages namespace Reorganized MediatR command handlers related to message token generation and notifications into the new Grand.Business.Messages.Commands.Handlers namespaces. Also moved common handlers (ClearMostViewed, GetSitemapXml) to Grand.Business.Messages.Commands.Handlers.Common. Updated using statements and project references accordingly. Improved test assertions in CustomerTagServiceTests for clarity. No functional changes to handler logic. --- ...SendNotificationsToSubscribersCommandHandler.cs | 0 ...SendOutBidCustomerNotificationCommandHandler.cs | 0 ...ityBelowStoreOwnerNotificationCommandHandler.cs | 0 .../Common/ClearMostViewedCommandHandler.cs | 2 +- .../Handlers/Common/GetSitemapXMLCommandHandler.cs | 14 +++++++++++++- .../GetAttributeCombinationTokensCommandHandler.cs | 6 ++---- .../Messages/GetAuctionTokensCommandHandler.cs | 2 +- .../Messages/GetGiftVoucherTokensCommandHandler.cs | 2 +- .../GetMerchandiseReturnTokensCommandHandler.cs | 2 +- .../Messages/GetOrderTokensCommandHandler.cs | 2 +- .../Messages/GetShipmentTokensCommandHandler.cs | 2 +- .../GetShoppingCartTokensCommandHandler.cs | 2 +- .../Messages/GetStoreTokensCommandHandler.cs | 2 +- .../Messages/GetVendorTokensCommandHandler.cs | 2 +- .../Services/Customers/CustomerTagServiceTests.cs | 8 ++++---- ...utBidCustomerNotificationCommandHandlerTests.cs | 1 - .../Grand.Modules.Tests/Grand.Modules.Tests.csproj | 1 + 17 files changed, 29 insertions(+), 19 deletions(-) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Catalog/SendNotificationsToSubscribersCommandHandler.cs (100%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Catalog/SendOutBidCustomerNotificationCommandHandler.cs (100%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Catalog/SendQuantityBelowStoreOwnerNotificationCommandHandler.cs (100%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Common/ClearMostViewedCommandHandler.cs (92%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Common/GetSitemapXMLCommandHandler.cs (98%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Messages/GetAttributeCombinationTokensCommandHandler.cs (83%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Messages/GetAuctionTokensCommandHandler.cs (95%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Messages/GetGiftVoucherTokensCommandHandler.cs (94%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Messages/GetMerchandiseReturnTokensCommandHandler.cs (97%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Messages/GetOrderTokensCommandHandler.cs (99%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Messages/GetShipmentTokensCommandHandler.cs (95%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Messages/GetShoppingCartTokensCommandHandler.cs (97%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Messages/GetStoreTokensCommandHandler.cs (95%) rename src/{Modules/Grand.Module.ScheduledTasks => Business/Grand.Business.Messages}/Commands/Handlers/Messages/GetVendorTokensCommandHandler.cs (95%) diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Catalog/SendNotificationsToSubscribersCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Catalog/SendNotificationsToSubscribersCommandHandler.cs similarity index 100% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Catalog/SendNotificationsToSubscribersCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Catalog/SendNotificationsToSubscribersCommandHandler.cs diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Catalog/SendOutBidCustomerNotificationCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Catalog/SendOutBidCustomerNotificationCommandHandler.cs similarity index 100% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Catalog/SendOutBidCustomerNotificationCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Catalog/SendOutBidCustomerNotificationCommandHandler.cs diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Catalog/SendQuantityBelowStoreOwnerNotificationCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Catalog/SendQuantityBelowStoreOwnerNotificationCommandHandler.cs similarity index 100% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Catalog/SendQuantityBelowStoreOwnerNotificationCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Catalog/SendQuantityBelowStoreOwnerNotificationCommandHandler.cs diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Common/ClearMostViewedCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Common/ClearMostViewedCommandHandler.cs similarity index 92% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Common/ClearMostViewedCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Common/ClearMostViewedCommandHandler.cs index 060a44cd7..f713ad6b4 100644 --- a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Common/ClearMostViewedCommandHandler.cs +++ b/src/Business/Grand.Business.Messages/Commands/Handlers/Common/ClearMostViewedCommandHandler.cs @@ -3,7 +3,7 @@ using Grand.Domain.Catalog; using MediatR; -namespace Grand.Business.System.Commands.Handlers.Common; +namespace Grand.Business.Messages.Commands.Handlers.Common; public class ClearMostViewedCommandHandler : IRequestHandler { diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Common/GetSitemapXMLCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Common/GetSitemapXMLCommandHandler.cs similarity index 98% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Common/GetSitemapXMLCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Common/GetSitemapXMLCommandHandler.cs index 63ee79bd4..f6730cd41 100644 --- a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Common/GetSitemapXMLCommandHandler.cs +++ b/src/Business/Grand.Business.Messages/Commands/Handlers/Common/GetSitemapXMLCommandHandler.cs @@ -19,7 +19,7 @@ using System.Text.RegularExpressions; using System.Xml; -namespace Grand.Business.System.Commands.Handlers.Common; +namespace Grand.Business.Messages.Commands.Handlers.Common; public class GetSitemapXmlCommandHandler : IRequestHandler { @@ -216,8 +216,11 @@ private async Task> GetCategoryUrls(string parentCategor var imageurl = string.Empty; if (_commonSettings.SitemapIncludeImage) if (!string.IsNullOrEmpty(category.PictureId)) + { imageurl = await _pictureService.GetPictureUrl(category.PictureId, showDefaultPicture: false, storeLocation: storeLocation); + } + categories.Add(new SitemapUrl(url, imageurl, UpdateFrequency.Weekly, category.UpdatedOnUtc ?? category.CreatedOnUtc)); categories.AddRange(await GetCategoryUrls(category.Id, language)); @@ -244,8 +247,11 @@ private async Task> GetBrandUrls(Language language, Stor var imageUrl = string.Empty; if (_commonSettings.SitemapIncludeImage) if (!string.IsNullOrEmpty(brand.PictureId)) + { imageUrl = await _pictureService.GetPictureUrl(brand.PictureId, showDefaultPicture: false, storeLocation: storeLocation); + } + brandUrls.Add(new SitemapUrl(url, imageUrl, UpdateFrequency.Weekly, brand.UpdatedOnUtc ?? brand.CreatedOnUtc)); } @@ -272,8 +278,11 @@ private async Task> GetProductUrls(Language language, St var imageUrl = string.Empty; if (_commonSettings.SitemapIncludeImage) if (!string.IsNullOrEmpty(product.ProductPictures.FirstOrDefault()?.PictureId)) + { imageUrl = await _pictureService.GetPictureUrl(product.ProductPictures.FirstOrDefault()?.PictureId, showDefaultPicture: false, storeLocation: storeLocation); + } + products.Add(new SitemapUrl(url, imageUrl, UpdateFrequency.Weekly, product.UpdatedOnUtc ?? product.CreatedOnUtc)); } @@ -319,8 +328,11 @@ private async Task> GetBlogPostsUrls(Language language, var imageurl = string.Empty; if (_commonSettings.SitemapIncludeImage) if (!string.IsNullOrEmpty(blogpost.PictureId)) + { imageurl = await _pictureService.GetPictureUrl(blogpost.PictureId, showDefaultPicture: false, storeLocation: storeLocation); + } + blog.Add(new SitemapUrl(url, imageurl, UpdateFrequency.Weekly, DateTime.UtcNow)); } diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetAttributeCombinationTokensCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetAttributeCombinationTokensCommandHandler.cs similarity index 83% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetAttributeCombinationTokensCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetAttributeCombinationTokensCommandHandler.cs index 72735f7df..ed28c8944 100644 --- a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetAttributeCombinationTokensCommandHandler.cs +++ b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetAttributeCombinationTokensCommandHandler.cs @@ -4,11 +4,9 @@ using Grand.Domain.Catalog; using MediatR; -namespace Grand.Business.System.Commands.Handlers.Messages; +namespace Grand.Business.Messages.Commands.Handlers.Messages; -public class - GetAttributeCombinationTokensCommandHandler : IRequestHandler +public class GetAttributeCombinationTokensCommandHandler : IRequestHandler { private readonly IProductAttributeFormatter _productAttributeFormatter; diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetAuctionTokensCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetAuctionTokensCommandHandler.cs similarity index 95% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetAuctionTokensCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetAuctionTokensCommandHandler.cs index 84d408e4d..d227da0db 100644 --- a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetAuctionTokensCommandHandler.cs +++ b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetAuctionTokensCommandHandler.cs @@ -5,7 +5,7 @@ using MediatR; using System.Globalization; -namespace Grand.Business.System.Commands.Handlers.Messages; +namespace Grand.Business.Messages.Commands.Handlers.Messages; public class GetAuctionTokensCommandHandler : IRequestHandler { diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetGiftVoucherTokensCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetGiftVoucherTokensCommandHandler.cs similarity index 94% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetGiftVoucherTokensCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetGiftVoucherTokensCommandHandler.cs index 44de20e31..24532ed65 100644 --- a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetGiftVoucherTokensCommandHandler.cs +++ b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetGiftVoucherTokensCommandHandler.cs @@ -4,7 +4,7 @@ using Grand.Business.Core.Utilities.Messages.DotLiquidDrops; using MediatR; -namespace Grand.Business.System.Commands.Handlers.Messages; +namespace Grand.Business.Messages.Commands.Handlers.Messages; public class GetGiftVoucherTokensCommandHandler : IRequestHandler { diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetMerchandiseReturnTokensCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetMerchandiseReturnTokensCommandHandler.cs similarity index 97% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetMerchandiseReturnTokensCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetMerchandiseReturnTokensCommandHandler.cs index 5d2d56c3c..03a96fb8d 100644 --- a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetMerchandiseReturnTokensCommandHandler.cs +++ b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetMerchandiseReturnTokensCommandHandler.cs @@ -5,7 +5,7 @@ using Grand.Business.Core.Utilities.Messages.DotLiquidDrops; using MediatR; -namespace Grand.Business.System.Commands.Handlers.Messages; +namespace Grand.Business.Messages.Commands.Handlers.Messages; public class GetMerchandiseReturnTokensCommandHandler : IRequestHandler { diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetShipmentTokensCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetShipmentTokensCommandHandler.cs similarity index 95% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetShipmentTokensCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetShipmentTokensCommandHandler.cs index 72c0a684a..6a9ff9433 100644 --- a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetShipmentTokensCommandHandler.cs +++ b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetShipmentTokensCommandHandler.cs @@ -3,7 +3,7 @@ using Grand.Business.Core.Utilities.Messages.DotLiquidDrops; using MediatR; -namespace Grand.Business.System.Commands.Handlers.Messages; +namespace Grand.Business.Messages.Commands.Handlers.Messages; public class GetShipmentTokensCommandHandler : IRequestHandler { diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetShoppingCartTokensCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetShoppingCartTokensCommandHandler.cs similarity index 97% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetShoppingCartTokensCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetShoppingCartTokensCommandHandler.cs index a205aa3a5..b8a0b7a0f 100644 --- a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetShoppingCartTokensCommandHandler.cs +++ b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetShoppingCartTokensCommandHandler.cs @@ -4,7 +4,7 @@ using Grand.Business.Core.Utilities.Messages.DotLiquidDrops; using MediatR; -namespace Grand.Business.System.Commands.Handlers.Messages; +namespace Grand.Business.Messages.Commands.Handlers.Messages; public class GetShoppingCartTokensCommandHandler : IRequestHandler { diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetStoreTokensCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetStoreTokensCommandHandler.cs similarity index 95% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetStoreTokensCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetStoreTokensCommandHandler.cs index 154df9937..bf27d7462 100644 --- a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetStoreTokensCommandHandler.cs +++ b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetStoreTokensCommandHandler.cs @@ -3,7 +3,7 @@ using Grand.Domain.Stores; using MediatR; -namespace Grand.Business.System.Commands.Handlers.Messages; +namespace Grand.Business.Messages.Commands.Handlers.Messages; public class GetStoreTokensCommandHandler : IRequestHandler { diff --git a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetVendorTokensCommandHandler.cs b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetVendorTokensCommandHandler.cs similarity index 95% rename from src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetVendorTokensCommandHandler.cs rename to src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetVendorTokensCommandHandler.cs index 0778fe661..7a6799f98 100644 --- a/src/Modules/Grand.Module.ScheduledTasks/Commands/Handlers/Messages/GetVendorTokensCommandHandler.cs +++ b/src/Business/Grand.Business.Messages/Commands/Handlers/Messages/GetVendorTokensCommandHandler.cs @@ -4,7 +4,7 @@ using Grand.Business.Core.Utilities.Messages.DotLiquidDrops; using MediatR; -namespace Grand.Business.System.Commands.Handlers.Messages; +namespace Grand.Business.Messages.Commands.Handlers.Messages; public class GetVendorTokensCommandHandler : IRequestHandler { diff --git a/src/Tests/Grand.Business.Marketing.Tests/Services/Customers/CustomerTagServiceTests.cs b/src/Tests/Grand.Business.Marketing.Tests/Services/Customers/CustomerTagServiceTests.cs index c800be1a4..dabbb7ec4 100644 --- a/src/Tests/Grand.Business.Marketing.Tests/Services/Customers/CustomerTagServiceTests.cs +++ b/src/Tests/Grand.Business.Marketing.Tests/Services/Customers/CustomerTagServiceTests.cs @@ -179,8 +179,8 @@ public async Task InsertTagToCustomerTest() await _customerTagService.InsertTagToCustomer(customerTag.Id, customer.Id); //Assert - Assert.IsTrue(_repositoryCustomer.Table.FirstOrDefault(x => x.Id == customer.Id).CustomerTags - .Contains(customerTag.Id)); + Assert.Contains(customerTag.Id, _repositoryCustomer.Table.FirstOrDefault(x => x.Id == customer.Id).CustomerTags +); } [TestMethod] @@ -198,8 +198,8 @@ public async Task DeleteTagFromCustomerTest() await _customerTagService.DeleteTagFromCustomer(customerTag.Id, customer.Id); //Assert - Assert.IsFalse(_repositoryCustomer.Table.FirstOrDefault(x => x.Id == customer.Id).CustomerTags - .Contains(customerTag.Id)); + Assert.DoesNotContain(customerTag.Id, _repositoryCustomer.Table.FirstOrDefault(x => x.Id == customer.Id).CustomerTags +); } [TestMethod] diff --git a/src/Tests/Grand.Modules.Tests/Commands/SendOutBidCustomerNotificationCommandHandlerTests.cs b/src/Tests/Grand.Modules.Tests/Commands/SendOutBidCustomerNotificationCommandHandlerTests.cs index 3cc5efef5..cf8d07f5b 100644 --- a/src/Tests/Grand.Modules.Tests/Commands/SendOutBidCustomerNotificationCommandHandlerTests.cs +++ b/src/Tests/Grand.Modules.Tests/Commands/SendOutBidCustomerNotificationCommandHandlerTests.cs @@ -3,7 +3,6 @@ using Grand.Domain.Catalog; using Grand.Domain.Localization; using Grand.Module.ScheduledTasks.Commands.Handlers.Catalog; -using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; namespace Grand.Modules.Tests.Commands; diff --git a/src/Tests/Grand.Modules.Tests/Grand.Modules.Tests.csproj b/src/Tests/Grand.Modules.Tests/Grand.Modules.Tests.csproj index 9a7b3207f..aa8e24bc4 100644 --- a/src/Tests/Grand.Modules.Tests/Grand.Modules.Tests.csproj +++ b/src/Tests/Grand.Modules.Tests/Grand.Modules.Tests.csproj @@ -18,6 +18,7 @@ +