From 0b0aa70e5ceb3128a1383b593b809bdd6025d7da Mon Sep 17 00:00:00 2001 From: "jozsef.b@aycode.com" <9Rj@D}fVwBaN> Date: Tue, 19 Dec 2023 11:42:26 +0100 Subject: [PATCH] Improvements efcore relation mappings, UserModels, etc... --- TIAM.Database.Test/TIAM.Database.Test.csproj | 2 +- TIAM.Database.Test/UserDalTests.cs | 6 +++++- .../DbContexts/ServiceProviders/ServiceProviderDbContext.cs | 2 +- TIAM.Database/DbContexts/Users/UserDbContext.cs | 5 +++-- TIAM.Database/DbSets/Users/UserDbSetExtensions.cs | 6 +++--- .../ModelBuilders/Users/UserEntityTypeBuilderExtensions.cs | 5 +++++ .../ModelBuilders/Users/UserEntityTypeConfigurations.cs | 1 + TIAM.Models/Dtos/Users/UserModelDto.cs | 6 +++--- TIAMSharedUI/Pages/DbTestComponent.razor | 2 +- TIAMWebApp/Client/Services/UserDataServiceWeb.cs | 3 +-- TIAMWebApp/Server/TIAMWebApp.Server.csproj | 2 +- 11 files changed, 25 insertions(+), 15 deletions(-) diff --git a/TIAM.Database.Test/TIAM.Database.Test.csproj b/TIAM.Database.Test/TIAM.Database.Test.csproj index 58787465..a4d46fba 100644 --- a/TIAM.Database.Test/TIAM.Database.Test.csproj +++ b/TIAM.Database.Test/TIAM.Database.Test.csproj @@ -15,7 +15,7 @@ - + diff --git a/TIAM.Database.Test/UserDalTests.cs b/TIAM.Database.Test/UserDalTests.cs index 708f55a2..7823c5e6 100644 --- a/TIAM.Database.Test/UserDalTests.cs +++ b/TIAM.Database.Test/UserDalTests.cs @@ -54,6 +54,8 @@ namespace TIAM.Database.Test [TestMethod] [DataRow("540271F6-C604-4C16-8160-D5A7CAFEDF00")] + [DataRow("dcf451d2-cc4c-4ac2-8c1f-da00041be1fd")] + [DataRow("ac612aa8-863b-4b4f-9d63-f5d261b5c5f9")] public async Task SerializeUserModelDto_ReturnDeserializedUser_WhenUserAndRelationsExists(string userIdString) { var userId = Guid.Parse(userIdString); @@ -72,7 +74,9 @@ namespace TIAM.Database.Test Assert.IsNotNull(userModel); Assert.IsNotNull(userModel.UserDto); Assert.IsNotNull(userModel.Profile); - + + if (userId != Guid.Parse("540271F6-C604-4C16-8160-D5A7CAFEDF00")) return; //csak az "540271F6.."-nek van product-ja! - J. + Assert.IsTrue(userModel.Products.Count > 0); Assert.IsTrue(userModel.UserProductMappings.Count > 0); } diff --git a/TIAM.Database/DbContexts/ServiceProviders/ServiceProviderDbContext.cs b/TIAM.Database/DbContexts/ServiceProviders/ServiceProviderDbContext.cs index b4e3e562..73a21689 100644 --- a/TIAM.Database/DbContexts/ServiceProviders/ServiceProviderDbContext.cs +++ b/TIAM.Database/DbContexts/ServiceProviders/ServiceProviderDbContext.cs @@ -60,7 +60,7 @@ namespace TIAM.Database.DbContexts.ServiceProviders base.OnModelCreating(modelBuilder); new UserEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity()); - new UserProductMappingEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity()); + //new UserProductMappingEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity()); new ProductEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity()); } diff --git a/TIAM.Database/DbContexts/Users/UserDbContext.cs b/TIAM.Database/DbContexts/Users/UserDbContext.cs index 7f152c12..85df6bad 100644 --- a/TIAM.Database/DbContexts/Users/UserDbContext.cs +++ b/TIAM.Database/DbContexts/Users/UserDbContext.cs @@ -53,8 +53,9 @@ namespace TIAM.Database.DbContexts.Users base.OnModelCreating(modelBuilder); new UserEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity()); - - modelBuilder.Entity().BuildProductToServiceProviderRelation(); + new ProductEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity()); + + //modelBuilder.Entity().BuildProductToServiceProviderRelation(); //new UserProductMappingEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity()); } } diff --git a/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs b/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs index fd903e6b..90d4f7f1 100644 --- a/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs +++ b/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs @@ -22,12 +22,12 @@ public static class UserDbSetExtensions => ctx.UsersWithProductRelations(autoInclude).FirstOrDefault(x => x.EmailAddress == email); public static UserModelDto? GetUserModelDtoById(this IUserDbSet ctx, Guid userId) - => ctx.GetUsersById(userId).Select(x => new UserModelDto(x, x.Profile, x.UserProductMappings, x.Products)).FirstOrDefault(); + => ctx.GetUsersById(userId).Select(user => new UserModelDto(user)).FirstOrDefault(); public static UserModelDto? GetUserModelDtoByEmail(this IUserDbSet ctx, string email) - => ctx.GetUsersByEmail(email).Select(x => new UserModelDto(x, x.Profile, x.UserProductMappings, x.Products)).FirstOrDefault(); + => ctx.GetUsersByEmail(email).Select(user => new UserModelDto(user)).FirstOrDefault(); public static IQueryable GetAllUsersModelDto(this IUserDbSet ctx) - => ctx.Users.Select(x => new UserModelDto(x, x.Profile, x.UserProductMappings, x.Products)); + => ctx.Users.Select(user => new UserModelDto(user)); } \ No newline at end of file diff --git a/TIAM.Database/ModelBuilders/Users/UserEntityTypeBuilderExtensions.cs b/TIAM.Database/ModelBuilders/Users/UserEntityTypeBuilderExtensions.cs index c6f0b9de..3be9bf1a 100644 --- a/TIAM.Database/ModelBuilders/Users/UserEntityTypeBuilderExtensions.cs +++ b/TIAM.Database/ModelBuilders/Users/UserEntityTypeBuilderExtensions.cs @@ -31,6 +31,11 @@ public static class UserEntityTypeBuilderExtensions modelBuilder.Navigation(e => e.UserProductMappings).AutoInclude(autoInclude); } + public static void BuildUserProfileRelation(this EntityTypeBuilder modelBuilder) where TUser : class, IUserBase where TProfile : class, IAcProfileBase + { + modelBuilder.Navigation(e => e.Profile).AutoInclude(true); + } + #endregion User #region UserProductMapping diff --git a/TIAM.Database/ModelBuilders/Users/UserEntityTypeConfigurations.cs b/TIAM.Database/ModelBuilders/Users/UserEntityTypeConfigurations.cs index d2b34ea1..f82e36b4 100644 --- a/TIAM.Database/ModelBuilders/Users/UserEntityTypeConfigurations.cs +++ b/TIAM.Database/ModelBuilders/Users/UserEntityTypeConfigurations.cs @@ -21,6 +21,7 @@ public class UserEntityTypeDefaultConfiguration : IAcEntityTypeConfiguration(); builder.BuildUserToUserProductMappingRelation(); builder.BuildUserToServiceProviderRelation(); } diff --git a/TIAM.Models/Dtos/Users/UserModelDto.cs b/TIAM.Models/Dtos/Users/UserModelDto.cs index af14d99c..ff50649c 100644 --- a/TIAM.Models/Dtos/Users/UserModelDto.cs +++ b/TIAM.Models/Dtos/Users/UserModelDto.cs @@ -14,14 +14,14 @@ public class UserModelDto : AcUserModelDtoBase public List Products = new(); public UserModelDto(){} - public UserModelDto(User user, Profile profile, List userProductMappings, List products) : base(user, profile) + public UserModelDto(User user) : base(user) { - foreach (var product in products) + foreach (var product in user.Products) { Products.Add(new Product(product.Id, product.ServiceProviderId, product.ProductType, product.Name, product.Description, product.Price, product.JsonDetails)); } - foreach (var userProduct in userProductMappings) + foreach (var userProduct in user.UserProductMappings) { UserProductMappings.Add(new UserProductMapping(userProduct.Id, userProduct.UserId, userProduct.ProductId)); } diff --git a/TIAMSharedUI/Pages/DbTestComponent.razor b/TIAMSharedUI/Pages/DbTestComponent.razor index 94cca67d..440abd62 100644 --- a/TIAMSharedUI/Pages/DbTestComponent.razor +++ b/TIAMSharedUI/Pages/DbTestComponent.razor @@ -13,7 +13,7 @@ else @foreach (var dest in Users) {

- @(dest.Profile == null ? dest.UserDto.Id.ToString() : dest.Profile.Name) + @(dest.Profile.Name.IsNullOrWhiteSpace() ? dest.Id.ToString() : dest.Profile.Name)

} diff --git a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs index 0738fc56..430d3786 100644 --- a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs +++ b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs @@ -38,7 +38,6 @@ namespace TIAMWebApp.Client.Services public async Task IsLoggedInAsync(Guid id) { - UserSessionModel user = null; //api call to get user var userModelDto = await GetUserByIdAsync(id); @@ -56,7 +55,7 @@ namespace TIAMWebApp.Client.Services logToBrowserConsole.LogToBC($"{hasProperties.Count} properties found"); //create user session model - user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto.Profile?.Name, hasProperties, 1); + var user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto.Profile?.Name, hasProperties, 1); return user; } else diff --git a/TIAMWebApp/Server/TIAMWebApp.Server.csproj b/TIAMWebApp/Server/TIAMWebApp.Server.csproj index b5aa5914..9ef4bac1 100644 --- a/TIAMWebApp/Server/TIAMWebApp.Server.csproj +++ b/TIAMWebApp/Server/TIAMWebApp.Server.csproj @@ -7,7 +7,7 @@ - +