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(); } } diff --git a/TIAM.Database/TIAM.Database.csproj b/TIAM.Database/TIAM.Database.csproj index 3bac11a1..450f166d 100644 --- a/TIAM.Database/TIAM.Database.csproj +++ b/TIAM.Database/TIAM.Database.csproj @@ -23,6 +23,7 @@ + diff --git a/TIAM.Entities/Products/Product.cs b/TIAM.Entities/Products/Product.cs index 8aaa178f..fc8a01aa 100644 --- a/TIAM.Entities/Products/Product.cs +++ b/TIAM.Entities/Products/Product.cs @@ -14,12 +14,14 @@ public class Product : ProductBase public Guid ServiceProviderId { get; set; } public virtual TiamServiceProvider ServiceProvider { get; set; } + + public virtual List Users { get; } = new(); public virtual List UserProductMappings { get; } = new(); public Product(){} - public Product(Guid ownerId, ProductType productType, Guid userMediaId, string name, string description, float price, string jsonDetails) : this(Guid.NewGuid(), ownerId, productType, userMediaId, name, description, price, jsonDetails) { } - public Product(Guid id, Guid serviceProviderId, ProductType productType, Guid userMediaId, string name, string description, float price, string jsonDetails) : base(id, productType, userMediaId, name, description, price, jsonDetails) + public Product(Guid ownerId, ProductType productType, string name, string description, float price, string jsonDetails) : this(Guid.NewGuid(), ownerId, productType, name, description, price, jsonDetails) { } + public Product(Guid id, Guid serviceProviderId, ProductType productType, string name, string description, float price, string jsonDetails) : base(id, productType, name, description, price, jsonDetails) { ServiceProviderId = serviceProviderId; } diff --git a/TIAM.Entities/Products/ProductBase.cs b/TIAM.Entities/Products/ProductBase.cs index 3457dcc0..3ff25513 100644 --- a/TIAM.Entities/Products/ProductBase.cs +++ b/TIAM.Entities/Products/ProductBase.cs @@ -13,7 +13,7 @@ public abstract class ProductBase : IEntityGuid, ITimeStampInfo public Guid Id { get; set; } public ProductType ProductType { get; set; } - public Guid? UserMediaId { get; set; } + //public Guid? UserMediaId { get; set; } public string Name { get; set; } public string Description { get; set; } @@ -25,11 +25,11 @@ public abstract class ProductBase : IEntityGuid, ITimeStampInfo protected ProductBase(){} - protected ProductBase(Guid id, ProductType type, Guid userMediaId, string name, string description, float price, string jsonDetails) + protected ProductBase(Guid id, ProductType type, string name, string description, float price, string jsonDetails) { Id = id; ProductType = type; - UserMediaId = userMediaId; + //UserMediaId = userMediaId; Name = name; Description = description; Price = price; diff --git a/TIAM.Entities/Profiles/IProfile.cs b/TIAM.Entities/Profiles/IProfile.cs new file mode 100644 index 00000000..5645ed37 --- /dev/null +++ b/TIAM.Entities/Profiles/IProfile.cs @@ -0,0 +1,8 @@ +using AyCode.Interfaces.Profiles; + +namespace TIAM.Entities.Profiles; + +public interface IProfile : IAcProfileBase, IProfileDto +{ + +} \ No newline at end of file diff --git a/TIAM.Entities/Profiles/IProfileDto.cs b/TIAM.Entities/Profiles/IProfileDto.cs new file mode 100644 index 00000000..4e611827 --- /dev/null +++ b/TIAM.Entities/Profiles/IProfileDto.cs @@ -0,0 +1,8 @@ +using AyCode.Interfaces.Profiles.Dtos; + +namespace TIAM.Entities.Profiles; + +public interface IProfileDto : IAcProfileDtoBase +{ + +} \ No newline at end of file diff --git a/TIAM.Entities/Profiles/Profile.cs b/TIAM.Entities/Profiles/Profile.cs new file mode 100644 index 00000000..b21628e6 --- /dev/null +++ b/TIAM.Entities/Profiles/Profile.cs @@ -0,0 +1,8 @@ +using AyCode.Entities.Profiles; + +namespace TIAM.Entities.Profiles; + +public class Profile : AcProfileBase, IProfile +{ + +} \ No newline at end of file diff --git a/TIAM.Entities/Users/IUser.cs b/TIAM.Entities/Users/IUser.cs new file mode 100644 index 00000000..cff97c84 --- /dev/null +++ b/TIAM.Entities/Users/IUser.cs @@ -0,0 +1,13 @@ +using AyCode.Interfaces.Users; +using TIAM.Entities.Products; +using TIAM.Entities.Profiles; + +namespace TIAM.Entities.Users; + +public interface IUser : IUserBase, IUserDto +{ + public List Products { get; } + + //public ServiceProvider ServiceProvider { get; set; } + public List UserProductMappings { get; } +} diff --git a/TIAM.Entities/Users/IUserDto.cs b/TIAM.Entities/Users/IUserDto.cs new file mode 100644 index 00000000..98bce817 --- /dev/null +++ b/TIAM.Entities/Users/IUserDto.cs @@ -0,0 +1,9 @@ +using AyCode.Interfaces.Users; +using AyCode.Interfaces.Users.Dtos; +using TIAM.Entities.Products; +using TIAM.Entities.Profiles; + +namespace TIAM.Entities.Users; + +public interface IUserDto : IAcUserDtoBase +{ } \ No newline at end of file diff --git a/TIAM.Entities/Users/User.cs b/TIAM.Entities/Users/User.cs index cee29d06..9262674d 100644 --- a/TIAM.Entities/Users/User.cs +++ b/TIAM.Entities/Users/User.cs @@ -6,15 +6,16 @@ using System.Text; using System.Threading.Tasks; using AyCode.Entities.Users; using TIAM.Entities.Products; +using TIAM.Entities.Profiles; namespace TIAM.Entities.Users { - public class User : UserBase + public class User : UserBase, IUser { - //public virtual List Products { get; } = new(); + public virtual List Products { get; } = new(); //public virtual ServiceProvider ServiceProvider { get; set; } = new(); - public virtual List UserProductMappings { get; set; } = new(); + public virtual List UserProductMappings { get; } = new(); public User() { } public User(string email, string password) : this(Guid.NewGuid(), email, password) { } diff --git a/TIAM.Entities/Products/DTOs/AssignedPermissionModel.cs b/TIAM.Models/Dtos/Products/AssignedPermissionModel.cs similarity index 100% rename from TIAM.Entities/Products/DTOs/AssignedPermissionModel.cs rename to TIAM.Models/Dtos/Products/AssignedPermissionModel.cs diff --git a/TIAM.Models/Dtos/Profiles/ProfileDto.cs b/TIAM.Models/Dtos/Profiles/ProfileDto.cs new file mode 100644 index 00000000..7ece3932 --- /dev/null +++ b/TIAM.Models/Dtos/Profiles/ProfileDto.cs @@ -0,0 +1,13 @@ +using TIAM.Entities.Profiles; + +namespace TIAM.Models.Dtos.Profiles; + +public class ProfileDto : IProfileDto +{ + public Guid Id { get; set; } + public Guid OwnerId { get; set; } + public Guid? UserMediaId { get; set; } + + public string? Name { get; set; } + public string? ThumbnailUrl { get; set; } +} \ No newline at end of file diff --git a/TIAM.Models/Dtos/Users/UserDto.cs b/TIAM.Models/Dtos/Users/UserDto.cs new file mode 100644 index 00000000..1dd5169e --- /dev/null +++ b/TIAM.Models/Dtos/Users/UserDto.cs @@ -0,0 +1,9 @@ +using AyCode.Interfaces.Users.Dtos; +using TIAM.Entities.Users; + +namespace TIAM.Models.Dtos.Users; + +public class UserDto : IUserDto +{ + public Guid Id { get; set; } +} \ No newline at end of file diff --git a/TIAM.Models/Dtos/Users/UserModelDto.cs b/TIAM.Models/Dtos/Users/UserModelDto.cs new file mode 100644 index 00000000..af14d99c --- /dev/null +++ b/TIAM.Models/Dtos/Users/UserModelDto.cs @@ -0,0 +1,29 @@ +using AyCode.Entities.Profiles; +using AyCode.Interfaces.Users.Dtos; +using AyCode.Models.Users; +using TIAM.Entities.Products; +using TIAM.Entities.Profiles; +using TIAM.Entities.Users; +using TIAM.Models.Dtos.Profiles; + +namespace TIAM.Models.Dtos.Users; + +public class UserModelDto : AcUserModelDtoBase +{ + public List UserProductMappings = new(); + public List Products = new(); + + public UserModelDto(){} + public UserModelDto(User user, Profile profile, List userProductMappings, List products) : base(user, profile) + { + foreach (var product in products) + { + Products.Add(new Product(product.Id, product.ServiceProviderId, product.ProductType, product.Name, product.Description, product.Price, product.JsonDetails)); + } + + foreach (var userProduct in userProductMappings) + { + UserProductMappings.Add(new UserProductMapping(userProduct.Id, userProduct.UserId, userProduct.ProductId)); + } + } +} \ No newline at end of file diff --git a/TIAM.Models/TIAM.Models.csproj b/TIAM.Models/TIAM.Models.csproj new file mode 100644 index 00000000..5c91222d --- /dev/null +++ b/TIAM.Models/TIAM.Models.csproj @@ -0,0 +1,35 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + + + + + + ..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Core.dll + + + ..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Entities.dll + + + ..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Interfaces.dll + + + ..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Models.dll + + + + diff --git a/TIAMMobileApp/Services/UserDataServiceMobile.cs b/TIAMMobileApp/Services/UserDataServiceMobile.cs index 0ea8f405..9fd69ed4 100644 --- a/TIAMMobileApp/Services/UserDataServiceMobile.cs +++ b/TIAMMobileApp/Services/UserDataServiceMobile.cs @@ -3,6 +3,7 @@ using System.Text; using AyCode.Interfaces.StorageHandlers; using Newtonsoft.Json; using TIAM.Entities.Users; +using TIAM.Models.Dtos.Users; using TIAMWebApp.Shared.Application.Interfaces; using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models.ClientSide; @@ -49,7 +50,7 @@ namespace TIAMMobileApp.Services { var hasProperties = await _serviceProviderDataService.GetPropertiesByOwnerIdAsync(dbUser.Id); - var user = new UserSessionModel(dbUser.Id, UserType.User, dbUser.EmailAddress, hasProperties, 1); + var user = new UserSessionModel(dbUser.Id, UserType.User, dbUser.Profile?.Name, hasProperties, 1); return user; } @@ -117,14 +118,14 @@ namespace TIAMMobileApp.Services return (isSuccess, result); } - public async Task?> GetUsersAsync() + public async Task?> GetUsersAsync() { - return await http.GetFromJsonAsync>(APIUrls.GetUsers); + return await http.GetFromJsonAsync>(APIUrls.GetUsers); } - public async Task GetUserByEmailAsync(string email) + public async Task GetUserByEmailAsync(string email) { - return await http.GetFromJsonAsync(APIUrls.GetUserByEmail); + return await http.GetFromJsonAsync(APIUrls.GetUserByEmail); } public async Task GetUserByIdAsync(Guid Id) { diff --git a/TIAMSharedUI/Pages/AppLaunch.razor b/TIAMSharedUI/Pages/AppLaunch.razor index edddb85c..412c987e 100644 --- a/TIAMSharedUI/Pages/AppLaunch.razor +++ b/TIAMSharedUI/Pages/AppLaunch.razor @@ -85,7 +85,7 @@ Loading.... string _email = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.Email).Value; var user = await UserDataService.IsLoggedInAsync(Guid.Parse(_userId)); sessionService.User = user; - logToBrowserConsole.LogToBC($"Saved user in db is: {user.Email}, setting autenthicated state"); + logToBrowserConsole.LogToBC($"Saved user in db is: {user.DisplayName}, setting autenthicated state"); sessionService.IsAuthenticated = true; NavManager.NavigateTo("/index"); } diff --git a/TIAMSharedUI/Pages/Components/AuctionStep1.razor b/TIAMSharedUI/Pages/Components/AuctionStep1.razor index 09807b1b..cd8fb15e 100644 --- a/TIAMSharedUI/Pages/Components/AuctionStep1.razor +++ b/TIAMSharedUI/Pages/Components/AuctionStep1.razor @@ -66,7 +66,7 @@ protected override async Task OnInitializedAsync() { - Email = sessionService.User.Email; + Email = sessionService.User.DisplayName; await base.OnInitializedAsync(); } diff --git a/TIAMSharedUI/Pages/Components/InputWizard.razor b/TIAMSharedUI/Pages/Components/InputWizard.razor index 3a4b9408..0eac3f89 100644 --- a/TIAMSharedUI/Pages/Components/InputWizard.razor +++ b/TIAMSharedUI/Pages/Components/InputWizard.razor @@ -25,7 +25,7 @@

@Localizer.GetString("DestinationName")

- @FormSubmitResult + @_formSubmitResult

@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 onSubmit { get; set; } + public EventCallback OnSubmit { get; set; } - string PhoneMask { get; set; } = "(999)000-0000"; - string FormSubmitResult = ""; - private string spinnerClass = ""; + string _phoneMask = "(999)000-0000"; + string _formSubmitResult = ""; + private string _spinnerClass = ""; async Task HandleValidSubmit() { - spinnerClass = "spinner-border spinner-border-sm"; + _spinnerClass = "spinner-border spinner-border-sm"; await Task.Delay(500); - FormSubmitResult = "You have been registred successully."; - spinnerClass = ""; + _formSubmitResult = "You have been registred successully."; + _spinnerClass = ""; - await onSubmit.InvokeAsync(Data); + await OnSubmit.InvokeAsync(Data); } void HandleInvalidSubmit() { - FormSubmitResult = "Please correct all errors"; + _formSubmitResult = "Please correct all errors"; } public void OnNext(MouseEventArgs args) { - logToBrowserConsole.LogToBC("OnNext called"); + LogToBrowserConsole.LogToBC("OnNext called"); CurrentStep++; } public void OnPrevious(MouseEventArgs args) { - logToBrowserConsole.LogToBC("OnPrev called"); + LogToBrowserConsole.LogToBC("OnPrev called"); CurrentStep--; } @@ -66,7 +66,7 @@ namespace TIAMSharedUI.Pages.Components { var _type = Data.GetType(); - logToBrowserConsole.LogToBC("Hellooooo " + _type.AssemblyQualifiedName); + LogToBrowserConsole.LogToBC("Hellooooo " + _type.AssemblyQualifiedName); var propertyList = _type.GetProperties(); //var propertyList = typeof(TestUserData).GetProperties(); @@ -100,7 +100,7 @@ namespace TIAMSharedUI.Pages.Components var access = Expression.Property(Expression.Constant(Data), property.Name); var lambda = Expression.Lambda(typeof(Func<>).MakeGenericType(property.PropertyType), access); - logToBrowserConsole.LogToBC(lambda.ToString()); + LogToBrowserConsole.LogToBC(lambda.ToString()); layoutItemBuilder.OpenElement(i++, "div");//open div layoutItemBuilder.AddAttribute(i++, "id", _stepID.ToString()); @@ -116,7 +116,7 @@ namespace TIAMSharedUI.Pages.Components layoutItemBuilder.AddAttribute(i++, "ColSpanMd", 12); //layoutItemBuilder.AddAttribute(i++, "CssClass", "form-field"); - layoutItemBuilder.AddAttribute(i++, "Template", (RenderFragment)((context) => ((editor) => + layoutItemBuilder.AddAttribute(i++, "Template", (RenderFragment)((context) => ((editor) => { var j = 0; switch (attrList.DataType) @@ -125,11 +125,11 @@ namespace TIAMSharedUI.Pages.Components case DataType.Text: { editor.OpenComponent(j++); - logToBrowserConsole.LogToBC($"{property.Name}, {property.PropertyType}"); + LogToBrowserConsole.LogToBC($"{property.Name}, {property.PropertyType}"); editor.AddAttribute(j++, "Text", property.GetValue(Data)); editor.AddAttribute(j++, "TextExpression", lambda); editor.AddAttribute(j++, "CssClass", "form-field"); - editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); + editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); editor.CloseComponent(); break; } @@ -141,17 +141,17 @@ namespace TIAMSharedUI.Pages.Components editor.AddAttribute(j++, "NullText", "Password"); editor.AddAttribute(j++, "Text", property.GetValue(Data)); editor.AddAttribute(j++, "TextExpression", lambda); - editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); + editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); editor.CloseComponent(); break; } case DataType.PhoneNumber: { - editor.OpenComponent>(j++); + editor.OpenComponent>(j++); editor.AddAttribute(j++, "Value", property.GetValue(Data)); - editor.AddAttribute(j++, "Mask", PhoneMask); + editor.AddAttribute(j++, "Mask", _phoneMask); editor.AddAttribute(j++, "ValueExpression", lambda); - editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); + editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); editor.CloseComponent(); break; } @@ -160,7 +160,7 @@ namespace TIAMSharedUI.Pages.Components editor.OpenComponent>(j); editor.AddAttribute(j++, "Date", property.GetValue(Data)); editor.AddAttribute(j++, "DateExpression", lambda); - editor.AddAttribute(j++, "DateChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); + editor.AddAttribute(j++, "DateChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); editor.CloseComponent(); break; @@ -177,7 +177,7 @@ namespace TIAMSharedUI.Pages.Components editor.AddAttribute(j++, "Mask", "n6"); editor.AddAttribute(j++, "ValueExpression", lambda); editor.AddAttribute(j++, "CssClass", "form-field"); - editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); + editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); editor.CloseComponent(); break; } @@ -191,18 +191,18 @@ namespace TIAMSharedUI.Pages.Components editor.AddAttribute(j++, "Mask", "n0"); editor.AddAttribute(j++, "ValueExpression", lambda); editor.AddAttribute(j++, "CssClass", "form-field"); - editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); + editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); editor.CloseComponent(); break; } else if (property.PropertyType == typeof(string) && property.Name == "Occupation") { - editor.OpenComponent>(j); + editor.OpenComponent>(j); editor.AddAttribute(j++, "Data", AdditionalData.Occupations); editor.AddAttribute(j++, "Value", property.GetValue(Data)); editor.AddAttribute(j++, "ValueExpression", lambda); - editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); + editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); editor.CloseComponent(); break; } @@ -220,7 +220,7 @@ namespace TIAMSharedUI.Pages.Components editor.AddAttribute(j++, "Text", property.GetValue(Data)); editor.AddAttribute(j++, "TextExpression", lambda); editor.AddAttribute(j++, "CssClass", "form-field"); - editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); + editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create(this, str => { property.SetValue(Data, str); })); editor.CloseComponent(); break; @@ -260,14 +260,14 @@ namespace TIAMSharedUI.Pages.Components layoutItemBuilder.CloseElement(); - logToBrowserConsole.LogToBC($"loop {j}, {propertyList.Length}"); + LogToBrowserConsole.LogToBC($"loop {j}, {propertyList.Length}"); j++; } layoutItemBuilder.OpenComponent(i++); - layoutItemBuilder.AddAttribute(i++, "Template", (RenderFragment)((context) => ((editor) => + layoutItemBuilder.AddAttribute(i++, "Template", (RenderFragment)((context) => ((editor) => { - logToBrowserConsole.LogToBC($"Submit button {CurrentStep}, {propertyList.Length}"); + LogToBrowserConsole.LogToBC($"Submit button {CurrentStep}, {propertyList.Length}"); editor.OpenComponent(i++); editor.AddAttribute(i++, "SubmitFormOnClick", true); editor.AddAttribute(i++, "Text", "Submit"); @@ -281,7 +281,7 @@ namespace TIAMSharedUI.Pages.Components editor.AddAttribute(i++, "Visible", false); } editor.OpenElement(i++, "span"); - editor.AddAttribute(i++, "class", spinnerClass); + editor.AddAttribute(i++, "class", _spinnerClass); editor.CloseElement(); editor.CloseComponent(); }))); diff --git a/TIAMSharedUI/Pages/Components/TransferStep1.razor b/TIAMSharedUI/Pages/Components/TransferStep1.razor index 09807b1b..cd8fb15e 100644 --- a/TIAMSharedUI/Pages/Components/TransferStep1.razor +++ b/TIAMSharedUI/Pages/Components/TransferStep1.razor @@ -66,7 +66,7 @@ protected override async Task OnInitializedAsync() { - Email = sessionService.User.Email; + Email = sessionService.User.DisplayName; await base.OnInitializedAsync(); } diff --git a/TIAMSharedUI/Pages/DbTestComponent.razor b/TIAMSharedUI/Pages/DbTestComponent.razor index 9ea6bff6..94cca67d 100644 --- a/TIAMSharedUI/Pages/DbTestComponent.razor +++ b/TIAMSharedUI/Pages/DbTestComponent.razor @@ -1,4 +1,5 @@ -@if (Users == null) +@using AyCode.Utils.Extensions +@if (Users == null) {

Loading ... @@ -11,7 +12,9 @@ else @foreach (var dest in Users) { -

@dest.EmailAddress

+

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

} diff --git a/TIAMSharedUI/Pages/DbTestComponent.razor.cs b/TIAMSharedUI/Pages/DbTestComponent.razor.cs index f1180454..feb8d243 100644 --- a/TIAMSharedUI/Pages/DbTestComponent.razor.cs +++ b/TIAMSharedUI/Pages/DbTestComponent.razor.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using TIAM.Entities.Users; +using TIAM.Models.Dtos.Users; using TIAMWebApp.Shared.Application.Interfaces; using TIAMWebApp.Shared.Application.Models; @@ -19,7 +20,7 @@ namespace TIAMSharedUI.Pages get; set; } - public List? Users + public required List Users { get; set; diff --git a/TIAMSharedUI/Pages/TestPage.razor b/TIAMSharedUI/Pages/TestPage.razor index 63b065b3..2000b03b 100644 --- a/TIAMSharedUI/Pages/TestPage.razor +++ b/TIAMSharedUI/Pages/TestPage.razor @@ -10,7 +10,7 @@
- + @code { diff --git a/TIAMSharedUI/TIAMSharedUI.csproj b/TIAMSharedUI/TIAMSharedUI.csproj index 169c629b..7373f118 100644 --- a/TIAMSharedUI/TIAMSharedUI.csproj +++ b/TIAMSharedUI/TIAMSharedUI.csproj @@ -20,6 +20,8 @@ + + @@ -34,6 +36,15 @@ ..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Interfaces.dll + + ..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Models.dll + + + ..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Services.dll + + + ..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Utils.dll + diff --git a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs index 6172f38d..0738fc56 100644 --- a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs +++ b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs @@ -12,6 +12,7 @@ using TIAMWebApp.Shared.Application.Models.PageModels; using TIAMWebApp.Shared.Application.Utility; using AyCode.Interfaces.StorageHandlers; using AyCode.Core.Logger; +using TIAM.Models.Dtos.Users; namespace TIAMWebApp.Client.Services @@ -37,26 +38,26 @@ namespace TIAMWebApp.Client.Services public async Task IsLoggedInAsync(Guid id) { - UserSessionModel User = null; + UserSessionModel user = null; //api call to get user - var dbUser = await GetUserByIdAsync(id); + var userModelDto = await GetUserByIdAsync(id); - if (dbUser != null) + if (userModelDto != null) { - var a = dbUser.UserProductMappings.FirstOrDefault().Product; + var a = userModelDto.UserProductMappings.FirstOrDefault()?.Product; if (a != null) logToBrowserConsole.LogToBC($"{a.Name}"); //get user's properties - var hasProperties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(dbUser.Id); + var hasProperties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id); if (hasProperties != null) logToBrowserConsole.LogToBC($"{hasProperties.Count} properties found"); //create user session model - User = new UserSessionModel(dbUser.Id, UserType.User, dbUser.EmailAddress, hasProperties, 1); - return User; + user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto.Profile?.Name, hasProperties, 1); + return user; } else { @@ -130,24 +131,24 @@ namespace TIAMWebApp.Client.Services return (isSuccess, result); } - public async Task?> GetUsersAsync() + public async Task?> GetUsersAsync() { - return await http.GetFromJsonAsync>(APIUrls.GetUsers); + return await http.GetFromJsonAsync>(APIUrls.GetUsers); } - public async Task GetUserByEmailAsync(string email) + public async Task GetUserByEmailAsync(string email) { var url = $"{Setting.BaseUrl}/{APIUrls.GetUserByEmail}"; - return await http.GetFromJsonAsync(url); + return await http.GetFromJsonAsync(url); } - public async Task GetUserByIdAsync(Guid Id) + public async Task GetUserByIdAsync(Guid id) { var url = $"{Setting.BaseUrl}/{APIUrls.GetUserById}"; - logToBrowserConsole.LogToBC("GetUserByIdAsync url: " + url + ", " + Id.ToString()); - var response = await http.PostAsJsonAsync(url, Id); + logToBrowserConsole.LogToBC("GetUserByIdAsync url: " + url + ", " + id.ToString()); + var response = await http.PostAsJsonAsync(url, id); var result = await response.Content.ReadAsStringAsync(); - var user = JsonConvert.DeserializeObject(result); + var user = JsonConvert.DeserializeObject(result); return user; } diff --git a/TIAMWebApp/Server/Controllers/UserAPIController.cs b/TIAMWebApp/Server/Controllers/UserAPIController.cs index 4bf168a0..d5f764d4 100644 --- a/TIAMWebApp/Server/Controllers/UserAPIController.cs +++ b/TIAMWebApp/Server/Controllers/UserAPIController.cs @@ -20,6 +20,7 @@ using Microsoft.EntityFrameworkCore; using TIAM.Database.DataLayers.Users; using AyCode.Utils.Helpers; using TIAM.Entities.Users; +using TIAM.Models.Dtos.Users; using TIAMWebApp.Server.ModelsTIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Utility; @@ -322,34 +323,33 @@ namespace TIAMWebApp.Server.Controllers [AllowAnonymous] [HttpGet] [Route("GetUsers")] - public Task> GetUsers() + public Task> GetUsers() { //var users = await _userDal.Ctx.Users.ToListAsync();//.GetUsersAsync(); //return users; - return _userDal.GetUsersAsync(); + return _userDal.GetAllUsersModelDtoAsync(); } [AllowAnonymous] [HttpGet] [Route("GetUserByEmail")] - public async Task GetUserByEmail(string email) + public Task GetUserByEmail(string email) { - return await _userDal.GetUserByEmailAsync(email); + return _userDal.GetUserModelDtoByEmailAsync(email); } [AllowAnonymous] [HttpPost] [Route("GetUserById")] - public User? GetUserById([FromBody] Guid id) + public Task GetUserById([FromBody] Guid id) { Logger.Info($"GetUserById called with id: {id}"); - var result = _userDal.GetUserById(id); - var b = result.UserProductMappings.FirstOrDefault(x => x.Id != null); + var result = _userDal.GetUserModelDtoByIdAsync(id); - var a = JsonSerializer.Serialize(result); + //var b = result.UserProductMappings.FirstOrDefault(x => x.Id != null); + //var a = JsonSerializer.Serialize(result); + //Console.WriteLine($"GetUserById result: {a}"); - - Console.WriteLine($"GetUserById result: {a}"); return result; } diff --git a/TIAMWebApp/Server/Controllers/UserPermissionAPIController.cs b/TIAMWebApp/Server/Controllers/UserPermissionAPIController.cs index cb01ec82..3d265488 100644 --- a/TIAMWebApp/Server/Controllers/UserPermissionAPIController.cs +++ b/TIAMWebApp/Server/Controllers/UserPermissionAPIController.cs @@ -6,7 +6,6 @@ using TIAM.Database.DataLayers.ServiceProviders; using TIAM.Database.DataLayers.Users; using TIAM.Entities.Permissions; using TIAM.Entities.Products; -using TIAM.Entities.Products.DTOs; using TIAM.Entities.ServiceProviders; using TIAM.Entities.Users; using TIAMWebApp.Shared.Application.Models; diff --git a/TIAMWebApp/Shared/Interfaces/IUserDataService.cs b/TIAMWebApp/Shared/Interfaces/IUserDataService.cs index 21dea5ef..d756105c 100644 --- a/TIAMWebApp/Shared/Interfaces/IUserDataService.cs +++ b/TIAMWebApp/Shared/Interfaces/IUserDataService.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using TIAM.Entities.Users; +using TIAM.Models.Dtos.Users; using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models.PageModels; @@ -21,8 +22,8 @@ namespace TIAMWebApp.Shared.Application.Interfaces //public Task> GetUserRolesAsync(UserModel userModel); - public Task?> GetUsersAsync(); - public Task GetUserByEmailAsync(string email); + public Task?> GetUsersAsync(); + public Task GetUserByEmailAsync(string email); Task RefreshToken(); } } \ No newline at end of file diff --git a/TIAMWebApp/Shared/Models/UserSessionModel.cs b/TIAMWebApp/Shared/Models/UserSessionModel.cs index 528560e2..88f384ff 100644 --- a/TIAMWebApp/Shared/Models/UserSessionModel.cs +++ b/TIAMWebApp/Shared/Models/UserSessionModel.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Microsoft.IdentityModel.Tokens; using TIAM.Entities.Users; namespace TIAMWebApp.Shared.Application.Models @@ -7,17 +8,18 @@ namespace TIAMWebApp.Shared.Application.Models { public Guid UserId { get; set; } public UserType UserType { get; set; } - public string Email { get; set; } + public string? UserName { get; set; } + public string DisplayName => string.IsNullOrWhiteSpace(UserName) ? UserId.ToString() : UserName; public Dictionary? HasProperties { get; set; } public int UserRoles { get; set; } public Dictionary UserRolesDictionary { get; set; } - public UserSessionModel(Guid userId, UserType userType, string email, Dictionary? hasProperties, int userRoles) + public UserSessionModel(Guid userId, UserType userType, string? userName, Dictionary? hasProperties, int userRoles) { UserId = userId; UserType = userType; - Email = email; + UserName = userName; HasProperties = hasProperties; //UserRoles = userRoles; //UserRolesDictionary = new Dictionary(); diff --git a/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj b/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj index e6e04458..854b012c 100644 --- a/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj +++ b/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj @@ -26,6 +26,7 @@ + diff --git a/TourIAmProject.sln b/TourIAmProject.sln index 10850931..60c3d550 100644 --- a/TourIAmProject.sln +++ b/TourIAmProject.sln @@ -33,7 +33,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AyCode.Blazor.Models", "..\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AyCode.Blazor.Models.Server", "..\Aycode.Blazor\AyCode.Blazor.Models.Server\AyCode.Blazor.Models.Server.csproj", "{A36322E8-F485-455E-84AA-B911948B6702}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TIAM.Resources", "TIAMResources\TIAM.Resources.csproj", "{2A300982-AA2E-4E62-97F2-6EF4C97939B2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TIAM.Models", "TIAM.Models\TIAM.Models.csproj", "{6037FF79-88D2-457C-BA3A-9AC978873741}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TIAM.Resources", "TIAMResources\TIAM.Resources.csproj", "{2A300982-AA2E-4E62-97F2-6EF4C97939B2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -103,6 +105,10 @@ Global {A36322E8-F485-455E-84AA-B911948B6702}.Debug|Any CPU.Build.0 = Debug|Any CPU {A36322E8-F485-455E-84AA-B911948B6702}.Release|Any CPU.ActiveCfg = Release|Any CPU {A36322E8-F485-455E-84AA-B911948B6702}.Release|Any CPU.Build.0 = Release|Any CPU + {6037FF79-88D2-457C-BA3A-9AC978873741}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6037FF79-88D2-457C-BA3A-9AC978873741}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6037FF79-88D2-457C-BA3A-9AC978873741}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6037FF79-88D2-457C-BA3A-9AC978873741}.Release|Any CPU.Build.0 = Release|Any CPU {2A300982-AA2E-4E62-97F2-6EF4C97939B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2A300982-AA2E-4E62-97F2-6EF4C97939B2}.Debug|Any CPU.Build.0 = Debug|Any CPU {2A300982-AA2E-4E62-97F2-6EF4C97939B2}.Release|Any CPU.ActiveCfg = Release|Any CPU