refactoring, improvements, fixes, etc...

This commit is contained in:
jozsef.b@aycode.com 2024-04-29 08:21:45 +02:00
parent f6b9cf39a5
commit 53b717ecf4
17 changed files with 73 additions and 62 deletions

View File

@ -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<UserModelDto>(userId, false);
var serializedUserModel = JsonConvert.SerializeObject(userModel, options);
userModel = JsonConvert.DeserializeObject<UserModelDto>(serializedUserModel);

View File

@ -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<UserModelDto>(userId, false).ConfigureAwait(false);
var serializedUserModel = JsonConvert.SerializeObject(userModel, options);
userModel = JsonConvert.DeserializeObject<UserModelDto>(serializedUserModel);

View File

@ -94,8 +94,11 @@ namespace TIAM.Database.DataLayers.Admins
public Task<UserModelDtoDetail?> 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<UserModelDto?> GetUserModelDtoByIdAsync(Guid userId, bool onlyConfirmed) => SessionAsync(ctx => ctx.GetUserModelDtoById(userId, onlyConfirmed));
public TUserModelDto? GetUserModelDtoById<TUserModelDto>(Guid userId, bool onlyConfirmed) where TUserModelDto : class, IUserModelDtoMinBase
=> Session(ctx => ctx.GetUserModelDtoById<TUserModelDto>(userId, onlyConfirmed));
public Task<TUserModelDto?> GetUserModelDtoByIdAsync<TUserModelDto>(Guid userId, bool onlyConfirmed) where TUserModelDto : class, IUserModelDtoMinBase
=> SessionAsync(ctx => ctx.GetUserModelDtoById<TUserModelDto>(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());

View File

@ -10,7 +10,7 @@ using TIAM.Database.DbContexts;
namespace TIAM.Database.DataLayers;
public class DalBase<TDbContext> : AcDalBase<TDbContext> where TDbContext : DbContextBase
public class DalBase<TDbContext> : AcDalBase<TDbContext>, IDalBase<TDbContext> where TDbContext : DbContextBase
{
//public DalBase() : base(new TransferDestinationDbContext("DeveloperDbConnection"))
//{

View File

@ -0,0 +1,10 @@
using AyCode.Database.DataLayers;
using TIAM.Database.DbContexts;
namespace TIAM.Database.DataLayers;
public interface IDalBase : IAcDalBase
{ }
public interface IDalBase<TDbContext> : IAcDalBase<TDbContext>, IAcDalBase where TDbContext : DbContextBase
{ }

View File

@ -18,14 +18,14 @@ using TIAM.Models.Dtos.Users;
namespace TIAM.Database.DataLayers.Users
{
public class UserDal : AcUserDalBase<UserDbContext, User, Profile, UserToken, TiamServiceProvider, UserToServiceProvider, Address>
public class UserDal : AcUserDalBase<UserDbContext, User, Profile, UserToken, TiamServiceProvider, UserToServiceProvider, Address>, IDalBase<UserDbContext>
{
public UserDal() : base()
{
}
public UserDal(UserDbContext _object)
public UserDal(UserDbContext context)
{
}
@ -33,33 +33,15 @@ namespace TIAM.Database.DataLayers.Users
public Task<UserModelDtoDetail?> 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<UserModelDto?> GetUserModelDtoByIdAsync(Guid userId, bool onlyConfirmed) => SessionAsync(x => x.GetUserModelDtoById(userId, onlyConfirmed));
public TUserModelDto? GetUserModelDtoById<TUserModelDto>(Guid userId, bool onlyConfirmed) where TUserModelDto : class, IUserModelDtoMinBase
=> Session(ctx => ctx.GetUserModelDtoById<TUserModelDto>(userId, onlyConfirmed));
public Task<TUserModelDto?> GetUserModelDtoByIdAsync<TUserModelDto>(Guid userId, bool onlyConfirmed) where TUserModelDto : class, IUserModelDtoMinBase
=> SessionAsync(ctx => ctx.GetUserModelDtoById<TUserModelDto>(userId, onlyConfirmed));
public Task<UserModelDto?> GetUserModelDtoByEmailAsync(string email, bool onlyConfirmed) => SessionAsync(x => x.GetUserModelDtoByEmail(email, onlyConfirmed));
public Task<List<UserModelDto>> GetAllUsersModelDtoAsync() => SessionAsync(x => x.GetAllUsersModelDto().ToList());
public Task<List<UserModelDtoDetail>> GetAllUsersModelDtoDetailAsync() => SessionAsync(x => x.GetAllUsersModelDetailDto().ToList());
public Task<User?> 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<User?> 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<User?> GetUserByIdAsync(Guid id)
//{
// Console.WriteLine($"Getting user from db {id}");
// return Context.Users.SingleOrDefaultAsync(x=>x.Id == id);
//}
public async Task<bool> CreateUserAsync(User user)
{
Context.Users.Add(user);

View File

@ -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<UserProductMapping> GetUserProductMappingsByPermissionGroupId(this IAdminDbContext ctx, Guid permissionGroupId)
{

View File

@ -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<TUserModelDto>(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();

View File

@ -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
{
}

View File

@ -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<Address>, IProfile<Address>
{

View File

@ -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<TUser, TIUserToServiceProvider> : IAcServiceProvider<TUser, TIUserToServiceProvider>, ITiamServiceProviderBase
where TUser : class, IUserBase
where TIUserToServiceProvider : class, IUserToServiceProviderBase
{}
{
public List<Product> Products { get; }
}

View File

@ -0,0 +1,9 @@
using AyCode.Interfaces;
using AyCode.Interfaces.Users;
namespace TIAM.Entities.Users;
public interface IUserModelDtoMinBase : IAcUserModelDtoMinBase
{
}

View File

@ -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<Profile, TiamServiceProvider, UserToServiceProvider, Address>, IUser
{
public virtual List<Product> Products { get; } = new();

View File

@ -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() { }
}
// public UserServiceProviderMapping() { }
//}

View File

@ -10,7 +10,7 @@ using TIAM.Models.Dtos.Profiles;
namespace TIAM.Models.Dtos.Users;
public class UserModelDto : AcUserModelDtoBase<UserDto, Profile, ProfileDto, TiamServiceProvider, UserToServiceProvider, Address>, IProductsRelation
public class UserModelDto : AcUserModelDtoBase<UserDto, Profile, ProfileDto, TiamServiceProvider, UserToServiceProvider, Address>, IProductsRelation, IUserModelDtoMinBase
{
public List<UserProductMapping> UserProductMappings { get; set; }
public List<Product> Products { get; set; }

View File

@ -13,7 +13,7 @@ using TIAM.Models.Dtos.Profiles;
namespace TIAM.Models.Dtos.Users
{
public class UserModelDtoDetail : AcUserModelDtoDetailBase<UserDtoDetail, Profile, ProfileDto, TiamServiceProvider, UserToServiceProvider, Address>, IProductsRelation
public class UserModelDtoDetail : AcUserModelDtoDetailBase<UserDtoDetail, Profile, ProfileDto, TiamServiceProvider, UserToServiceProvider, Address>, IProductsRelation, IUserModelDtoMinBase
{
public List<UserProductMapping> UserProductMappings { get; set; }
public List<Product> Products { get; set; }

View File

@ -365,7 +365,7 @@ namespace TIAMWebApp.Server.Controllers
public Task<UserModelDto?> GetUserById([FromBody] Guid id)
{
Logger.Info($"GetUserById called with id: {id}");
return _userDal.GetUserModelDtoByIdAsync(id, true);
return _userDal.GetUserModelDtoByIdAsync<UserModelDto>(id, true);
}
[AllowAnonymous]