diff --git a/TIAM.Database.Test/ServiceProviderDalTest.cs b/TIAM.Database.Test/ServiceProviderDalTest.cs
index faeca1bb..1c1e9e06 100644
--- a/TIAM.Database.Test/ServiceProviderDalTest.cs
+++ b/TIAM.Database.Test/ServiceProviderDalTest.cs
@@ -5,6 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AyCode.Database.DataLayers.Users;
+using Newtonsoft.Json;
using TIAM.Database.DataLayers.ServiceProviders;
using TIAM.Database.DataLayers.Users;
using TIAM.Database.DbContexts.ServiceProviders;
@@ -97,11 +98,35 @@ namespace TIAM.Database.Test
public void GetUserProductMappingById_ReturnsUserProductMapping_WherHasUserAndProductRelation(string userProductMappingIdString)
{
var userProductMappingId = Guid.Parse(userProductMappingIdString);
- var userProductMapping = Dal.GetUserProductMappingById(userProductMappingId);
+ var userProductMapping = Dal.GetUserProductMappingById(userProductMappingId, true);
Assert.IsNotNull(userProductMapping);
Assert.IsNotNull(userProductMapping.User, "User is null");
Assert.IsNotNull(userProductMapping.Product, "Product is null");
}
+
+ //[TestMethod]
+ //[DataRow("540271F6-C604-4C16-8160-D5A7CAFEDF00")]
+ //public void SerializeUser_ReturnDeserializedUser_WhenUserAndRelationsExists(string userIdString)
+ //{
+ // var userId = Guid.Parse(userIdString);
+ // var user = Dal.GetUserProductMappingById(userId);
+
+ // JsonSerializerSettings options = new()
+ // {
+ // ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
+ // //NullValueHandling = NullValueHandling.Ignore
+ // };
+
+ // var serializedUser = JsonConvert.SerializeObject(user, options);
+ // user = JsonConvert.DeserializeObject(serializedUser);
+
+ // Assert.IsNotNull(user);
+ // Assert.IsNotNull(user.Products);
+ // Assert.IsNotNull(user.UserProductMappings);
+ // Assert.IsNotNull(user.UserProductMappings.FirstOrDefault()?.Product);
+
+ // Assert.IsTrue(user.Products.Count > 0);
+ //}
}
}
diff --git a/TIAM.Database.Test/UserDalTests.cs b/TIAM.Database.Test/UserDalTests.cs
index b8969acd..708f55a2 100644
--- a/TIAM.Database.Test/UserDalTests.cs
+++ b/TIAM.Database.Test/UserDalTests.cs
@@ -10,12 +10,15 @@ using System.Text.Json.Serialization;
using System.Text.Json;
using TIAM.Database.DataLayers.Users;
using TIAM.Database.DbContexts.Users;
+using TIAM.Entities.Profiles;
using TIAM.Entities.Users;
+using TIAM.Models.Dtos.Users;
+using AyCode.Interfaces.Users.Dtos;
namespace TIAM.Database.Test
{
[TestClass]
- public class UserDalTests : AcUserDalTestBase
+ public class UserDalTests : AcUserDalTestBase
{
private Mock _mockContext;
@@ -51,23 +54,27 @@ namespace TIAM.Database.Test
[TestMethod]
[DataRow("540271F6-C604-4C16-8160-D5A7CAFEDF00")]
- public void SerializeUser_ReturnDeserializedUser_WhenUserAndRelationsExists(string userIdString)
+ public async Task SerializeUserModelDto_ReturnDeserializedUser_WhenUserAndRelationsExists(string userIdString)
{
var userId = Guid.Parse(userIdString);
- var user = Dal.GetUserById(userId);
JsonSerializerSettings options = new()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
- //NullValueHandling = NullValueHandling.Ignore
+ NullValueHandling = NullValueHandling.Ignore
};
- var serializedUser = JsonConvert.SerializeObject(user, options);
- user = JsonConvert.DeserializeObject(serializedUser);
+ var userModel = await Dal.GetUserModelDtoByIdAsync(userId).ConfigureAwait(false);
- Assert.IsNotNull(user);
- Assert.IsNotNull(user.UserProductMappings);
- //Assert.IsNotNull(user.UserProductMappings.FirstOrDefault()?.Product);
+ var serializedUserModel = JsonConvert.SerializeObject(userModel, options);
+ userModel = JsonConvert.DeserializeObject(serializedUserModel);
+
+ Assert.IsNotNull(userModel);
+ Assert.IsNotNull(userModel.UserDto);
+ Assert.IsNotNull(userModel.Profile);
+
+ Assert.IsTrue(userModel.Products.Count > 0);
+ Assert.IsTrue(userModel.UserProductMappings.Count > 0);
}
//[TestMethod]
diff --git a/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDal.cs b/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDal.cs
index cd6843b2..38041400 100644
--- a/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDal.cs
+++ b/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDal.cs
@@ -8,14 +8,15 @@ using Microsoft.EntityFrameworkCore;
using TIAM.Entities.Permissions;
using TIAM.Entities.Products;
using TIAM.Entities.ServiceProviders;
-using TIAM.Entities.Products.DTOs;
using TIAM.Entities.Users;
using TIAM.Database.DbContexts.ServiceProviders;
using TIAM.Database.DbSets.Permissions;
using TIAM.Database.DbSets.Users;
+using TIAM.Entities.Products.DTOs;
using AyCode.Database.DataLayers;
using AyCode.Database.DbSets.Users;
using TIAM.Database.DbSets.Products;
+using TIAM.Models.Dtos.Users;
namespace TIAM.Database.DataLayers.ServiceProviders
@@ -31,9 +32,13 @@ namespace TIAM.Database.DataLayers.ServiceProviders
{
}
-
+ public User? GetUserById(Guid userId, bool autoInclude = false) => Session(x => x.GetUserById(userId, autoInclude));
+ public User? GetUserByEmail(string email, bool autoInclude = false) => Session(x => x.GetUserByEmail(email, autoInclude));
- public UserProductMapping? GetUserProductMappingById(Guid userProductMappingId) => Session(x => x.GetUserProductMappingById(userProductMappingId));
+ public UserModelDto? GetUserModelDtoById(Guid userId) => Session(x => x.GetUserModelDtoById(userId));
+ public UserModelDto? GetUserModelDtoByEmail(string email) => Session(x => x.GetUserModelDtoByEmail(email));
+
+ public UserProductMapping? GetUserProductMappingById(Guid userProductMappingId, bool autoInclude = true) => Session(x => x.GetUserProductMappingById(userProductMappingId, autoInclude));
#region ServiceProviders
diff --git a/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDalExtension.cs b/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDalExtension.cs
index cb7a9192..22796270 100644
--- a/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDalExtension.cs
+++ b/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDalExtension.cs
@@ -99,7 +99,7 @@ public static class ServiceProviderDalExtension
existingProduct.Description = product.Description;
existingProduct.Price = product.Price;
existingProduct.JsonDetails = product.JsonDetails;
- existingProduct.UserMediaId = product.UserMediaId;
+ //existingProduct.UserMediaId = product.UserMediaId;
existingProduct.ProductType = product.ProductType;
diff --git a/TIAM.Database/DataLayers/Users/UserDal.cs b/TIAM.Database/DataLayers/Users/UserDal.cs
index bccb9f87..79ae65f7 100644
--- a/TIAM.Database/DataLayers/Users/UserDal.cs
+++ b/TIAM.Database/DataLayers/Users/UserDal.cs
@@ -5,14 +5,18 @@ using System.Text;
using System.Threading.Tasks;
using AyCode.Database.DataLayers;
using AyCode.Database.DataLayers.Users;
+using AyCode.Database.DbSets.Users;
using AyCode.Entities.Users;
using Microsoft.EntityFrameworkCore;
using TIAM.Database.DbContexts.Users;
+using TIAM.Database.DbSets.Users;
+using TIAM.Entities.Profiles;
using TIAM.Entities.Users;
+using TIAM.Models.Dtos.Users;
namespace TIAM.Database.DataLayers.Users
{
- public class UserDal : AcUserDalBase
+ public class UserDal : AcUserDalBase
{
public UserDal() : base()
@@ -28,14 +32,9 @@ namespace TIAM.Database.DataLayers.Users
return Context.Users.ToListAsync();
}
- //public Task GetUserByEmailAsync(string email)
- //{
- // Console.WriteLine($"Getting user from db {email}");
- // //var emailLower = email.ToLower();
-
- // return Context.GetUserByEmail(email);
- // //return Context.Users.SingleOrDefaultAsync(x=>x.Email.ToLower() == emailLower);
- //}
+ public Task GetUserModelDtoByIdAsync(Guid userId) => SessionAsync(x => x.GetUserModelDtoById(userId));
+ public Task GetUserModelDtoByEmailAsync(string email) => SessionAsync(x => x.GetUserModelDtoByEmail(email));
+ public Task> GetAllUsersModelDtoAsync() => SessionAsync(x => x.GetAllUsersModelDto().ToList());
public Task GetUserByPhoneNumberAsync(string phoneNumber)
{
diff --git a/TIAM.Database/DbContexts/DbContextBase.cs b/TIAM.Database/DbContexts/DbContextBase.cs
index b884bc06..ea346ee4 100644
--- a/TIAM.Database/DbContexts/DbContextBase.cs
+++ b/TIAM.Database/DbContexts/DbContextBase.cs
@@ -29,7 +29,7 @@ namespace TIAM.Database.DbContexts
{
base.OnConfiguring(optionsBuilder);
- optionsBuilder.UseLazyLoadingProxies(false);
+ optionsBuilder.UseLazyLoadingProxies(true);
optionsBuilder.EnableDetailedErrors(true);
//optionsBuilder.UseSqlServer(Configuration.GetConnectionString("DeveloperDbConnection"));
diff --git a/TIAM.Database/DbContexts/Users/IUserDbContext.cs b/TIAM.Database/DbContexts/Users/IUserDbContext.cs
index a2ffac38..873d3348 100644
--- a/TIAM.Database/DbContexts/Users/IUserDbContext.cs
+++ b/TIAM.Database/DbContexts/Users/IUserDbContext.cs
@@ -1,10 +1,11 @@
using AyCode.Database.DbContexts.Users;
using AyCode.Entities.Users;
using TIAM.Database.DbSets.Users;
+using TIAM.Entities.Profiles;
using TIAM.Entities.Users;
namespace TIAM.Database.DbContexts.Users;
-public interface IUserDbContext : IAcUserDbContextBase
+public interface IUserDbContext : IAcUserDbContextBase, IUserDbSet
{
}
\ No newline at end of file
diff --git a/TIAM.Database/DbContexts/Users/UserDbContext.cs b/TIAM.Database/DbContexts/Users/UserDbContext.cs
index b0dba871..7f152c12 100644
--- a/TIAM.Database/DbContexts/Users/UserDbContext.cs
+++ b/TIAM.Database/DbContexts/Users/UserDbContext.cs
@@ -11,8 +11,10 @@ using AyCode.Entities.Users;
using AyCode.Interfaces.Users;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
+using TIAM.Database.ModelBuilders.Products;
using TIAM.Database.ModelBuilders.Users;
using TIAM.Entities.Permissions;
+using TIAM.Entities.Products;
using TIAM.Entities.Users;
namespace TIAM.Database.DbContexts.Users
@@ -51,7 +53,9 @@ namespace TIAM.Database.DbContexts.Users
base.OnModelCreating(modelBuilder);
new UserEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity());
- new UserProductMappingEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity());
+
+ modelBuilder.Entity().BuildProductToServiceProviderRelation();
+ //new UserProductMappingEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity());
}
}
}
diff --git a/TIAM.Database/DbSets/Users/IUserDbSet.cs b/TIAM.Database/DbSets/Users/IUserDbSet.cs
index 5be2259e..4374b6fc 100644
--- a/TIAM.Database/DbSets/Users/IUserDbSet.cs
+++ b/TIAM.Database/DbSets/Users/IUserDbSet.cs
@@ -1,8 +1,9 @@
using AyCode.Database.DbSets.Users;
+using TIAM.Entities.Profiles;
using TIAM.Entities.Users;
namespace TIAM.Database.DbSets.Users;
-public interface IUserDbSet : IAcUserDbSet
+public interface IUserDbSet : IAcUserDbSet
{
}
\ No newline at end of file
diff --git a/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs b/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs
index d0f43b42..fd903e6b 100644
--- a/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs
+++ b/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs
@@ -1,6 +1,8 @@
using System.Security.Cryptography.X509Certificates;
+using AyCode.Database.DbSets.Users;
using Microsoft.EntityFrameworkCore;
using TIAM.Entities.Users;
+using TIAM.Models.Dtos.Users;
namespace TIAM.Database.DbSets.Users;
@@ -13,16 +15,19 @@ public static class UserDbSetExtensions
.ThenInclude(x => x.Product)
: ctx.Users;
- //public static IQueryable UsersWithServiceProviderRelations(this IUserDbSet ctx, bool autoInclude = true)
- // => autoInclude
- // ? ctx.Users
- // .Include(x => x.UserProductMappings)
- // .ThenInclude(x => x.Product)
- // : ctx.Users;
-
public static User? GetUserById(this IUserDbSet ctx, Guid userId, bool autoInclude)
=> ctx.UsersWithProductRelations(autoInclude).FirstOrDefault(x => x.Id == userId);
public static User? GetUserByEmail(this IUserDbSet ctx, string email, bool autoInclude)
=> 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();
+
+ public static UserModelDto? GetUserModelDtoByEmail(this IUserDbSet ctx, string email)
+ => ctx.GetUsersByEmail(email).Select(x => new UserModelDto(x, x.Profile, x.UserProductMappings, x.Products)).FirstOrDefault();
+
+ public static IQueryable GetAllUsersModelDto(this IUserDbSet ctx)
+ => ctx.Users.Select(x => new UserModelDto(x, x.Profile, x.UserProductMappings, x.Products));
+
}
\ No newline at end of file
diff --git a/TIAM.Database/DbSets/Users/UserProductMappingDbSetExtensions.cs b/TIAM.Database/DbSets/Users/UserProductMappingDbSetExtensions.cs
index 66a16163..f92c6087 100644
--- a/TIAM.Database/DbSets/Users/UserProductMappingDbSetExtensions.cs
+++ b/TIAM.Database/DbSets/Users/UserProductMappingDbSetExtensions.cs
@@ -12,15 +12,15 @@ public static class UserProductMappingDbSetExtensions
: ctx.UserProductMappings;
- public static UserProductMapping? GetUserProductMappingById(this IUserProductMappingDbSet ctx, Guid userProductMappingId)
- => ctx.UserProductMappingsWithRelations().FirstOrDefault(x => x.Id == userProductMappingId);
+ public static UserProductMapping? GetUserProductMappingById(this IUserProductMappingDbSet ctx, Guid userProductMappingId, bool autoInclude = true)
+ => ctx.UserProductMappingsWithRelations(autoInclude).FirstOrDefault(x => x.Id == userProductMappingId);
- public static UserProductMapping? GetUserProductMapping(this IUserProductMappingDbSet ctx, Guid userId, Guid productId)
- => ctx.UserProductMappingsWithRelations().FirstOrDefault(x => x.UserId == userId && x.ProductId == productId);
+ public static UserProductMapping? GetUserProductMapping(this IUserProductMappingDbSet ctx, Guid userId, Guid productId, bool autoInclude = true)
+ => ctx.UserProductMappingsWithRelations(autoInclude).FirstOrDefault(x => x.UserId == userId && x.ProductId == productId);
- public static IQueryable GetUserProductMappingsByUserId(this IUserProductMappingDbSet ctx, Guid userId)
- => ctx.UserProductMappingsWithRelations().Where(x => x.UserId == userId);
+ public static IQueryable GetUserProductMappingsByUserId(this IUserProductMappingDbSet ctx, Guid userId, bool autoInclude = true)
+ => ctx.UserProductMappingsWithRelations(autoInclude).Where(x => x.UserId == userId);
- public static IQueryable GetUserProductMappingsByProductId(this IUserProductMappingDbSet ctx, Guid productId)
- => ctx.UserProductMappingsWithRelations().Where(x => x.ProductId == productId);
+ public static IQueryable GetUserProductMappingsByProductId(this IUserProductMappingDbSet ctx, Guid productId, bool autoInclude = true)
+ => ctx.UserProductMappingsWithRelations(autoInclude).Where(x => x.ProductId == productId);
}
\ No newline at end of file
diff --git a/TIAM.Database/ModelBuilders/Products/ProductEntityTypeBuilderExtensions.cs b/TIAM.Database/ModelBuilders/Products/ProductEntityTypeBuilderExtensions.cs
index 8d4658c8..69d37173 100644
--- a/TIAM.Database/ModelBuilders/Products/ProductEntityTypeBuilderExtensions.cs
+++ b/TIAM.Database/ModelBuilders/Products/ProductEntityTypeBuilderExtensions.cs
@@ -12,10 +12,16 @@ public static class ProductEntityTypeBuilderExtensions
public static void BuildProductToUserProductMappingRelation(this EntityTypeBuilder modelBuilder, bool autoInclude = true)
{
modelBuilder
- .HasMany(e => e.UserProductMappings)
- .WithOne(e => e.Product).HasForeignKey(x => x.ProductId);
+ .HasMany(e => e.Users)
+ .WithMany(e => e.Products)
+ .UsingEntity();
+
+ //modelBuilder
+ // .HasMany(e => e.UserProductMappings)
+ // .WithOne(e => e.Product).HasForeignKey(x => x.ProductId);
modelBuilder.Navigation(e => e.UserProductMappings).AutoInclude(autoInclude);
+ modelBuilder.Navigation(e => e.Users).AutoInclude(autoInclude);
}
public static void BuildProductToServiceProviderRelation(this EntityTypeBuilder modelBuilder, bool autoInclude = true)
diff --git a/TIAM.Database/ModelBuilders/Products/ProductEntityTypeConfigurations.cs b/TIAM.Database/ModelBuilders/Products/ProductEntityTypeConfigurations.cs
index 68d4b663..3a9b7a31 100644
--- a/TIAM.Database/ModelBuilders/Products/ProductEntityTypeConfigurations.cs
+++ b/TIAM.Database/ModelBuilders/Products/ProductEntityTypeConfigurations.cs
@@ -11,7 +11,7 @@ public class ProductEntityTypeDefaultConfiguration : IAcEntityTypeConfiguration<
{
public void Configure(EntityTypeBuilder builder)
{
- builder.BuildProductToUserProductMappingRelation();
+ //builder.BuildProductToUserProductMappingRelation();
builder.BuildProductToServiceProviderRelation();
}
}
\ No newline at end of file
diff --git a/TIAM.Database/ModelBuilders/Users/UserEntityTypeBuilderExtensions.cs b/TIAM.Database/ModelBuilders/Users/UserEntityTypeBuilderExtensions.cs
index eb595357..c6f0b9de 100644
--- a/TIAM.Database/ModelBuilders/Users/UserEntityTypeBuilderExtensions.cs
+++ b/TIAM.Database/ModelBuilders/Users/UserEntityTypeBuilderExtensions.cs
@@ -2,6 +2,7 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System.Numerics;
+using AyCode.Interfaces.Profiles;
using TIAM.Entities.Products;
using TIAM.Entities.Users;
@@ -13,17 +14,20 @@ public static class UserEntityTypeBuilderExtensions
public static void BuildUserToUserProductMappingRelation(this EntityTypeBuilder modelBuilder, bool autoInclude = true)
{
- //modelBuilder
- // .HasMany(e => e.Products)
- // .WithMany(e => e.Users)
- //.UsingEntity();
-
modelBuilder
- .HasMany(e => e.UserProductMappings)
- .WithOne(e => e.User).HasForeignKey(x => x.UserId);
- //.WithMany(e => e.User).
- //.UsingEntity.HasForeignKey(x => x.UserId);
+ .HasMany(e => e.Products)
+ .WithMany(e => e.Users)
+ .UsingEntity();
+ //l => l.HasOne().WithMany(x=>x.UserProductMappings).HasForeignKey(e => e.ProductId),
+ //r => r.HasOne().WithMany(x=>x.UserProductMappings).HasForeignKey(e => e.UserId));
+ //modelBuilder
+ // .HasMany(e => e.UserProductMappings)
+ // .WithOne(e => e.User).HasForeignKey(x => x.UserId);
+ // //.WithMany(e => e.User).
+ // //.UsingEntity.HasForeignKey(x => x.UserId);
+
+ modelBuilder.Navigation(e => e.Products).AutoInclude(autoInclude);
modelBuilder.Navigation(e => e.UserProductMappings).AutoInclude(autoInclude);
}
@@ -65,7 +69,7 @@ public static class UserEntityTypeBuilderExtensions
#endregion UserProductMapping
- public static void BuildUserToServiceProviderRelation(this EntityTypeBuilder modelBuilder) where TUser : class, IUserBase
+ public static void BuildUserToServiceProviderRelation(this EntityTypeBuilder modelBuilder) where TUser : class, IUserBase where TProfile : class, IAcProfileBase
{
}
diff --git a/TIAM.Database/ModelBuilders/Users/UserEntityTypeConfigurations.cs b/TIAM.Database/ModelBuilders/Users/UserEntityTypeConfigurations.cs
index 84f96d5c..d2b34ea1 100644
--- a/TIAM.Database/ModelBuilders/Users/UserEntityTypeConfigurations.cs
+++ b/TIAM.Database/ModelBuilders/Users/UserEntityTypeConfigurations.cs
@@ -2,6 +2,7 @@
using AyCode.Database.ModelBuilders.Users;
using AyCode.Interfaces.Users;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using TIAM.Entities.Profiles;
using TIAM.Entities.Users;
namespace TIAM.Database.ModelBuilders.Users;
@@ -21,6 +22,6 @@ public class UserEntityTypeDefaultConfiguration : IAcEntityTypeConfiguration
@code {
diff --git a/TIAMSharedUI/Pages/Components/InputWizard.razor.cs b/TIAMSharedUI/Pages/Components/InputWizard.razor.cs
index a7443c4c..8646c63b 100644
--- a/TIAMSharedUI/Pages/Components/InputWizard.razor.cs
+++ b/TIAMSharedUI/Pages/Components/InputWizard.razor.cs
@@ -16,7 +16,7 @@ namespace TIAMSharedUI.Pages.Components
public partial class InputWizard : ComponentBase
{
[Inject]
- LogToBrowserConsole logToBrowserConsole { get; set; }
+ public required LogToBrowserConsole LogToBrowserConsole { get; set; }
public Dictionary FormSteps { get; set; } = new Dictionary();
public int CurrentStep { get; set; } = 0;
@@ -28,37 +28,37 @@ namespace TIAMSharedUI.Pages.Components
public object Data { get; set; } = new object();
[Parameter]
- public EventCallback