From c94c61e51ee250f6353c2561d73e3974d7553057 Mon Sep 17 00:00:00 2001 From: Loretta Date: Fri, 3 Oct 2025 07:19:24 +0200 Subject: [PATCH] improvements, fixes, etc... --- .../Controllers/FruitBankDataController.cs | 18 ++---- .../Domains/DataLayer/FruitBankDbContext.cs | 61 +++++++++++++------ .../Domains/DataLayer/ShippingDbTable.cs | 2 +- .../EventConsumers/FruitBankEventConsumer.cs | 33 +++++++++- 4 files changed, 80 insertions(+), 34 deletions(-) diff --git a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs index a01e562..069a182 100644 --- a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs +++ b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs @@ -1,5 +1,6 @@ using AyCode.Core.Loggers; using AyCode.Services.SignalRs; +using DocumentFormat.OpenXml.Office2010.Excel; using FruitBank.Common.Dtos; using FruitBank.Common.Entities; using FruitBank.Common.Interfaces; @@ -40,12 +41,6 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers throw new NotImplementedException("GetMeasuringModels"); } - [SignalR(SignalRTags.GetMeasuringModelByShippingId)] - public async Task GetMeasuringModelByShippingId(int shippingId) - { - return await ctx.GetMeasuringModelByShippingId(shippingId).FirstOrDefaultAsync(c => true); - } - [SignalR(SignalRTags.GetPartners)] public async Task> GetPartners() { @@ -73,7 +68,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers _logger.Detail($"UpdatePartner invoked; id: {partner.Id}"); await ctx.Partners.UpdateAsync(partner); - return partner; + return await ctx.Partners.GetByIdAsync(partner.Id, partner.ShippingDocuments != null); } @@ -110,7 +105,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers _logger.Detail($"UpdateShipping invoked; id: {shipping.Id}"); await ctx.Shippings.UpdateAsync(shipping); - return shipping; + return await ctx.Shippings.GetByIdAsync(shipping.Id, shipping.ShippingDocuments != null); } [SignalR(SignalRTags.GetShippingItems)] @@ -137,7 +132,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers _logger.Detail($"UpdateShippingItem invoked; id: {shippingItem.Id}"); - if (!await ctx.UpdateShippingItemAsync(shippingItem)) return null; + if (!await ctx.UpdateShippingItemSafeAsync(shippingItem)) return null; return await ctx.ShippingItems.GetByIdAsync(shippingItem.Id, shippingItem.ShippingDocument != null); } @@ -148,7 +143,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers _logger.Detail($"UpdateMeasuredShippingItem invoked; id: {shippingItem.Id}"); - if (!await ctx.UpdateMeasuredShippingItemAsync(shippingItem)) return null; + if (!await ctx.UpdateMeasuredShippingItemSafeAsync(shippingItem)) return null; return await ctx.ShippingItems.GetByIdAsync(shippingItem.Id, shippingItem.ShippingDocument != null); } @@ -176,8 +171,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers _logger.Detail($"UpdateShippingDocument invoked; id: {shippingDocument.Id}"); await ctx.ShippingDocuments.UpdateAsync(shippingDocument); - return shippingDocument; - + return await ctx.ShippingDocuments.GetByIdAsync(shippingDocument.Id, shippingDocument.Shipping != null); } [SignalR(SignalRTags.GetMeasuringUsers)] diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs index 0158bf6..4ff2f63 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs @@ -37,7 +37,7 @@ public class FruitBankDbContext : MgDbContextBase, IPartnerDbSet public ShippingDocumentDbTable ShippingDocuments { get; set; } public ShippingItemDbTable ShippingItems { get; set; } public ShippingItemPalletDbTable ShippingItemPallets { get; set; } - + public IRepository Products { get; set; } public IRepository Customers { get; set; } public IRepository CustomerRoles { get; set; } @@ -70,17 +70,6 @@ public class FruitBankDbContext : MgDbContextBase, IPartnerDbSet CustomerRoleMappings = customerCustomerRoleMappingRepository; } - public IQueryable GetMeasuringModelByShippingId(int shippingId) - { - var query = - from p in Partners.Table - join s in Shippings.Table on p.Id equals s.PartnerId - where s.Id == shippingId - select new MeasuringModel(p.Name); - - return query; - } - public IQueryable GetCustomersBySystemRoleName(string systemRoleName) { if (systemRoleName.IsNullOrWhiteSpace()) throw new ArgumentException("systemRoleName.IsNullOrWhiteSpace()", nameof(systemRoleName)); @@ -121,15 +110,51 @@ public class FruitBankDbContext : MgDbContextBase, IPartnerDbSet public async Task GetMeasuringAttributeValuesByProductIdAsync(int productId) => await _fruitBankAttributeService.GetMeasuringAttributeValuesAsync(productId); - public Task UpdateMeasuredShippingItemAsync(ShippingItem shippingItem) + public async Task DeleteShippingSafeAsync(Shipping shipping) { - if (shippingItem.IsValidMeasuringValues()) return UpdateShippingItemAsync(shippingItem); + await TransactionSafeAsync(async tr => + { + await Shippings.DeleteAsync(shipping, true); + return true; + }); + } + + public async Task DeleteShippingDocumentSafeAsync(ShippingDocument shippingDocument) + { + await TransactionSafeAsync(async tr => + { + await ShippingDocuments.DeleteAsync(shippingDocument, true); + return true; + }); + } + + public async Task DeleteShippingItemSafeAsync(ShippingItem shippingItem) + { + await TransactionSafeAsync(async tr => + { + await ShippingItems.DeleteAsync(shippingItem, true); + return true; + }); + } + + public async Task DeleteShippingItemPalletSafeAsync(ShippingItemPallet shippingItemPallet) + { + await TransactionSafeAsync(async tr => + { + await ShippingItemPallets.DeleteAsync(shippingItemPallet, false); + return true; + }); + } + + public Task UpdateMeasuredShippingItemSafeAsync(ShippingItem shippingItem) + { + if (shippingItem.IsValidMeasuringValues()) return UpdateShippingItemSafeAsync(shippingItem); Logger.Error("shippingItem.IsMeasurable && !shippingItem.IsValidMeasuringValues()"); return Task.FromResult(false); } - public Task UpdateShippingItemAsync(ShippingItem shippingItem) + public Task UpdateShippingItemSafeAsync(ShippingItem shippingItem) { if (shippingItem == null) { @@ -174,7 +199,7 @@ public class FruitBankDbContext : MgDbContextBase, IPartnerDbSet shippingItem.IsMeasured == dbShippingItem.IsMeasured && shippingItem.IsMeasurable == dbShippingItem.IsMeasurable && shippingItem.MeasuredQuantity == dbShippingItem.MeasuredQuantity && // ReSharper disable once CompareOfFloatsByEqualityOperator - shippingItem.MeasuredNetWeight == dbShippingItem.MeasuredNetWeight && + shippingItem.MeasuredNetWeight == dbShippingItem.MeasuredNetWeight && // ReSharper disable once CompareOfFloatsByEqualityOperator shippingItem.MeasuredGrossWeight == dbShippingItem.MeasuredGrossWeight) { @@ -222,13 +247,11 @@ public class FruitBankDbContext : MgDbContextBase, IPartnerDbSet } catch (Exception ex) { - throw new Exception($"UpdateShippingItemAsync->TransactionSafeAsync error! shippingItem.Id: {shippingItem.Id}; ex: {ex.Message}", ex); + throw new Exception($"UpdateShippingItemSafeAsync->TransactionSafeAsync error! shippingItem.Id: {shippingItem.Id}; ex: {ex.Message}", ex); } }); } - - private async Task UpdateProductStockQuantityAsync(int productId, bool publishEvent) { var product = await Products.GetByIdAsync(productId); diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs index 2da6e4e..f6421c7 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs @@ -40,5 +40,5 @@ public class ShippingDbTable : MgDbTableBase if (entity is { IsAllMeasured: true, MeasuredDate: null }) entity.MeasuredDate = DateTime.Now; base.OnUpdate(entity); - } + } } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/EventConsumers/FruitBankEventConsumer.cs b/Nop.Plugin.Misc.AIPlugin/Domains/EventConsumers/FruitBankEventConsumer.cs index ceb7026..e494ecd 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/EventConsumers/FruitBankEventConsumer.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/EventConsumers/FruitBankEventConsumer.cs @@ -1,4 +1,5 @@ using AyCode.Core.Loggers; +using AyCode.Interfaces.Entities; using FruitBank.Common.Entities; using FruitBank.Common.Interfaces; using FruitBank.Common.Loggers; @@ -17,7 +18,7 @@ using Nop.Services.Events; namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.EventConsumers; -public class FruitBankEventConsumer(IHttpContextAccessor httpContextAccessor, FruitBankDbContext ctx, FruitBankAttributeService fruitBankAttributeService, IStoreContext storeContext, IEnumerable logWriters) : +public class FruitBankEventConsumer(IHttpContextAccessor httpContextAccessor, FruitBankDbContext ctx, FruitBankAttributeService fruitBankAttributeService, IStoreContext storeContext, IEnumerable logWriters) : MgEventConsumer(httpContextAccessor, logWriters), IConsumer>, IConsumer> { public override async Task HandleEventAsync(EntityUpdatedEvent eventMessage) @@ -40,6 +41,8 @@ public class FruitBankEventConsumer(IHttpContextAccessor httpContextAccessor, Fr await UpdateShippingDocumentIsAllMeasuredAsync(eventMessage.Entity); } + #region Update + public async Task HandleEventAsync(EntityUpdatedEvent eventMessage) { Logger.Info($"HandleEventAsync EntityUpdatedEvent; id: {eventMessage.Entity.Id}"); @@ -52,7 +55,7 @@ public class FruitBankEventConsumer(IHttpContextAccessor httpContextAccessor, Fr shippingItem.IsMeasured = isMeasured; await ctx.ShippingItems.UpdateAsync(shippingItem, false); } - + await UpdateShippingDocumentIsAllMeasuredAsync(shippingItem); } @@ -95,4 +98,30 @@ public class FruitBankEventConsumer(IHttpContextAccessor httpContextAccessor, Fr } } + #endregion Update + + #region Delete + + public async Task HandleEventAsync(EntityDeletedEvent eventMessage) + { + Logger.Info($"HandleEventAsync EntityDeletedEvent; id: {eventMessage.Entity.Id}"); + + await ctx.ShippingDocuments.DeleteAsync(sd => sd.ShippingId == eventMessage.Entity.Id, true); + } + + public async Task HandleEventAsync(EntityDeletedEvent eventMessage) + { + Logger.Info($"HandleEventAsync EntityDeletedEvent; id: {eventMessage.Entity.Id}"); + + await ctx.ShippingItems.DeleteAsync(si => si.ShippingDocumentId == eventMessage.Entity.Id, true); + } + + public async Task HandleEventAsync(EntityDeletedEvent eventMessage) + { + Logger.Info($"HandleEventAsync EntityDeletedEvent; id: {eventMessage.Entity.Id}"); + + await ctx.ShippingItemPallets.DeleteAsync(sp => sp.ShippingItemId == eventMessage.Entity.Id, false); + } + + #endregion Delete } \ No newline at end of file