From 34098e207b03863865dcb55949afc8fba00c5503 Mon Sep 17 00:00:00 2001 From: "jozsef.b@aycode.com" <9Rj@D}fVwBaN> Date: Mon, 18 Dec 2023 23:08:11 +0100 Subject: [PATCH] Implement UserModels; Add Profile; improvements, fixes, etc... --- TIAM.Database.Test/ServiceProviderDalTest.cs | 27 +++++++++++++- TIAM.Database.Test/UserDalTests.cs | 24 ++++++++----- .../ServiceProviders/ServiceProviderDal.cs | 12 ++++--- .../ServiceProviderDalExtension.cs | 2 +- TIAM.Database/DataLayers/Users/UserDal.cs | 16 ++++----- TIAM.Database/DbContexts/DbContextBase.cs | 2 +- .../DbContexts/Users/IUserDbContext.cs | 3 +- .../DbContexts/Users/UserDbContext.cs | 6 +++- TIAM.Database/DbSets/Users/IUserDbSet.cs | 3 +- .../DbSets/Users/UserDbSetExtensions.cs | 15 ++++---- .../UserProductMappingDbSetExtensions.cs | 16 ++++----- .../ProductEntityTypeBuilderExtensions.cs | 10 ++++-- .../ProductEntityTypeConfigurations.cs | 2 +- .../Users/UserEntityTypeBuilderExtensions.cs | 24 +++++++------ .../Users/UserEntityTypeConfigurations.cs | 3 +- TIAM.Database/TIAM.Database.csproj | 1 + TIAM.Entities/Products/Product.cs | 6 ++-- TIAM.Entities/Products/ProductBase.cs | 6 ++-- TIAM.Entities/Profiles/IProfile.cs | 8 +++++ TIAM.Entities/Profiles/IProfileDto.cs | 8 +++++ TIAM.Entities/Profiles/Profile.cs | 8 +++++ TIAM.Entities/Users/IUser.cs | 13 +++++++ TIAM.Entities/Users/IUserDto.cs | 9 +++++ TIAM.Entities/Users/User.cs | 7 ++-- .../Dtos/Products}/AssignedPermissionModel.cs | 0 TIAM.Models/Dtos/Profiles/ProfileDto.cs | 13 +++++++ TIAM.Models/Dtos/Users/UserDto.cs | 9 +++++ TIAM.Models/Dtos/Users/UserModelDto.cs | 29 +++++++++++++++ TIAM.Models/TIAM.Models.csproj | 35 +++++++++++++++++++ .../UserPermissionAPIController.cs | 1 - .../TIAMWebApp.Shared.Application.csproj | 1 + TourIAmProject.sln | 6 ++++ 32 files changed, 259 insertions(+), 66 deletions(-) create mode 100644 TIAM.Entities/Profiles/IProfile.cs create mode 100644 TIAM.Entities/Profiles/IProfileDto.cs create mode 100644 TIAM.Entities/Profiles/Profile.cs create mode 100644 TIAM.Entities/Users/IUser.cs create mode 100644 TIAM.Entities/Users/IUserDto.cs rename {TIAM.Entities/Products/DTOs => TIAM.Models/Dtos/Products}/AssignedPermissionModel.cs (100%) create mode 100644 TIAM.Models/Dtos/Profiles/ProfileDto.cs create mode 100644 TIAM.Models/Dtos/Users/UserDto.cs create mode 100644 TIAM.Models/Dtos/Users/UserModelDto.cs create mode 100644 TIAM.Models/TIAM.Models.csproj 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..a35e0586 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,26 @@ namespace TIAM.Database.Test [TestMethod] [DataRow("540271F6-C604-4C16-8160-D5A7CAFEDF00")] - public void SerializeUser_ReturnDeserializedUser_WhenUserAndRelationsExists(string userIdString) + public void 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 = Dal.GetUserModelDtoById(userId); - 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.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 36065d93..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,10 +32,13 @@ namespace TIAM.Database.DataLayers.ServiceProviders { } - public User? GetUserById(Guid userId, bool autoInclude = true) => Session(x => x.GetUserById(userId, autoInclude)); - public User? GetUserByEmail(string email, bool autoInclude = true) => Session(x => x.GetUserByEmail(email, autoInclude)); + 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..d9b73663 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,8 @@ 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 UserModelDto? GetUserModelDtoById(Guid userId) => Session(x => x.GetUserModelDtoById(userId)); + public UserModelDto? GetUserModelDtoByEmail(string email) => Session(x => x.GetUserModelDtoByEmail(email)); 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..92f7eb40 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,15 @@ 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(); } \ 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/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/TIAMWebApp.Shared.Application.csproj b/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj index 07dbe3ac..60611fe1 100644 --- a/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj +++ b/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj @@ -25,6 +25,7 @@ + diff --git a/TourIAmProject.sln b/TourIAmProject.sln index 48257c64..ba1fbe61 100644 --- a/TourIAmProject.sln +++ b/TourIAmProject.sln @@ -33,6 +33,8 @@ 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.Models", "TIAM.Models\TIAM.Models.csproj", "{6037FF79-88D2-457C-BA3A-9AC978873741}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -101,6 +103,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 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE