From 53b717ecf4ca8a9e7df176b32587f5da56f69803 Mon Sep 17 00:00:00 2001 From: "jozsef.b@aycode.com" <9Rj@D}fVwBaN> Date: Mon, 29 Apr 2024 08:21:45 +0200 Subject: [PATCH] refactoring, improvements, fixes, etc... --- TIAM.Database.Test/AdminDalTest.cs | 5 ++- TIAM.Database.Test/UserDalTests.cs | 2 +- TIAM.Database/DataLayers/Admins/AdminDal.cs | 7 ++-- TIAM.Database/DataLayers/DalBase.cs | 2 +- TIAM.Database/DataLayers/IDalBase.cs | 10 ++++++ TIAM.Database/DataLayers/Users/UserDal.cs | 32 ++++--------------- .../Admins/AdminDbContextExtension.cs} | 16 ++-------- .../DbSets/Users/UserDbSetExtensions.cs | 8 +++-- TIAM.Entities/Addresses/Address.cs | 3 ++ TIAM.Entities/Profiles/Profile.cs | 2 ++ .../ServiceProviders/ITiamServiceProvider.cs | 5 ++- TIAM.Entities/Users/IUserModelDtoMinBase.cs | 9 ++++++ TIAM.Entities/Users/User.cs | 2 ++ .../Users/UserServiceProviderMapping.cs | 26 +++++++-------- TIAM.Models/Dtos/Users/UserModelDto.cs | 2 +- TIAM.Models/Dtos/Users/UserModelDtoDetail.cs | 2 +- .../Server/Controllers/UserAPIController.cs | 2 +- 17 files changed, 73 insertions(+), 62 deletions(-) create mode 100644 TIAM.Database/DataLayers/IDalBase.cs rename TIAM.Database/{DataLayers/Admins/AdminDalDbContextExtension.cs => DbContexts/Admins/AdminDbContextExtension.cs} (92%) create mode 100644 TIAM.Entities/Users/IUserModelDtoMinBase.cs diff --git a/TIAM.Database.Test/AdminDalTest.cs b/TIAM.Database.Test/AdminDalTest.cs index d3acd53c..b9e4c399 100644 --- a/TIAM.Database.Test/AdminDalTest.cs +++ b/TIAM.Database.Test/AdminDalTest.cs @@ -130,6 +130,9 @@ namespace TIAM.Database.Test Assert.IsTrue(user.UserProductMappings.Count != 0, "UserProductMappings count: 0"); Assert.IsNotNull(user.UserProductMappings[0].Product, "Product is null"); + + var userModelDto = (UserModelDto)Activator.CreateInstance(typeof(UserModelDto), user); + Assert.IsNotNull(userModelDto); } #region UserProductMapping @@ -236,7 +239,7 @@ namespace TIAM.Database.Test NullValueHandling = NullValueHandling.Ignore }; - var userModel = Dal.GetUserModelDtoById(userId, false); + var userModel = Dal.GetUserModelDtoById(userId, false); var serializedUserModel = JsonConvert.SerializeObject(userModel, options); userModel = JsonConvert.DeserializeObject(serializedUserModel); diff --git a/TIAM.Database.Test/UserDalTests.cs b/TIAM.Database.Test/UserDalTests.cs index 99813719..3dd34fae 100644 --- a/TIAM.Database.Test/UserDalTests.cs +++ b/TIAM.Database.Test/UserDalTests.cs @@ -166,7 +166,7 @@ namespace TIAM.Database.Test NullValueHandling = NullValueHandling.Ignore }; - var userModel = await Dal.GetUserModelDtoByIdAsync(userId, false).ConfigureAwait(false); + var userModel = await Dal.GetUserModelDtoByIdAsync(userId, false).ConfigureAwait(false); var serializedUserModel = JsonConvert.SerializeObject(userModel, options); userModel = JsonConvert.DeserializeObject(serializedUserModel); diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs index a7d37ba4..1702cf25 100644 --- a/TIAM.Database/DataLayers/Admins/AdminDal.cs +++ b/TIAM.Database/DataLayers/Admins/AdminDal.cs @@ -94,8 +94,11 @@ namespace TIAM.Database.DataLayers.Admins public Task GetUserModelDtoDetailByIdAsync(Guid userId, bool onlyConfirmed) => SessionAsync(ctx => ctx.GetUserModelDtoDetailById(userId, onlyConfirmed)); public UserModelDtoDetail? GetUserModelDtoDetailByEmail(string email, bool onlyConfirmed) => Session(ctx => ctx.GetUserModelDtoDetailByEmail(email, onlyConfirmed)); - public UserModelDto? GetUserModelDtoById(Guid userId, bool onlyConfirmed) => Session(ctx => ctx.GetUserModelDtoById(userId, onlyConfirmed)); - public Task GetUserModelDtoByIdAsync(Guid userId, bool onlyConfirmed) => SessionAsync(ctx => ctx.GetUserModelDtoById(userId, onlyConfirmed)); + public TUserModelDto? GetUserModelDtoById(Guid userId, bool onlyConfirmed) where TUserModelDto : class, IUserModelDtoMinBase + => Session(ctx => ctx.GetUserModelDtoById(userId, onlyConfirmed)); + public Task GetUserModelDtoByIdAsync(Guid userId, bool onlyConfirmed) where TUserModelDto : class, IUserModelDtoMinBase + => SessionAsync(ctx => ctx.GetUserModelDtoById(userId, onlyConfirmed)); + public UserModelDto? GetUserModelDtoByEmail(string email, bool onlyConfirmed) => Session(ctx => ctx.GetUserModelDtoByEmail(email, onlyConfirmed)); public string? GetUserJsonById(Guid userId, bool onlyConfirmed) => Session(ctx => ctx.GetUserById(userId, onlyConfirmed)?.ToJson()); diff --git a/TIAM.Database/DataLayers/DalBase.cs b/TIAM.Database/DataLayers/DalBase.cs index a5f0f7e9..c4d54843 100644 --- a/TIAM.Database/DataLayers/DalBase.cs +++ b/TIAM.Database/DataLayers/DalBase.cs @@ -10,7 +10,7 @@ using TIAM.Database.DbContexts; namespace TIAM.Database.DataLayers; -public class DalBase : AcDalBase where TDbContext : DbContextBase +public class DalBase : AcDalBase, IDalBase where TDbContext : DbContextBase { //public DalBase() : base(new TransferDestinationDbContext("DeveloperDbConnection")) //{ diff --git a/TIAM.Database/DataLayers/IDalBase.cs b/TIAM.Database/DataLayers/IDalBase.cs new file mode 100644 index 00000000..7dd8ad3a --- /dev/null +++ b/TIAM.Database/DataLayers/IDalBase.cs @@ -0,0 +1,10 @@ +using AyCode.Database.DataLayers; +using TIAM.Database.DbContexts; + +namespace TIAM.Database.DataLayers; + +public interface IDalBase : IAcDalBase +{ } + +public interface IDalBase : IAcDalBase, IAcDalBase where TDbContext : DbContextBase +{ } \ No newline at end of file diff --git a/TIAM.Database/DataLayers/Users/UserDal.cs b/TIAM.Database/DataLayers/Users/UserDal.cs index 7d7a6075..9ca9d118 100644 --- a/TIAM.Database/DataLayers/Users/UserDal.cs +++ b/TIAM.Database/DataLayers/Users/UserDal.cs @@ -18,14 +18,14 @@ using TIAM.Models.Dtos.Users; namespace TIAM.Database.DataLayers.Users { - public class UserDal : AcUserDalBase + public class UserDal : AcUserDalBase, IDalBase { public UserDal() : base() { } - public UserDal(UserDbContext _object) + public UserDal(UserDbContext context) { } @@ -33,33 +33,15 @@ namespace TIAM.Database.DataLayers.Users public Task GetUserModelDtoDetailByIdAsync(Guid userId, bool onlyConfirmed) => SessionAsync(ctx => ctx.GetUserModelDtoDetailById(userId, onlyConfirmed)); public UserModelDtoDetail? GetUserModelDtoDetailByEmail(string email, bool onlyConfirmed) => Session(ctx => ctx.GetUserModelDtoDetailByEmail(email, onlyConfirmed)); - public UserModelDto? GetUserModelDtoById(Guid userId, bool onlyConfirmed) => Session(x => x.GetUserModelDtoById(userId, onlyConfirmed)); - public Task GetUserModelDtoByIdAsync(Guid userId, bool onlyConfirmed) => SessionAsync(x => x.GetUserModelDtoById(userId, onlyConfirmed)); + public TUserModelDto? GetUserModelDtoById(Guid userId, bool onlyConfirmed) where TUserModelDto : class, IUserModelDtoMinBase + => Session(ctx => ctx.GetUserModelDtoById(userId, onlyConfirmed)); + public Task GetUserModelDtoByIdAsync(Guid userId, bool onlyConfirmed) where TUserModelDto : class, IUserModelDtoMinBase + => SessionAsync(ctx => ctx.GetUserModelDtoById(userId, onlyConfirmed)); + public Task GetUserModelDtoByEmailAsync(string email, bool onlyConfirmed) => SessionAsync(x => x.GetUserModelDtoByEmail(email, onlyConfirmed)); public Task> GetAllUsersModelDtoAsync() => SessionAsync(x => x.GetAllUsersModelDto().ToList()); public Task> GetAllUsersModelDtoDetailAsync() => SessionAsync(x => x.GetAllUsersModelDetailDto().ToList()); - public Task GetUserByPhoneNumberAsync(string phoneNumber) - { - Console.WriteLine($@"Getting user from db {phoneNumber}"); - var phoneNumberLower = phoneNumber.ToLower(); - return Context.Users.SingleOrDefaultAsync(x=>x.PhoneNumber.Equals(phoneNumberLower, StringComparison.CurrentCultureIgnoreCase)); - } - - public Task GetUserByEmailOrPhoneNumberAsync(string emailOrPhoneNumber) - { - Console.WriteLine($@"Getting user from db {emailOrPhoneNumber}"); - var emailOrPhoneNumberLower = emailOrPhoneNumber.ToLower(); - return Context.Users.SingleOrDefaultAsync(x=>x.EmailAddress.Equals(emailOrPhoneNumberLower, StringComparison.CurrentCultureIgnoreCase) || x.PhoneNumber.Equals(emailOrPhoneNumberLower, StringComparison.CurrentCultureIgnoreCase)); - } - - ////get user by Id - //public Task GetUserByIdAsync(Guid id) - //{ - // Console.WriteLine($"Getting user from db {id}"); - // return Context.Users.SingleOrDefaultAsync(x=>x.Id == id); - //} - public async Task CreateUserAsync(User user) { Context.Users.Add(user); diff --git a/TIAM.Database/DataLayers/Admins/AdminDalDbContextExtension.cs b/TIAM.Database/DbContexts/Admins/AdminDbContextExtension.cs similarity index 92% rename from TIAM.Database/DataLayers/Admins/AdminDalDbContextExtension.cs rename to TIAM.Database/DbContexts/Admins/AdminDbContextExtension.cs index 4f7c3663..8dc2a23a 100644 --- a/TIAM.Database/DataLayers/Admins/AdminDalDbContextExtension.cs +++ b/TIAM.Database/DbContexts/Admins/AdminDbContextExtension.cs @@ -1,14 +1,4 @@ -using AyCode.Interfaces.Entities; -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using TIAM.Core.Interfaces; -using TIAM.Database.DbContexts.Admins; -using TIAM.Database.DbContexts.ServiceProviders; -using TIAM.Database.DbSets.Permissions; +using TIAM.Database.DbSets.Permissions; using TIAM.Database.DbSets.Products; using TIAM.Database.DbSets.Users; using TIAM.Entities.Permissions; @@ -16,9 +6,9 @@ using TIAM.Entities.Products; using TIAM.Entities.ServiceProviders; using TIAM.Entities.Users; -namespace TIAM.Database.DataLayers.Admins +namespace TIAM.Database.DbContexts.Admins { - public static class AdminDalDbContextExtension + public static class AdminDbContextExtension { public static IQueryable GetUserProductMappingsByPermissionGroupId(this IAdminDbContext ctx, Guid permissionGroupId) { diff --git a/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs b/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs index 182b4d34..e4362cfd 100644 --- a/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs +++ b/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs @@ -21,8 +21,12 @@ public static class UserDbSetExtensions 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, bool onlyConfirmed) - => ctx.GetUsersById(userId, onlyConfirmed).Select(user => new UserModelDto(user)).FirstOrDefault(); + public static TUserModelDto? GetUserModelDtoById(this IUserDbSet ctx, Guid userId, bool onlyConfirmed) where TUserModelDto : class, IUserModelDtoMinBase + { + var user = ctx.GetUsersById(userId, onlyConfirmed).FirstOrDefault(); + return Activator.CreateInstance(typeof(TUserModelDto), user) as TUserModelDto; + } + //=> ctx.GetUsersById(userId, onlyConfirmed).Select(user => new UserModelDto(user)).FirstOrDefault(); public static UserModelDto? GetUserModelDtoByEmail(this IUserDbSet ctx, string email, bool onlyConfirmed) => ctx.GetUsersByEmail(email, onlyConfirmed).Select(user => new UserModelDto(user)).FirstOrDefault(); diff --git a/TIAM.Entities/Addresses/Address.cs b/TIAM.Entities/Addresses/Address.cs index b8580035..6f0143b1 100644 --- a/TIAM.Entities/Addresses/Address.cs +++ b/TIAM.Entities/Addresses/Address.cs @@ -1,7 +1,10 @@ using AyCode.Entities.Addresses; +using System.ComponentModel.DataAnnotations.Schema; +using TIAM.Entities.Profiles; namespace TIAM.Entities.Addresses; +[Table(nameof(Address))] public class Address : AcAddress, IAddress { } \ No newline at end of file diff --git a/TIAM.Entities/Profiles/Profile.cs b/TIAM.Entities/Profiles/Profile.cs index 7037e453..4393b3a6 100644 --- a/TIAM.Entities/Profiles/Profile.cs +++ b/TIAM.Entities/Profiles/Profile.cs @@ -1,8 +1,10 @@ using AyCode.Entities.Profiles; +using System.ComponentModel.DataAnnotations.Schema; using TIAM.Entities.Addresses; namespace TIAM.Entities.Profiles; +[Table(nameof(Profile))] public class Profile : AcProfile
, IProfile
{ diff --git a/TIAM.Entities/ServiceProviders/ITiamServiceProvider.cs b/TIAM.Entities/ServiceProviders/ITiamServiceProvider.cs index 4623c4bf..7c098451 100644 --- a/TIAM.Entities/ServiceProviders/ITiamServiceProvider.cs +++ b/TIAM.Entities/ServiceProviders/ITiamServiceProvider.cs @@ -1,4 +1,5 @@ using AyCode.Interfaces.ServiceProviders; +using TIAM.Entities.Products; using TIAM.Entities.Users; namespace TIAM.Entities.ServiceProviders; @@ -6,4 +7,6 @@ namespace TIAM.Entities.ServiceProviders; public interface ITiamServiceProvider : IAcServiceProvider, ITiamServiceProviderBase where TUser : class, IUserBase where TIUserToServiceProvider : class, IUserToServiceProviderBase -{} \ No newline at end of file +{ + public List Products { get; } +} \ No newline at end of file diff --git a/TIAM.Entities/Users/IUserModelDtoMinBase.cs b/TIAM.Entities/Users/IUserModelDtoMinBase.cs new file mode 100644 index 00000000..b0a9e04e --- /dev/null +++ b/TIAM.Entities/Users/IUserModelDtoMinBase.cs @@ -0,0 +1,9 @@ +using AyCode.Interfaces; +using AyCode.Interfaces.Users; + +namespace TIAM.Entities.Users; + +public interface IUserModelDtoMinBase : IAcUserModelDtoMinBase +{ + +} \ No newline at end of file diff --git a/TIAM.Entities/Users/User.cs b/TIAM.Entities/Users/User.cs index ad8d65a9..38e06ec4 100644 --- a/TIAM.Entities/Users/User.cs +++ b/TIAM.Entities/Users/User.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,6 +13,7 @@ using TIAM.Entities.ServiceProviders; namespace TIAM.Entities.Users { + [Table("Users")] public class User : AcUser, IUser { public virtual List Products { get; } = new(); diff --git a/TIAM.Entities/Users/UserServiceProviderMapping.cs b/TIAM.Entities/Users/UserServiceProviderMapping.cs index f5936300..63c8c85d 100644 --- a/TIAM.Entities/Users/UserServiceProviderMapping.cs +++ b/TIAM.Entities/Users/UserServiceProviderMapping.cs @@ -7,20 +7,20 @@ using TIAM.Entities.ServiceProviders; namespace TIAM.Entities.Users; -[Table("UserServiceProviderMapping")] -public class UserServiceProviderMapping : IEntityGuid, ITimeStampInfo -{ - [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public Guid Id { get; set; } +//[Table("UserServiceProviderMapping")] +//public class UserServiceProviderMapping : IEntityGuid, ITimeStampInfo +//{ +// [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] +// public Guid Id { get; set; } - public Guid UserId { get; set; } - public Guid ServiceProviderId { get; set; } +// public Guid UserId { get; set; } +// public Guid ServiceProviderId { get; set; } - public virtual User User { get; set; } - public virtual TiamServiceProvider ServiceProvider { get; set; } +// public virtual User User { get; set; } +// public virtual TiamServiceProvider ServiceProvider { get; set; } - public DateTime Created { get; set; } - public DateTime Modified { get; set; } +// public DateTime Created { get; set; } +// public DateTime Modified { get; set; } - public UserServiceProviderMapping() { } -} \ No newline at end of file +// public UserServiceProviderMapping() { } +//} \ No newline at end of file diff --git a/TIAM.Models/Dtos/Users/UserModelDto.cs b/TIAM.Models/Dtos/Users/UserModelDto.cs index 608f5494..2a5f06b5 100644 --- a/TIAM.Models/Dtos/Users/UserModelDto.cs +++ b/TIAM.Models/Dtos/Users/UserModelDto.cs @@ -10,7 +10,7 @@ using TIAM.Models.Dtos.Profiles; namespace TIAM.Models.Dtos.Users; -public class UserModelDto : AcUserModelDtoBase, IProductsRelation +public class UserModelDto : AcUserModelDtoBase, IProductsRelation, IUserModelDtoMinBase { public List UserProductMappings { get; set; } public List Products { get; set; } diff --git a/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs b/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs index 582ff448..f97fc315 100644 --- a/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs +++ b/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs @@ -13,7 +13,7 @@ using TIAM.Models.Dtos.Profiles; namespace TIAM.Models.Dtos.Users { - public class UserModelDtoDetail : AcUserModelDtoDetailBase, IProductsRelation + public class UserModelDtoDetail : AcUserModelDtoDetailBase, IProductsRelation, IUserModelDtoMinBase { public List UserProductMappings { get; set; } public List Products { get; set; } diff --git a/TIAMWebApp/Server/Controllers/UserAPIController.cs b/TIAMWebApp/Server/Controllers/UserAPIController.cs index 319b484e..06ef0a7c 100644 --- a/TIAMWebApp/Server/Controllers/UserAPIController.cs +++ b/TIAMWebApp/Server/Controllers/UserAPIController.cs @@ -365,7 +365,7 @@ namespace TIAMWebApp.Server.Controllers public Task GetUserById([FromBody] Guid id) { Logger.Info($"GetUserById called with id: {id}"); - return _userDal.GetUserModelDtoByIdAsync(id, true); + return _userDal.GetUserModelDtoByIdAsync(id, true); } [AllowAnonymous]