From 4c4bc1133578c6eef2ca5b8cba4786806e7a739e Mon Sep 17 00:00:00 2001 From: Loretta Date: Tue, 16 Sep 2025 09:12:40 +0200 Subject: [PATCH] entities load relations improvements; fixes, etc.. --- .../Controllers/FruitBankDataController.cs | 4 +-- .../Domains/DataLayer/FruitBankDbContext.cs | 2 +- .../Domains/DataLayer/PartnerDbTable.cs | 16 +++++++++++ .../Domains/DataLayer/ShippingDbTable.cs | 2 +- .../DataLayer/ShippingDocumentDbTable.cs | 21 +++++++++++++++ .../Domains/DataLayer/ShippingItemDbTable.cs | 27 +++++++++++++++++++ 6 files changed, 68 insertions(+), 4 deletions(-) diff --git a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs index ce6fe59..00d901e 100644 --- a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs +++ b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs @@ -89,7 +89,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers { _logger.Detail($"GetNotMeasuredShippings invoked"); - return await ctx.Shippings.GetNotMeasured(true).ToListAsync(); + return await ctx.Shippings.GetAllNotMeasured(true).ToListAsync(); } [SignalR(SignalRTags.GetShippingById)] @@ -181,7 +181,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers { _logger.Detail($"GetProductDtos invoked"); - return await ctx.GetProducts().Select(c => new ProductDto(c)).ToListAsync(); + return await ctx.GetAllProducts().Select(c => new ProductDto(c)).ToListAsync(); } [SignalR(SignalRTags.AuthenticateUser)] diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs index f84d363..b31081a 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs @@ -74,6 +74,6 @@ public class FruitBankDbContext : MgDbContextBase, IPartnerDbSet return query.Distinct().OrderBy(o => o.Username); } - public IQueryable GetProducts() + public IQueryable GetAllProducts() => Products.Table.Where(p => !p.Deleted).OrderBy(o => o.Name); } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/PartnerDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/PartnerDbTable.cs index 900b65f..25df3a5 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/PartnerDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/PartnerDbTable.cs @@ -1,4 +1,5 @@ using FruitBank.Common.Entities; +using LinqToDB; using Mango.Nop.Core.Repositories; using Nop.Core.Caching; using Nop.Core.Configuration; @@ -15,6 +16,21 @@ public class PartnerDbTable : MgDbTableBase { } + public override IOrderedQueryable GetAll() + => base.GetAll().OrderBy(p => p.Name); + + public IQueryable GetAll(bool loadRelations) + { + return loadRelations + ? GetAll() + .LoadWith(sd => sd.ShippingDocuments).ThenLoad(s => s.Shipping) + .LoadWith(sd => sd.ShippingDocuments).ThenLoad(si => si.ShippingItems) + : GetAll(); + } + + public Task GetByIdAsync(int id, bool loadRelations) + => GetAll(loadRelations).FirstOrDefaultAsync(p => p.Id == id); + //public IOrderedQueryable GetAllLastBidByAuctionId(int auctionId) //{ diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs index e6d81b9..6614130 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs @@ -28,7 +28,7 @@ public class ShippingDbTable : MgDbTableBase : GetAll(); } - public IQueryable GetNotMeasured(bool loadRelations) + public IQueryable GetAllNotMeasured(bool loadRelations) => GetAll(loadRelations).Where(s => !s.IsAllMeasured); diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentDbTable.cs index aad6170..e80431b 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentDbTable.cs @@ -1,4 +1,5 @@ using FruitBank.Common.Entities; +using LinqToDB; using Mango.Nop.Core.Repositories; using Nop.Core.Caching; using Nop.Core.Configuration; @@ -14,4 +15,24 @@ public class ShippingDocumentDbTable : MgDbTableBase : base(eventPublisher, dataProvider, shortTermCacheManager, staticCacheManager, appSettings, logger) { } + + public override IOrderedQueryable GetAll() + => base.GetAll().OrderBy(sd => sd.ShippingDate); + + public IQueryable GetAll(bool loadRelations) + { + return loadRelations + ? GetAll() + .LoadWith(s => s.Shipping) + .LoadWith(si => si.ShippingItems) + .LoadWith(p => p.Partner) + : GetAll(); + } + + public IQueryable GetAllNotMeasured(bool loadRelations) + => GetAll(loadRelations).Where(sd => !sd.IsAllMeasured); + + + public Task GetByIdAsync(int id, bool loadRelations) + => GetAll(loadRelations).FirstOrDefaultAsync(sd => sd.Id == id); } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs index 7a1c164..1889b3f 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs @@ -1,4 +1,5 @@ using FruitBank.Common.Entities; +using LinqToDB; using Mango.Nop.Core.Repositories; using Nop.Core.Caching; using Nop.Core.Configuration; @@ -14,4 +15,30 @@ public class ShippingItemDbTable : MgDbTableBase : base(eventPublisher, dataProvider, shortTermCacheManager, staticCacheManager, appSettings, logger) { } + + public override IQueryable GetAll() + => base.GetAll(); + + public IQueryable GetAll(bool loadRelations) + { + return loadRelations + ? GetAll() + .LoadWith(sd => sd.ShippingDocument).ThenLoad(s => s.Shipping) + .LoadWith(sd => sd.ShippingDocument).ThenLoad(p => p.Partner) + : GetAll(); + } + + public IQueryable GetAllNotMeasured(bool loadRelations) + => GetAll(loadRelations).Where(si => !si.IsMeasured); + + + public Task GetByIdAsync(int id, bool loadRelations) + => GetAll(loadRelations).FirstOrDefaultAsync(si => si.Id == id); + + public IQueryable GetAllByProductIdAsync(int productid, bool loadRelations) + => GetAll(loadRelations).Where(si => si.ProductId == productid); + + public IQueryable GetAllByShippingDocumentIdAsync(int shippingDocumentId, bool loadRelations) + => GetAll(loadRelations).Where(si => si.ShippingDocumentId == shippingDocumentId); + } \ No newline at end of file