merge
This commit is contained in:
commit
a0bb412018
|
|
@ -14,7 +14,7 @@ using TIAM.Entities.Emails;
|
|||
namespace TIAM.Database.Test
|
||||
{
|
||||
[TestClass]
|
||||
public class UserDalTests : AcUserDalTestBase<UserDal, UserDbContext, User, Profile, UserToken, TiamServiceProvider, UserToServiceProvider, Address, EmailMessage>
|
||||
public class UserDalTests : AcUserDalTestBase<UserDal, UserDbContext, User, Profile, UserToken, Company, UserToCompany, Address, EmailMessage>
|
||||
{
|
||||
//private Guid _registerUserId = Guid.Parse("1f7e0591-330b-463b-81ad-d01f2e65e23e");
|
||||
//private const string RegisterEmail = "qwerty@xxxxx.com";
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ namespace TIAM.Database.DataLayers.Admins
|
|||
#endregion EmailMessage
|
||||
|
||||
//15. (IServiceProviderDataService) Create service provider
|
||||
public Task<bool> CreateServiceProviderAsync(TiamServiceProvider serviceProvider)
|
||||
public Task<bool> CreateServiceProviderAsync(Company serviceProvider)
|
||||
{
|
||||
Context.CreateServiceProvider(serviceProvider);
|
||||
return Context.SaveChangesAsync().ContinueWith(x => x.Result > 0);
|
||||
|
|
@ -234,12 +234,12 @@ namespace TIAM.Database.DataLayers.Admins
|
|||
return result.Result > 0;
|
||||
}
|
||||
|
||||
public Task<List<TiamServiceProvider>> GetServiceProvidersAsync()
|
||||
public Task<List<Company>> GetServiceProvidersAsync()
|
||||
{
|
||||
return Context.ServiceProviders.ToListAsync();
|
||||
}
|
||||
|
||||
public virtual Task<TiamServiceProvider?> GetServiceProviderByIdAsync(Guid id)
|
||||
public virtual Task<Company?> GetServiceProviderByIdAsync(Guid id)
|
||||
{
|
||||
GlobalLogger.Info($@"Getting serviceProvider from db {id}");
|
||||
return Context.ServiceProviders.SingleOrDefaultAsync(x => x.Id == id);
|
||||
|
|
@ -255,7 +255,7 @@ namespace TIAM.Database.DataLayers.Admins
|
|||
#region ServiceProviders
|
||||
|
||||
//14. (IserviceProviderDataService) Update service provider
|
||||
public Task<bool> UpdateServiceProviderAsync(TiamServiceProvider serviceProvider)
|
||||
public Task<bool> UpdateServiceProviderAsync(Company serviceProvider)
|
||||
{
|
||||
var dbServiceProvider = Context.ServiceProviders.FirstOrDefault(u => u.Id == serviceProvider.Id);
|
||||
if (dbServiceProvider != null)
|
||||
|
|
@ -315,7 +315,7 @@ namespace TIAM.Database.DataLayers.Admins
|
|||
}
|
||||
|
||||
//17. (IServiceProviderDataService) get service provider by ownerId
|
||||
public Task<List<TiamServiceProvider>> GetServiceProvidersByOwnerIdAsync()
|
||||
public Task<List<Company>> GetServiceProvidersByOwnerIdAsync()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
||||
|
|
@ -495,7 +495,7 @@ namespace TIAM.Database.DataLayers.Admins
|
|||
}
|
||||
|
||||
//8. (IPermissionService) create permission group
|
||||
public Task<bool> CreatePermissionGroupAsync(PermissionGroup permissionGroup, TiamServiceProvider serviceProvider)
|
||||
public Task<bool> CreatePermissionGroupAsync(PermissionGroup permissionGroup, Company serviceProvider)
|
||||
{
|
||||
bool result = false;
|
||||
using (var transaction = Context.Database.BeginTransaction())
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ namespace TIAM.Database.DataLayers.ServiceProviders
|
|||
//// #region ServiceProviders
|
||||
|
||||
//// //14. (IserviceProviderDataService) Update service provider
|
||||
//// public Task<bool> UpdateServiceProviderAsync(TiamServiceProvider serviceProvider)
|
||||
//// public Task<bool> UpdateServiceProviderAsync(Company serviceProvider)
|
||||
//// {
|
||||
//// var dbServiceProvider = Context.ServiceProviders.FirstOrDefault(u => u.Id == serviceProvider.Id);
|
||||
//// if (dbServiceProvider != null)
|
||||
|
|
@ -95,7 +95,7 @@ namespace TIAM.Database.DataLayers.ServiceProviders
|
|||
//// }
|
||||
|
||||
//// //17. (IServiceProviderDataService) get service provider by ownerId
|
||||
//// public Task<List<TiamServiceProvider>> GetServiceProvidersByOwnerIdAsync()
|
||||
//// public Task<List<Company>> GetServiceProvidersByOwnerIdAsync()
|
||||
//// {
|
||||
//// throw new NotImplementedException();
|
||||
|
||||
|
|
@ -275,7 +275,7 @@ namespace TIAM.Database.DataLayers.ServiceProviders
|
|||
//// }
|
||||
|
||||
//// //8. (IPermissionService) create permission group
|
||||
//// public Task<bool> CreatePermissionGroupAsync(PermissionGroup permissionGroup, TiamServiceProvider serviceProvider)
|
||||
//// public Task<bool> CreatePermissionGroupAsync(PermissionGroup permissionGroup, Company serviceProvider)
|
||||
//// {
|
||||
//// bool result = false;
|
||||
//// using (var transaction = Context.Database.BeginTransaction())
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ using TIAM.Models.Dtos.Users;
|
|||
|
||||
namespace TIAM.Database.DataLayers.Users
|
||||
{
|
||||
public class UserDal : AcUserDalBase<UserDbContext, User, Profile, UserToken, TiamServiceProvider, UserToServiceProvider, Address, EmailMessage>, IDalBase<UserDbContext>
|
||||
public class UserDal : AcUserDalBase<UserDbContext, User, Profile, UserToken, Company, UserToCompany, Address, EmailMessage>, IDalBase<UserDbContext>
|
||||
{
|
||||
|
||||
public UserDal() : base()
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ namespace TIAM.Database.DbContexts.Admins
|
|||
public DbSet<TransferToDriver> TransferToDrivers { get; set; }
|
||||
public DbSet<Car> Cars { get; set; }
|
||||
|
||||
public DbSet<TiamServiceProvider> ServiceProviders { get; set; }
|
||||
public DbSet<Company> ServiceProviders { get; set; }
|
||||
public DbSet<Product> Products { get; set; }
|
||||
public DbSet<UserProductMapping> UserProductMappings { get; set; }
|
||||
public DbSet<PermissionGroup> PermissionGroups { get; set; }
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ namespace TIAM.Database.DbContexts.Admins
|
|||
{
|
||||
if (myproduct == null) return false;
|
||||
//Automatically add assigneduser for owner
|
||||
TiamServiceProvider? productOwner = ctx.ServiceProviders.FirstOrDefault(x => x.Id == myproduct.ServiceProviderId);
|
||||
Company? productOwner = ctx.ServiceProviders.FirstOrDefault(x => x.Id == myproduct.ServiceProviderId);
|
||||
if (productOwner == null) return false;
|
||||
var userProductMapping = new UserProductMapping(myproduct.Id, productOwner.OwnerId);
|
||||
ctx.CreateAssignedUser(userProductMapping);
|
||||
|
|
@ -113,7 +113,7 @@ namespace TIAM.Database.DbContexts.Admins
|
|||
return true;
|
||||
}
|
||||
|
||||
public static TiamServiceProvider CreateServiceProvider(this IAdminDbContext ctx, TiamServiceProvider serviceProvider)
|
||||
public static Company CreateServiceProvider(this IAdminDbContext ctx, Company serviceProvider)
|
||||
{
|
||||
if (serviceProvider == null) return null;
|
||||
|
||||
|
|
@ -123,7 +123,7 @@ namespace TIAM.Database.DbContexts.Admins
|
|||
return serviceProvider;
|
||||
}
|
||||
|
||||
public static TiamServiceProvider UpdateServiceProvider(this IAdminDbContext ctx, TiamServiceProvider serviceProvider)
|
||||
public static Company UpdateServiceProvider(this IAdminDbContext ctx, Company serviceProvider)
|
||||
{
|
||||
if (serviceProvider == null) return null;
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ namespace TIAM.Database.DbContexts.ServiceProviders
|
|||
public DbSet<UserProductMapping> UserProductMappings { get; set; }
|
||||
|
||||
public DbSet<Product> Products { get; set; }
|
||||
public DbSet<TiamServiceProvider> ServiceProviders { get; set; }
|
||||
public DbSet<Company> ServiceProviders { get; set; }
|
||||
|
||||
|
||||
public DbSet<PermissionsType> PermissionsTypes { get; set; }
|
||||
|
|
|
|||
|
|
@ -13,5 +13,5 @@ using TIAM.Entities.Users;
|
|||
namespace TIAM.Database.DbContexts.Users;
|
||||
|
||||
public interface IUserDbContext :
|
||||
IAcUserDbContextBase<User, Profile, UserToken, TiamServiceProvider, UserToServiceProvider, Address, EmailMessage>, IUserDbSet, IAddressDbSet, ITransferDestinationDbSet, ITransferDbSet, IEmailMessageDbSet
|
||||
IAcUserDbContextBase<User, Profile, UserToken, Company, UserToCompany, Address, EmailMessage>, IUserDbSet, IAddressDbSet, ITransferDestinationDbSet, ITransferDbSet, IEmailMessageDbSet
|
||||
{ }
|
||||
|
|
@ -28,7 +28,7 @@ using TIAM.Entities.Users;
|
|||
namespace TIAM.Database.DbContexts.Users
|
||||
{
|
||||
public class UserDbContext : DbContextBase, IUserDbContext
|
||||
//AcUserDbContextBase<User, Profile, UserToken, TiamServiceProvider, UserToServiceProvider, Address, EmailMessage>, IUserDbContext
|
||||
//AcUserDbContextBase<User, Profile, UserToken, Company, UserToServiceProvider, Address, EmailMessage>, IUserDbContext
|
||||
{
|
||||
public DbSet<User> Users { get; set; }
|
||||
public DbSet<UserToken> UserTokens { get; set; }
|
||||
|
|
|
|||
|
|
@ -5,5 +5,5 @@ namespace TIAM.Database.DbSets.ServiceProvider;
|
|||
|
||||
public interface IServiceProviderDbSet
|
||||
{
|
||||
public DbSet<TiamServiceProvider> ServiceProviders { get; set; }
|
||||
public DbSet<Company> ServiceProviders { get; set; }
|
||||
}
|
||||
|
|
@ -6,6 +6,6 @@ using TIAM.Entities.Users;
|
|||
|
||||
namespace TIAM.Database.DbSets.Users;
|
||||
|
||||
public interface IUserDbSet : IAcUserDbSet<User, Profile, TiamServiceProvider, UserToServiceProvider, Address>
|
||||
public interface IUserDbSet : IAcUserDbSet<User, Profile, Company, UserToCompany, Address>
|
||||
{
|
||||
}
|
||||
|
|
@ -27,7 +27,7 @@ public class UserProductMappingEntityTypeTransferConfiguration : IAcEntityTypeCo
|
|||
builder.BuildUserProductMappingToRelations(false);
|
||||
}
|
||||
}
|
||||
public class UserEntityTypeDefaultConfiguration : AcUserEntityTypeDefaultConfiguration<User, Profile, TiamServiceProvider, UserToServiceProvider, Address> //IAcEntityTypeConfiguration<User>//
|
||||
public class UserEntityTypeDefaultConfiguration : AcUserEntityTypeDefaultConfiguration<User, Profile, Company, UserToCompany, Address> //IAcEntityTypeConfiguration<User>//
|
||||
{
|
||||
public override void Configure(EntityTypeBuilder<User> builder)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ public class Product : ProductBase
|
|||
[Required]
|
||||
public Guid ServiceProviderId { get; set; }
|
||||
|
||||
public virtual TiamServiceProvider ServiceProvider { get; set; }
|
||||
public virtual Company ServiceProvider { get; set; }
|
||||
|
||||
public virtual List<User> Users { get; } = new();
|
||||
public virtual List<UserProductMapping> UserProductMappings { get; } = new();
|
||||
|
|
@ -26,8 +26,8 @@ public class Product : ProductBase
|
|||
{
|
||||
ServiceProviderId = serviceProviderId;
|
||||
}
|
||||
public Product(Guid ownerId, TiamServiceProvider serviceProvider, ProductType productType, string name, string description, float price, string jsonDetails) : this(Guid.NewGuid(), ownerId, serviceProvider, productType, name, description, price, jsonDetails) { }
|
||||
public Product(Guid id, Guid serviceProviderId, TiamServiceProvider serviceProvider, ProductType productType, string name, string description, float price, string jsonDetails) : base(id, productType, name, description, price, jsonDetails)
|
||||
public Product(Guid ownerId, Company serviceProvider, ProductType productType, string name, string description, float price, string jsonDetails) : this(Guid.NewGuid(), ownerId, serviceProvider, productType, name, description, price, jsonDetails) { }
|
||||
public Product(Guid id, Guid serviceProviderId, Company serviceProvider, ProductType productType, string name, string description, float price, string jsonDetails) : base(id, productType, name, description, price, jsonDetails)
|
||||
{
|
||||
ServiceProviderId = serviceProviderId;
|
||||
ServiceProvider = serviceProvider;
|
||||
|
|
|
|||
|
|
@ -6,28 +6,29 @@ using AyCode.Interfaces.Entities;
|
|||
using AyCode.Interfaces.TimeStampInfo;
|
||||
using AyCode.Interfaces.Users;
|
||||
using TIAM.Entities.Products;
|
||||
using TIAM.Entities.Profiles;
|
||||
using TIAM.Entities.Users;
|
||||
|
||||
namespace TIAM.Entities.ServiceProviders;
|
||||
|
||||
[Table("ServiceProviders")]
|
||||
public class TiamServiceProvider : AcServiceProvider<User, UserToServiceProvider>, ITiamServiceProvider<User, UserToServiceProvider>
|
||||
public class Company : AcCompany<User, UserToCompany, Profile>, ICompany<User, UserToCompany, Profile>
|
||||
{
|
||||
public virtual List<Product> Products { get; } = new();
|
||||
|
||||
public TiamServiceProvider()
|
||||
public Company()
|
||||
{
|
||||
}
|
||||
|
||||
public TiamServiceProvider(string name, Guid ownerId) : this(Guid.NewGuid(), name, ownerId)
|
||||
public Company(string name, Guid ownerId) : this(Guid.NewGuid(), name, ownerId)
|
||||
{
|
||||
}
|
||||
|
||||
public TiamServiceProvider(Guid id, string name, Guid ownerId) : this(id, name, ownerId, Guid.NewGuid())
|
||||
public Company(Guid id, string name, Guid ownerId) : this(id, name, ownerId, Guid.NewGuid())
|
||||
{
|
||||
}
|
||||
|
||||
public TiamServiceProvider(Guid id, string name, Guid ownerId, Guid affiliateId) : base(id, name, ownerId, affiliateId)
|
||||
public Company(Guid id, string name, Guid ownerId, Guid affiliateId) : base(id, name, ownerId, affiliateId)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
using AyCode.Interfaces.ServiceProviders;
|
||||
using TIAM.Entities.Products;
|
||||
using TIAM.Entities.Profiles;
|
||||
using TIAM.Entities.Users;
|
||||
|
||||
namespace TIAM.Entities.ServiceProviders;
|
||||
|
||||
public interface ICompany<TUser, TIUserToServiceProvider, TProfile> : IAcCompany<TUser, TIUserToServiceProvider, TProfile>, ICompanyBase
|
||||
where TUser : class, IUserBase
|
||||
where TIUserToServiceProvider : class, IUserToCompanyBase
|
||||
where TProfile : class, IProfileDto
|
||||
{
|
||||
public List<Product> Products { get; }
|
||||
}
|
||||
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
namespace TIAM.Entities.ServiceProviders;
|
||||
|
||||
public interface ITiamServiceProviderBase : IAcServiceProviderBase
|
||||
public interface ICompanyBase : IAcCompanyBase
|
||||
{
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
using AyCode.Interfaces.ServiceProviders;
|
||||
using TIAM.Entities.Products;
|
||||
using TIAM.Entities.Users;
|
||||
|
||||
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; }
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@ using TIAM.Entities.ServiceProviders;
|
|||
|
||||
namespace TIAM.Entities.Users;
|
||||
|
||||
public interface IUser : IAcUser<Profile, TiamServiceProvider, UserToServiceProvider, Address>, IUserDto<Profile, TiamServiceProvider, UserToServiceProvider, Address>, IUserBase
|
||||
public interface IUser : IAcUser<Profile, Company, UserToCompany, Address>, IUserDto<Profile, Company, UserToCompany, Address>, IUserBase
|
||||
{
|
||||
public List<Product> Products { get; }
|
||||
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@ using TIAM.Entities.ServiceProviders;
|
|||
|
||||
namespace TIAM.Entities.Users;
|
||||
|
||||
public interface IUserDto<TProfile, TServiceProvider, TUserToServiceProvider, TProfileAddress> : IAcUserDtoBase<TProfile, TServiceProvider, TUserToServiceProvider, TProfileAddress>
|
||||
public interface IUserDto<TProfile, TCompany, TUserToServiceProvider, TProfileAddress> : IAcUserDtoBase<TProfile, TCompany, TUserToServiceProvider, TProfileAddress>
|
||||
where TProfile : class, IProfile<TProfileAddress>
|
||||
where TServiceProvider : class, ITiamServiceProviderBase
|
||||
where TUserToServiceProvider : class, IUserToServiceProviderBase
|
||||
where TCompany : class, ICompanyBase
|
||||
where TUserToServiceProvider : class, IUserToCompanyBase
|
||||
where TProfileAddress : class, IAddress
|
||||
{ }
|
||||
|
|
@ -10,7 +10,7 @@ using TIAM.Entities.ServiceProviders;
|
|||
|
||||
namespace TIAM.Entities.Users
|
||||
{
|
||||
public interface IUserDtoDetail : IAcUserDtoDetailBase<Profile, TiamServiceProvider, UserToServiceProvider, Address>
|
||||
public interface IUserDtoDetail : IAcUserDtoDetailBase<Profile, Company, UserToCompany, Address>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,6 @@ public interface IUserRelation : IAcUserRelation<User>, IUserForeignKey
|
|||
{
|
||||
}
|
||||
|
||||
public interface IUsersRelation : IAcUsersRelation<User, UserToServiceProvider>
|
||||
public interface IUsersRelation : IAcUsersRelation<User, UserToCompany>
|
||||
{
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
using TIAM.Entities.ServiceProviders;
|
||||
|
||||
namespace TIAM.Entities.Users;
|
||||
|
||||
public interface IUserToCompany<TUser, TCompany> : IUserToCompanyBase
|
||||
where TUser : class, IUserBase
|
||||
where TCompany : class, ICompanyBase
|
||||
{
|
||||
public TUser User { get; set; }
|
||||
public TCompany Company { get; set; }
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
using AyCode.Interfaces.Users;
|
||||
|
||||
namespace TIAM.Entities.Users;
|
||||
|
||||
public interface IUserToCompanyBase : IAcUserToCompanyBase
|
||||
{}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
using TIAM.Entities.ServiceProviders;
|
||||
|
||||
namespace TIAM.Entities.Users;
|
||||
|
||||
public interface IUserToServiceProvider<TUser, TServiceProvider> : IUserToServiceProviderBase
|
||||
where TUser : class, IUserBase
|
||||
where TServiceProvider : class, ITiamServiceProviderBase
|
||||
{
|
||||
public TUser User { get; set; }
|
||||
public TServiceProvider ServiceProvider { get; set; }
|
||||
}
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
using AyCode.Interfaces.Users;
|
||||
|
||||
namespace TIAM.Entities.Users;
|
||||
|
||||
public interface IUserToServiceProviderBase : IAcUserToServiceProviderBase
|
||||
{}
|
||||
|
|
@ -14,7 +14,7 @@ using TIAM.Entities.ServiceProviders;
|
|||
namespace TIAM.Entities.Users
|
||||
{
|
||||
[Table("Users")]
|
||||
public class User : AcUser<Profile, TiamServiceProvider, UserToServiceProvider, Address>, IUser
|
||||
public class User : AcUser<Profile, Company, UserToCompany, Address>, IUser
|
||||
{
|
||||
public virtual List<Product> Products { get; } = new();
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ namespace TIAM.Entities.Users;
|
|||
// public Guid ServiceProviderId { get; set; }
|
||||
|
||||
// public virtual User User { get; set; }
|
||||
// public virtual TiamServiceProvider ServiceProvider { get; set; }
|
||||
// public virtual Company ServiceProvider { get; set; }
|
||||
|
||||
// public DateTime Created { get; set; }
|
||||
// public DateTime Modified { get; set; }
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ using TIAM.Entities.ServiceProviders;
|
|||
|
||||
namespace TIAM.Entities.Users;
|
||||
|
||||
public class UserToServiceProvider : AcUserToServiceProvider<User, TiamServiceProvider>, IUserToServiceProvider<User, TiamServiceProvider>
|
||||
public class UserToCompany : AcUserToCompany<User, Company>, IUserToCompany<User, Company>
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -6,5 +6,5 @@ using TIAM.Entities.Users;
|
|||
|
||||
namespace TIAM.Models.Server.Logins;
|
||||
|
||||
public interface ILoggedInModel : IAcLoggedInModelBase<User, UserToken, Profile, TiamServiceProvider, UserToServiceProvider, Address>
|
||||
public interface ILoggedInModel : IAcLoggedInModelBase<User, UserToken, Profile, Company, UserToCompany, Address>
|
||||
{}
|
||||
|
|
@ -6,6 +6,6 @@ using TIAM.Entities.Users;
|
|||
|
||||
namespace TIAM.Models.Server.Logins;
|
||||
|
||||
public class LoggedInModel : AcLoggedInModelServer<User, UserToken, Profile, TiamServiceProvider, UserToServiceProvider, Address>, ILoggedInModel
|
||||
public class LoggedInModel : AcLoggedInModelServer<User, UserToken, Profile, Company, UserToCompany, Address>, ILoggedInModel
|
||||
{
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@ using TIAM.Entities.Users;
|
|||
|
||||
namespace TIAM.Models.Dtos.Users;
|
||||
|
||||
public class UserDto : IUserDto<Profile, TiamServiceProvider, UserToServiceProvider, Address>
|
||||
public class UserDto : IUserDto<Profile, Company, UserToCompany, Address>
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
|
|
@ -15,6 +15,6 @@ public class UserDto : IUserDto<Profile, TiamServiceProvider, UserToServiceProvi
|
|||
|
||||
public Guid AffiliateId { get; set; }
|
||||
|
||||
public List<TiamServiceProvider> ServiceProviders { get; set; }
|
||||
public List<UserToServiceProvider> UserToServiceProviders { get; set; }
|
||||
public List<Company> ServiceProviders { get; set; }
|
||||
public List<UserToCompany> UserToServiceProviders { get; set; }
|
||||
}
|
||||
|
|
@ -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, IUserModelDtoMinBase
|
||||
public class UserModelDto : AcUserModelDtoBase<UserDto, Profile, ProfileDto, Company, UserToCompany, Address>, IProductsRelation, IUserModelDtoMinBase
|
||||
{
|
||||
public List<UserProductMapping> UserProductMappings { get; set; }
|
||||
public List<Product> Products { get; set; }
|
||||
|
|
|
|||
|
|
@ -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, IUserModelDtoMinBase
|
||||
public class UserModelDtoDetail : AcUserModelDtoDetailBase<UserDtoDetail, Profile, ProfileDto, Company, UserToCompany, Address>, IProductsRelation, IUserModelDtoMinBase
|
||||
{
|
||||
public List<UserProductMapping> UserProductMappings { get; set; }
|
||||
public List<Product> Products { get; set; }
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ using TIAM.Services.Server.Logins;
|
|||
namespace TIAM.Services.Server.Tests.LoginServices
|
||||
{
|
||||
[TestClass]
|
||||
public class LoginServiceServerTests : AcLoginServiceServerTestBase<UserDal, UserDbContext, LoginService, LoggedInModel, User, Profile, UserToken, TiamServiceProvider, UserToServiceProvider, Address, EmailMessage>
|
||||
public class LoginServiceServerTests : AcLoginServiceServerTestBase<UserDal, UserDbContext, LoginService, LoggedInModel, User, Profile, UserToken, Company, UserToCompany, Address, EmailMessage>
|
||||
{
|
||||
private const string RegisterEmail = "qwerty@xxxxx.com";
|
||||
private const string RegisterPassword = "elem'r";
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ using TIAM.Models.Server.Logins;
|
|||
|
||||
namespace TIAM.Services.Server.Logins;
|
||||
|
||||
public interface ILoginService : IAcLoginServiceServer<LoggedInModel, User, UserToken, Profile, TiamServiceProvider, UserToServiceProvider, Address>
|
||||
public interface ILoginService : IAcLoginServiceServer<LoggedInModel, User, UserToken, Profile, Company, UserToCompany, Address>
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -12,7 +12,7 @@ using TIAM.Models.Server.Logins;
|
|||
|
||||
namespace TIAM.Services.Server.Logins;
|
||||
|
||||
public class LoginService(UserDal userDal, IConfiguration configuration) : AcLoginServiceServer<LoggedInModel, UserDal, UserDbContext, User, UserToken, Profile, TiamServiceProvider, UserToServiceProvider, Address, EmailMessage>(userDal, configuration), ILoginService
|
||||
public class LoginService(UserDal userDal, IConfiguration configuration) : AcLoginServiceServer<LoggedInModel, UserDal, UserDbContext, User, UserToken, Profile, Company, UserToCompany, Address, EmailMessage>(userDal, configuration), ILoginService
|
||||
|
||||
{
|
||||
public override LoggedInModel Login(string? email, string? password)
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@
|
|||
{
|
||||
if (e.IsNew)
|
||||
{
|
||||
var newEmployee = (TiamServiceProvider)e.EditModel;
|
||||
var newEmployee = (Company)e.EditModel;
|
||||
newEmployee.Name = "John";
|
||||
newEmployee.OwnerId = Guid.NewGuid();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,9 +39,9 @@ namespace TIAMSharedUI.Pages.User.SysAdmins
|
|||
|
||||
//List<ProductWizardModel> _productArray =
|
||||
//[
|
||||
// new ProductWizardModel(new TiamServiceProvider(), ProductType.Hotel, "XY hotel", "XYHotel description is here ", 10.0f, ""),
|
||||
// new ProductWizardModel(new TiamServiceProvider(), ProductType.Hotel, "XY hotel", "XYHotel description is here ", 10.0f, ""),
|
||||
// new ProductWizardModel(new TiamServiceProvider(), ProductType.Hotel, "XY hotel", "XYHotel description is here ", 10.0f, "")
|
||||
// new ProductWizardModel(new Company(), ProductType.Hotel, "XY hotel", "XYHotel description is here ", 10.0f, ""),
|
||||
// new ProductWizardModel(new Company(), ProductType.Hotel, "XY hotel", "XYHotel description is here ", 10.0f, ""),
|
||||
// new ProductWizardModel(new Company(), ProductType.Hotel, "XY hotel", "XYHotel description is here ", 10.0f, "")
|
||||
//];
|
||||
|
||||
private readonly List<ProductWizardModel> _productWizardModels = [];
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@
|
|||
@using MessagePack
|
||||
@using MessagePack.Resolvers
|
||||
@using AyCode.Core.Extensions;
|
||||
@using AyCode.Core
|
||||
@using AyCode.Core.Helpers
|
||||
@layout AdminLayout
|
||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||
@inject IStringLocalizer<TIAMResources> localizer
|
||||
|
|
@ -387,21 +389,21 @@
|
|||
{
|
||||
_logger = new LoggerClient<ManageTransfers>(LogWriters.ToArray());
|
||||
|
||||
devAdminSignalClient.OnMessageReceived += (messageTag, message) =>
|
||||
devAdminSignalClient.SendRequestToServerAsync(SignalRTags.GetTransfersAsync, responseBytes =>
|
||||
{
|
||||
if (messageTag == SignalRTags.PostTransfersAsync)
|
||||
{
|
||||
var json = message?.MessagePackTo<string>(ContractlessStandardResolver.Options);
|
||||
var transfers = responseBytes.MessagePackTo<string>(ContractlessStandardResolver.Options).JsonTo<List<Transfer>>();
|
||||
|
||||
InitializeDataSources(json?.JsonTo<List<Transfer>>() ?? []);
|
||||
StateHasChanged();
|
||||
}
|
||||
};
|
||||
InitializeDataSources(transfers ?? []);
|
||||
StateHasChanged();
|
||||
}).Forget();
|
||||
|
||||
await devAdminSignalClient.Send("", SignalRTags.GetTransfersAsync, null);
|
||||
|
||||
//var transfers = await devAdminSignalClient.SendRequestToServerAsync<List<Transfer>>(SignalRTags.GetTransfersAsync);
|
||||
//InitializeDataSources(transfers ?? []);
|
||||
|
||||
|
||||
//InitializeDataSources(await transferDataService.GetTransfersAsync());
|
||||
|
||||
base.OnInitialized();
|
||||
base.OnInitialized();
|
||||
}
|
||||
|
||||
private void InitializeDataSources(List<Transfer> transferDataList)
|
||||
|
|
|
|||
|
|
@ -61,9 +61,9 @@
|
|||
[Parameter]
|
||||
public UserModelDtoDetail UserModelDtoDetail { get; set; }
|
||||
|
||||
List<TiamServiceProvider> _detailGridData;
|
||||
List<Company> _detailGridData;
|
||||
|
||||
List<TiamServiceProvider> _availableServices;
|
||||
List<Company> _availableServices;
|
||||
|
||||
public UserModelDtoDetail UserInfo;
|
||||
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
{
|
||||
_logger = new LoggerClient<UserGrid_MasterDetail_NestedGrid_ServiceProviders>(LogWriters.ToArray());
|
||||
|
||||
_detailGridData = UserModelDtoDetail.ServiceProviders ?? new List<TiamServiceProvider>();
|
||||
_detailGridData = UserModelDtoDetail.ServiceProviders ?? new List<Company>();
|
||||
_availableServices = await ServiceProviderDataService.GetServiceProvidersAsync();
|
||||
|
||||
_logger.Info($"DetailGridData: {_detailGridData.Count}");
|
||||
|
|
|
|||
|
|
@ -28,16 +28,13 @@
|
|||
|
||||
|
||||
<div class="page">
|
||||
<TiamErrorBoundaryComponent OnError="HandleError">
|
||||
<TiamErrorBoundaryComponent LoggerCategory="AdminLayout" OnError="HandleError">
|
||||
<div class="my-sidebar">
|
||||
|
||||
<AdminNavMenu />
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<article class="content">
|
||||
|
||||
@Body
|
||||
</article>
|
||||
</main>
|
||||
|
|
@ -45,54 +42,8 @@
|
|||
</div>
|
||||
|
||||
@code {
|
||||
|
||||
private ILogger _logger;
|
||||
|
||||
public PopupMessageBox PopupMessageBox { get; private set; } = default!;
|
||||
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
_logger = new LoggerClient<AdminLayout>(LogWriters.ToArray());
|
||||
|
||||
base.OnInitialized();
|
||||
}
|
||||
|
||||
private void HandleError(Exception exception)//, [CallerMemberName] string? memberName = null)
|
||||
{
|
||||
exception.GetCategoryAndMemberNameFromStackTraceString(out var memberName, out var categoryName);
|
||||
|
||||
if (memberName.IsNullOrWhiteSpace()) memberName = "..."; //ne "HandleError" memberName-el logoljunk! - J.
|
||||
|
||||
try
|
||||
{
|
||||
_logger.Error($"An error occurred: {exception.Message}", exception, categoryName, memberName);
|
||||
}
|
||||
catch (Exception loggerException)
|
||||
{
|
||||
jsRuntime.InvokeVoidAsync("console.error", $"{nameof(AdminLayout)}->HandleError; Logger error! {loggerException}");
|
||||
|
||||
jsRuntime.InvokeVoidAsync("console.error", $"{nameof(AdminLayout)}->{memberName}; An error occurred: {exception}");
|
||||
//jsRuntime.InvokeVoidAsync("console.warn", $"{nameof(AdminLayout)}->{memberName}; Error details: {exception.StackTrace}");
|
||||
}
|
||||
|
||||
// Log the error to server
|
||||
//LogErrorToServer(exception);
|
||||
|
||||
// Show a notification on UI
|
||||
ShowErrorNotification("An unexpected error occurred. Please try again later.");
|
||||
|
||||
//jsRuntime.InvokeVoidAsync("console.error", $"An error occurred: {exception.Message}");
|
||||
//jsRuntime.InvokeVoidAsync("console.warn", $"Error details: {exception.StackTrace}");
|
||||
}
|
||||
|
||||
// private void LogErrorToServer(Exception exception)
|
||||
// {
|
||||
// //_logger.Error($"An error occurred: {exception.Message}");
|
||||
// }
|
||||
|
||||
private void ShowErrorNotification(string message)
|
||||
{
|
||||
jsRuntime.InvokeVoidAsync("alert", message);
|
||||
}
|
||||
private void HandleError(Exception exception) => jsRuntime.InvokeVoidAsync("alert", "An unexpected error occurred. Please try again later.");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,21 @@
|
|||
@inherits ErrorBoundary
|
||||
@using TIAMWebApp.Shared.Application.Utility
|
||||
@using AyCode.Core.Extensions
|
||||
@using AyCode.Services.Loggers
|
||||
@using AyCode.Utils.Extensions
|
||||
@inject IJSRuntime jsRuntime
|
||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||
|
||||
@inherits ErrorBoundary
|
||||
|
||||
|
||||
@if (_currentError != null)
|
||||
{
|
||||
@* <CascadingValue Value=PopupMessageBox> *@
|
||||
<div class="error-message">
|
||||
<p>An error has occurred: @_currentError.Message</p>
|
||||
</div>
|
||||
@* </CascadingValue>
|
||||
<PopupMessageBox @ref="PopupMessageBox" /> *@
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -14,17 +24,55 @@ else
|
|||
|
||||
@code {
|
||||
private Exception? _currentError;
|
||||
private LoggerClient _logger;
|
||||
|
||||
//public PopupMessageBox PopupMessageBox { get; private set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public string LoggerCategory { get; set; }
|
||||
[Parameter]
|
||||
public EventCallback<Exception> OnError { get; set; }
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
_logger = new LoggerClient(LoggerCategory, LogWriters.ToArray());
|
||||
|
||||
base.OnInitialized();
|
||||
}
|
||||
|
||||
// private void HandleError(Exception exception) //, [CallerMemberName] string? memberName = null)
|
||||
// {
|
||||
// }
|
||||
|
||||
protected override Task OnErrorAsync(Exception exception)
|
||||
{
|
||||
_currentError = exception;
|
||||
|
||||
exception.GetCategoryAndMemberNameFromStackTraceString(out var memberName, out var categoryName);
|
||||
|
||||
if (memberName.IsNullOrWhiteSpace()) memberName = "..."; //ne az "OnErrorAsync" memberName-el logoljunk! - J.
|
||||
|
||||
try
|
||||
{
|
||||
_logger.Error($"An error occurred: {exception.Message}", exception, categoryName, memberName);
|
||||
}
|
||||
catch (Exception loggerException)
|
||||
{
|
||||
jsRuntime.InvokeVoidAsync("console.error", $"{nameof(TiamErrorBoundaryComponent)}->OnErrorAsync; Logger error! {loggerException}");
|
||||
|
||||
jsRuntime.InvokeVoidAsync("console.error", $"{nameof(TiamErrorBoundaryComponent)}->{memberName}; An error occurred: {exception}");
|
||||
//jsRuntime.InvokeVoidAsync("console.warn", $"{nameof(TiamErrorBoundaryComponent)}->{memberName}; Error details: {exception.StackTrace}");
|
||||
}
|
||||
|
||||
//ShowErrorNotification("An unexpected error occurred. Please try again later.");
|
||||
return OnError.HasDelegate ? OnError.InvokeAsync(exception) : base.OnErrorAsync(exception);
|
||||
}
|
||||
|
||||
// private void ShowErrorNotification(string message)
|
||||
// {
|
||||
// jsRuntime.InvokeVoidAsync("alert", message);
|
||||
// }
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
_currentError = null;
|
||||
|
|
|
|||
|
|
@ -23,90 +23,32 @@
|
|||
<!--div-- class="page"-->
|
||||
<div>
|
||||
|
||||
<TiamErrorBoundaryComponent OnError="HandleError">
|
||||
<TiamErrorBoundaryComponent LoggerCategory="MainLayout" OnError="HandleError">
|
||||
<AppLaunchComponent />
|
||||
|
||||
<Navbar />
|
||||
<!--div class="my-sidebar">
|
||||
<Navbar />
|
||||
<!--div class="my-sidebar">
|
||||
<NavMenu />
|
||||
</div-->
|
||||
|
||||
<main>
|
||||
<article class="content">
|
||||
<CascadingValue Value=PopupMessageBox>
|
||||
@Body
|
||||
</CascadingValue>
|
||||
</article>
|
||||
</main>
|
||||
@* <div class="footer">
|
||||
</div> *@
|
||||
<FooterComponent></FooterComponent>
|
||||
<PopupMessageBox @ref="PopupMessageBox" />
|
||||
<main>
|
||||
<article class="content">
|
||||
<CascadingValue Value=PopupMessageBox>
|
||||
@Body
|
||||
</CascadingValue>
|
||||
</article>
|
||||
</main>
|
||||
|
||||
@* <div class="footer">
|
||||
</div> *@
|
||||
<FooterComponent></FooterComponent>
|
||||
<PopupMessageBox @ref="PopupMessageBox" />
|
||||
</TiamErrorBoundaryComponent>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@code {
|
||||
private ILogger _logger;
|
||||
|
||||
public PopupMessageBox PopupMessageBox { get; private set; } = default!;
|
||||
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
_logger = new LoggerClient<MainLayout>(LogWriters.ToArray());
|
||||
//_logger.Writer<SignaRClientLogItemWriter>()?.StartConnection(Setting.UserBasicDetails?.RefreshToken ?? Guid.NewGuid().ToString("N"));
|
||||
|
||||
base.OnInitialized();
|
||||
}
|
||||
|
||||
protected override void OnAfterRender(bool firstRender)
|
||||
{
|
||||
// if (firstRender)
|
||||
// _logger.Writer<SignaRClientLogItemWriter>()?.StartConnection(Setting.UserBasicDetails?.RefreshToken ?? Guid.NewGuid().ToString("N"));
|
||||
|
||||
base.OnAfterRender(firstRender);
|
||||
}
|
||||
|
||||
private void HandleError(Exception exception)//, [CallerMemberName] string? memberName = null)
|
||||
{
|
||||
exception.GetCategoryAndMemberNameFromStackTraceString(out var memberName, out var categoryName);
|
||||
|
||||
if (memberName.IsNullOrWhiteSpace()) memberName = "..."; //ne "HandleError" memberName-el logoljunk! - J.
|
||||
|
||||
try
|
||||
{
|
||||
_logger.Error($"An error occurred: {exception.Message}", exception, categoryName, memberName);
|
||||
}
|
||||
catch (Exception loggerException)
|
||||
{
|
||||
jsRuntime.InvokeVoidAsync("console.error", $"{nameof(MainLayout)}->HandleError; Logger error! {loggerException}");
|
||||
|
||||
jsRuntime.InvokeVoidAsync("console.error", $"{nameof(MainLayout)}->{memberName}; An error occurred: {exception}");
|
||||
//jsRuntime.InvokeVoidAsync("console.warn", $"{nameof(MainLayout)}->{memberName}; Error details: {exception.StackTrace}");
|
||||
}
|
||||
|
||||
// Log the error to server
|
||||
//LogErrorToServer(exception);
|
||||
|
||||
// Show a notification on UI
|
||||
ShowErrorNotification("An unexpected error occurred. Please try again later.");
|
||||
|
||||
//jsRuntime.InvokeVoidAsync("console.error", $"An error occurred: {exception.Message}");
|
||||
//jsRuntime.InvokeVoidAsync("console.warn", $"Error details: {exception.StackTrace}");
|
||||
}
|
||||
|
||||
// private void LogErrorToServer(Exception exception)
|
||||
// {
|
||||
// //_logger.Error($"An error occurred: {exception.Message}");
|
||||
// }
|
||||
|
||||
private void ShowErrorNotification(string message)
|
||||
{
|
||||
jsRuntime.InvokeVoidAsync("alert", message);
|
||||
}
|
||||
|
||||
private void HandleError(Exception exception) => jsRuntime.InvokeVoidAsync("alert", "An unexpected error occurred. Please try again later.");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
<PackageReference Include="Blazor.AnimateOnScroll" Version="1.1.0" />
|
||||
<PackageReference Include="BlazorAnimation" Version="2.2.0" />
|
||||
<PackageReference Include="DevExpress.Blazor" Version="23.2.3" />
|
||||
<PackageReference Include="MessagePack" Version="2.5.140" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="8.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.5" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ namespace TIAMWebApp.Server.Controllers
|
|||
|
||||
GlobalLogger.Info($@"ServiceProvider to be created: {id}, {name}, {ownerId}");
|
||||
|
||||
await _adminDal.CreateServiceProviderAsync(new TiamServiceProvider(id, name, ownerId, Guid.NewGuid()));
|
||||
await _adminDal.CreateServiceProviderAsync(new Company(id, name, ownerId, Guid.NewGuid()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ namespace TIAMWebApp.Server.Controllers
|
|||
[AllowAnonymous]
|
||||
[HttpGet]
|
||||
[Route(APIUrls.GetServiceProvidersRouteName)]
|
||||
public Task<List<TiamServiceProvider>> GetServiceProviders()
|
||||
public Task<List<Company>> GetServiceProviders()
|
||||
{
|
||||
//var users = await _serviceProviderDal.Ctx.Users.ToListAsync();//.GetUsersAsync();
|
||||
//return users;
|
||||
|
|
@ -90,7 +90,7 @@ namespace TIAMWebApp.Server.Controllers
|
|||
[AllowAnonymous]
|
||||
[HttpPost]
|
||||
[Route(APIUrls.GetServiceProviderByIdRouteName)]
|
||||
public async Task<TiamServiceProvider?> GetServiceProviderById([FromBody] Guid id)
|
||||
public async Task<Company?> GetServiceProviderById([FromBody] Guid id)
|
||||
{
|
||||
GlobalLogger.Info($@"GetServiceProviderById called with id: {id}");
|
||||
|
||||
|
|
@ -110,7 +110,7 @@ namespace TIAMWebApp.Server.Controllers
|
|||
|
||||
//return serviceProviders.Where(x => x.OwnerId == ownerId).ToList();
|
||||
var myServiceproviders = serviceProviders.Where(x => x.OwnerId == ownerId).ToDictionary(x => x.Id, x => x.Name);
|
||||
//put TiamServiceProvider id and name into a dictionary
|
||||
//put Company id and name into a dictionary
|
||||
|
||||
return myServiceproviders;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ using Microsoft.OpenApi.Models;
|
|||
using System.Text;
|
||||
using AyCode.Core.Loggers;
|
||||
using MessagePack;
|
||||
using MessagePack.Resolvers;
|
||||
using TIAM.Core.Loggers;
|
||||
using TIAM.Database;
|
||||
using TIAM.Database.DataLayers.Admins;
|
||||
|
|
|
|||
|
|
@ -1,52 +1,78 @@
|
|||
using AyCode.Core.Extensions;
|
||||
using AyCode.Core.Helpers;
|
||||
using AyCode.Core.Loggers;
|
||||
using AyCode.Services.SignalRs;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
using TIAM.Database.DataLayers.Admins;
|
||||
using MessagePack;
|
||||
using MessagePack.Resolvers;
|
||||
using AyCode.Services.Server.SignalRs;
|
||||
using System.ServiceModel.Channels;
|
||||
|
||||
namespace TIAMWebApp.Server.Services;
|
||||
|
||||
public class DevAdminSignalRHub(AdminDal adminDal, IEnumerable<IAcLogWriterBase> logWriters) : Hub<ISignalRHubServer>, ISignalRHubServer
|
||||
public class DevAdminSignalRHub(AdminDal adminDal, IEnumerable<IAcLogWriterBase> logWriters) : Hub<ISignalRHubItemServer>, IAcSignalRHubServer
|
||||
{
|
||||
private readonly TIAM.Core.Loggers.Logger<DevAdminSignalRHub> _logger = new(logWriters.ToArray());
|
||||
|
||||
// https://docs.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-3.1#strongly-typed-hubs
|
||||
public override async Task OnConnectedAsync()
|
||||
{
|
||||
_logger.Debug($"OnConnectedAsync; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}");
|
||||
_logger.Debug($"Server OnConnectedAsync; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}");
|
||||
|
||||
//await Groups.AddToGroupAsync(Context.ConnectionId, "SignalR Users");
|
||||
await base.OnConnectedAsync();
|
||||
|
||||
//Clients.Caller.ConnectionId = Context.ConnectionId;
|
||||
//Clients.Caller.UserIdentifier = Context.UserIdentifier;
|
||||
}
|
||||
|
||||
public override async Task OnDisconnectedAsync(Exception? exception)
|
||||
{
|
||||
_logger.Error($"OnDisconnectedAsync; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}", exception);
|
||||
_logger.Error($"Server OnDisconnectedAsync; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}", exception);
|
||||
|
||||
//await Groups.RemoveFromGroupAsync(Context.ConnectionId, "SignalR Users");
|
||||
await base.OnDisconnectedAsync(exception);
|
||||
}
|
||||
|
||||
public async Task OnRequestMessage(int messageTag, int requestId)
|
||||
{
|
||||
_logger.Info($"Server OnRequestMessage; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}");
|
||||
|
||||
if (messageTag == SignalRTags.GetTransfersAsync)
|
||||
await ResponseToCaller(SignalRTags.PostTransfersAsync, await adminDal.GetTransfersJsonAsync(), requestId);
|
||||
}
|
||||
|
||||
public async Task OnReceiveMessage(int messageTag, byte[] message, int? requestId)
|
||||
{
|
||||
var logText = $"Server OnReceiveMessage; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}";
|
||||
|
||||
if (message.Length == 0) _logger.Warning($"message.Length == 0! {logText}");
|
||||
else _logger.Info(logText);
|
||||
|
||||
//if (messageTag == SignalRTags.GetTransfersAsync)
|
||||
// ResponseToClient(messageTag, await adminDal.GetTransfersJsonAsync(), requestId);
|
||||
}
|
||||
|
||||
protected async Task ResponseToCaller(int messageTag, object message, int requestId)
|
||||
=> await SendMessageToClient(Clients.Caller, messageTag, message, requestId);
|
||||
|
||||
protected async Task SendMessageToClient(ISignalRHubItemServer sendTo, int messageTag, object message, int? requestId = null)
|
||||
{
|
||||
_logger.Info($"Server SendMessageToClient; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}");
|
||||
|
||||
await sendTo.OnReceiveMessage(messageTag, message.ToMessagePack(ContractlessStandardResolver.Options), requestId);
|
||||
}
|
||||
|
||||
protected void SendRequestToClient(ISignalRHubItemServer sendTo, int messageTag, int requestId)
|
||||
{
|
||||
_logger.Info($"Server SendRequestToClient; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}");
|
||||
|
||||
sendTo.OnRequestMessage(messageTag, requestId).Forget();
|
||||
}
|
||||
|
||||
public async Task SendMessageToGroup(string groupId, int messageTag, string message)
|
||||
{
|
||||
//await Clients.Group(groupId).Post("", messageTag, message);
|
||||
}
|
||||
|
||||
public async Task Send(string user, int messageTag, object? message)
|
||||
{
|
||||
_logger.Info($"{nameof(user)}: {user}; {nameof(messageTag)}: {messageTag}; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}");
|
||||
|
||||
await Clients.Caller.MessageReceived("", messageTag, message?.ToMessagePack(ContractlessStandardResolver.Options));
|
||||
}
|
||||
|
||||
public async Task MessageReceived(string user, int messageTag, byte[]? message)
|
||||
{
|
||||
_logger.Info($"{nameof(user)}: {user}; {nameof(messageTag)}: {messageTag}; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}");
|
||||
|
||||
if (messageTag == SignalRTags.GetTransfersAsync)
|
||||
await Send("", SignalRTags.PostTransfersAsync, await adminDal.GetTransfersJsonAsync());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
namespace TIAMWebApp.Server.Services;
|
||||
|
||||
public interface ISignalRHubServer : IAcSignalRHubServer
|
||||
public interface ISignalRHubItemServer : IAcSignalRHubItemServer
|
||||
{
|
||||
}
|
||||
|
|
@ -13,16 +13,16 @@
|
|||
<PackageReference Include="GoogleApi" Version="5.4.3" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="8.0.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="8.0.5" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.5" />
|
||||
<PackageReference Include="Microsoft.OpenApi" Version="1.6.14" />
|
||||
<PackageReference Include="QRCoderNetCore" Version="1.0.0" />
|
||||
<PackageReference Include="SendGrid" Version="9.29.3" />
|
||||
<PackageReference Include="SkiaSharp" Version="2.88.8" />
|
||||
<PackageReference Include="SkiaSharp.Views.Desktop.Common" Version="2.88.8" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="6.6.1" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.1" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.6.1" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="6.6.2" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.2" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.6.2" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -20,16 +20,16 @@ namespace TIAMWebApp.Shared.Application.Interfaces
|
|||
public Task DeleteServiceProviderAsync(Guid serviceProviderId);
|
||||
|
||||
//14 Update service provider
|
||||
public Task<bool> UpdateServiceProviderAsync(TiamServiceProvider serviceProvider);
|
||||
public Task<bool> UpdateServiceProviderAsync(Company serviceProvider);
|
||||
|
||||
//15. Create service provider
|
||||
public Task<bool> CreateServiceProviderAsync(TiamServiceProvider serviceProvider);
|
||||
public Task<bool> CreateServiceProviderAsync(Company serviceProvider);
|
||||
|
||||
//16. (IServiceProviderDataService) get all service providers
|
||||
public Task<List<TiamServiceProvider>> GetServiceProvidersAsync();
|
||||
public Task<List<Company>> GetServiceProvidersAsync();
|
||||
|
||||
//18. (IServiceProviderDataService) get serviceProvider by Id
|
||||
public Task<TiamServiceProvider?> GetServiceProviderByIdAsync(Guid id);
|
||||
public Task<Company?> GetServiceProviderByIdAsync(Guid id);
|
||||
|
||||
//19. (IServiceProviderDataService) Create product
|
||||
public Task<bool> CreateProductAsync(Product product);
|
||||
|
|
|
|||
|
|
@ -31,16 +31,16 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
|
|||
public float Price { get; set; }
|
||||
public string? JsonDetails { get; set; }
|
||||
|
||||
public TiamServiceProvider TiamServiceProvider { get; set; }
|
||||
public Company Company { get; set; }
|
||||
|
||||
public ProductWizardModel() { }
|
||||
|
||||
public ProductWizardModel(TiamServiceProvider tiamServiceProvider, ProductType productType, string name, string description, float price, string? jsonDetails) : this(Guid.NewGuid(), tiamServiceProvider, productType, name, description, price, jsonDetails) { }
|
||||
public ProductWizardModel(Company company, ProductType productType, string name, string description, float price, string? jsonDetails) : this(Guid.NewGuid(), company, productType, name, description, price, jsonDetails) { }
|
||||
|
||||
public ProductWizardModel(Guid id, TiamServiceProvider tiamServiceProvider, ProductType productType, string name, string description, float price, string? jsonDetails)
|
||||
public ProductWizardModel(Guid id, Company company, ProductType productType, string name, string description, float price, string? jsonDetails)
|
||||
{
|
||||
Id = id;
|
||||
TiamServiceProvider = tiamServiceProvider;
|
||||
Company = company;
|
||||
ProductType = productType;
|
||||
Name = name;
|
||||
Description = description;
|
||||
|
|
@ -48,9 +48,9 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
|
|||
JsonDetails = jsonDetails;
|
||||
}
|
||||
|
||||
public Product SaveToProduct(TiamServiceProvider tiamServiceProvider)
|
||||
public Product SaveToProduct(Company company)
|
||||
{
|
||||
Product NewProduct = new(this.Id, tiamServiceProvider.Id, tiamServiceProvider, this.ProductType, this.Name, this.Description, this.Price, this.JsonDetails);
|
||||
Product NewProduct = new(this.Id, company.Id, company, this.ProductType, this.Name, this.Description, this.Price, this.JsonDetails);
|
||||
return NewProduct;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,15 @@
|
|||
using AyCode.Core.Enums;
|
||||
using System.Collections.Concurrent;
|
||||
using AyCode.Core;
|
||||
using AyCode.Core.Enums;
|
||||
using AyCode.Core.Extensions;
|
||||
using AyCode.Core.Helpers;
|
||||
using AyCode.Core.Loggers;
|
||||
using AyCode.Entities.LogItems;
|
||||
using AyCode.Services.Loggers;
|
||||
using AyCode.Services.SignalRs;
|
||||
using Azure.Core;
|
||||
using MessagePack;
|
||||
using MessagePack.Resolvers;
|
||||
using Microsoft.AspNetCore.SignalR.Client;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using TIAM.Entities.Transfers;
|
||||
|
|
@ -17,10 +22,13 @@ namespace TIAMWebApp.Shared.Application.Services
|
|||
|
||||
public abstract class AcSignalRClientBase : IAcSignalRHubClient
|
||||
{
|
||||
private readonly ConcurrentDictionary<int, object?> _responseByRequestId = new();
|
||||
|
||||
protected readonly HubConnection HubConnection;
|
||||
protected readonly LoggerClient Logger;
|
||||
|
||||
public event Action<int, byte[]?> OnMessageReceived;
|
||||
public event Action<int, byte[], int?> OnMessageReceived;
|
||||
public event Action<int, int> OnMessageRequested;
|
||||
|
||||
protected AcSignalRClientBase(string hubName, IEnumerable<IAcLogWriterClientBase> logWriters)
|
||||
{
|
||||
|
|
@ -31,9 +39,22 @@ namespace TIAMWebApp.Shared.Application.Services
|
|||
//.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData))
|
||||
.Build();
|
||||
|
||||
_ = HubConnection.On<string, int, byte[]?>("MessageReceived", MessageReceived);
|
||||
HubConnection.Closed += HubConnection_Closed;
|
||||
|
||||
_ = HubConnection.On<int, byte[], int?>("OnReceiveMessage", OnReceiveMessage);
|
||||
_ = HubConnection.On<int, int>(nameof(IAcSignalRHubClient.OnRequestMessage), OnRequestMessage);
|
||||
|
||||
HubConnection.StartAsync().Forget();
|
||||
|
||||
}
|
||||
|
||||
private Task HubConnection_Closed(Exception? arg)
|
||||
{
|
||||
if (_responseByRequestId.IsEmpty) Logger.DebugConditional($"Client HubConnection_Closed");
|
||||
else Logger.Warning($"Client HubConnection_Closed; {nameof(_responseByRequestId)} count: {_responseByRequestId.Count}");
|
||||
|
||||
_responseByRequestId.Clear();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public async Task StartConnection()
|
||||
|
|
@ -42,7 +63,7 @@ namespace TIAMWebApp.Shared.Application.Services
|
|||
await HubConnection.StartAsync();
|
||||
|
||||
if (HubConnection.State != HubConnectionState.Connected)
|
||||
await TaskHelper.WaitToAsync(() => HubConnection.State == HubConnectionState.Connected, 3000, 100);
|
||||
await TaskHelper.WaitToAsync(() => HubConnection.State == HubConnectionState.Connected, 10000, 25);
|
||||
}
|
||||
|
||||
public async Task StopConnection()
|
||||
|
|
@ -51,29 +72,126 @@ namespace TIAMWebApp.Shared.Application.Services
|
|||
await HubConnection.DisposeAsync();
|
||||
}
|
||||
|
||||
public virtual async Task Send(string user, int messageTag, object? message)
|
||||
public virtual async Task SendMessageToServerAsync(int messageTag, object message, int? requestId = null)
|
||||
{
|
||||
Logger.Info($"Send; {nameof(user)}: {user}; {nameof(messageTag)}: {messageTag}");
|
||||
Logger.DebugConditional($"Client SendMessageToServerAsync; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};");
|
||||
|
||||
await StartConnection();
|
||||
HubConnection.SendAsync("MessageReceived", "", messageTag, message).Forget();
|
||||
|
||||
HubConnection.SendAsync(nameof(IAcSignalRHubClient.OnReceiveMessage), messageTag, message, requestId).Forget();
|
||||
}
|
||||
|
||||
public virtual Task MessageReceived(string user, int messageTag, byte[]? message)
|
||||
public virtual void SendRequestToServerAsync(int messageTag)
|
||||
=> SendRequestToServerAsync(messageTag, AcDomain.NextUniqueInt32).Forget();
|
||||
|
||||
public virtual async Task SendRequestToServerAsync(int messageTag, int requestId)
|
||||
{
|
||||
Logger.Info($"MessageReceived; {nameof(user)}: {user}; {nameof(messageTag)}: {messageTag}");
|
||||
Logger.DebugConditional($"Client SendRequestToServerAsync; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};");
|
||||
|
||||
await StartConnection();
|
||||
|
||||
HubConnection.SendAsync(nameof(IAcSignalRHubClient.OnRequestMessage), messageTag, requestId).Forget();
|
||||
}
|
||||
|
||||
public virtual async Task<TResult?> SendRequestToServerAsync<TResult>(int messageTag)
|
||||
{
|
||||
var requestId = AcDomain.NextUniqueInt32;
|
||||
|
||||
Logger.DebugConditional($"Client SendRequestToServerAsync<TResult>; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};");
|
||||
|
||||
_responseByRequestId[requestId] = null;
|
||||
await SendRequestToServerAsync(messageTag, requestId);
|
||||
|
||||
try
|
||||
{
|
||||
OnMessageReceived(messageTag, message);
|
||||
if (await TaskHelper.WaitToAsync(() => _responseByRequestId[requestId] != null, 10000, 25) &&
|
||||
_responseByRequestId.TryRemove(requestId, out var obj) && obj is byte[] messagePackBytes)
|
||||
{
|
||||
var json = messagePackBytes.MessagePackTo<string>(ContractlessStandardResolver.Options);
|
||||
return json.JsonTo<TResult>() ?? default;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Error($"SendRequestToServerAsync; messageTag: {messageTag}; requestId: {requestId}; {ex.Message}", ex);
|
||||
}
|
||||
|
||||
_responseByRequestId.TryRemove(requestId, out _);
|
||||
return default;
|
||||
}
|
||||
|
||||
public virtual Task SendRequestToServerAsync(int messageTag, Action<byte[]> responseCallback)
|
||||
{
|
||||
var requestId = AcDomain.NextUniqueInt32;
|
||||
_responseByRequestId[requestId] = responseCallback;
|
||||
|
||||
return SendRequestToServerAsync(messageTag, requestId);
|
||||
}
|
||||
|
||||
public virtual Task OnReceiveMessage(int messageTag, byte[] message, int? requestId)
|
||||
{
|
||||
var logText = $"Client OnReceiveMessage; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};";
|
||||
|
||||
if (message.Length == 0) Logger.Warning($"message.Length == 0! {logText}");
|
||||
else Logger.Info(logText);
|
||||
|
||||
try
|
||||
{
|
||||
if (requestId.HasValue && _responseByRequestId.ContainsKey(requestId.Value))
|
||||
{
|
||||
var reqId = requestId.Value;
|
||||
|
||||
switch (_responseByRequestId[reqId])
|
||||
{
|
||||
case null:
|
||||
_responseByRequestId[reqId] = message;
|
||||
return Task.CompletedTask;
|
||||
|
||||
case Action<byte[]> messagePackCallback:
|
||||
_responseByRequestId.TryRemove(reqId, out _);
|
||||
|
||||
messagePackCallback.Invoke(message);
|
||||
return Task.CompletedTask;
|
||||
|
||||
//case Action<string> jsonCallback:
|
||||
// jsonCallback.Invoke(message.MessagePackTo<string>());
|
||||
// return Task.CompletedTask;
|
||||
|
||||
default:
|
||||
Logger.Error($"Client OnReceiveMessage switch; unknown message type: {_responseByRequestId[reqId]?.GetType().Name}");
|
||||
break;
|
||||
}
|
||||
|
||||
_responseByRequestId.TryRemove(reqId, out _);
|
||||
}
|
||||
|
||||
OnMessageReceived(messageTag, message, requestId);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
Logger.Error($"MessageReceived error; {ex.Message}", ex);
|
||||
Logger.Error($"Client OnReceiveMessage; messageTag: {messageTag}; requestId: {requestId}; {ex.Message}", ex);
|
||||
throw;
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public virtual Task OnRequestMessage(int messageTag, int requestId)
|
||||
{
|
||||
Logger.DebugConditional($"Client OnRequestMessage; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};");
|
||||
|
||||
try
|
||||
{
|
||||
OnMessageRequested(messageTag, requestId);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
Logger.Error($"Client OnReceiveMessage; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; {ex.Message}", ex);
|
||||
throw;
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ namespace TIAMWebApp.Shared.Application.Services
|
|||
}
|
||||
|
||||
//15.
|
||||
public Task<bool> CreateServiceProviderAsync(TiamServiceProvider serviceProvider)
|
||||
public Task<bool> CreateServiceProviderAsync(Company serviceProvider)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
|
@ -91,13 +91,13 @@ namespace TIAMWebApp.Shared.Application.Services
|
|||
}
|
||||
|
||||
//18.
|
||||
public Task<TiamServiceProvider?> GetServiceProviderByIdAsync(Guid id)
|
||||
public Task<Company?> GetServiceProviderByIdAsync(Guid id)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
//16.
|
||||
public Task<List<TiamServiceProvider>> GetServiceProvidersAsync()
|
||||
public Task<List<Company>> GetServiceProvidersAsync()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
|
@ -115,7 +115,7 @@ namespace TIAMWebApp.Shared.Application.Services
|
|||
}
|
||||
|
||||
//14.
|
||||
public Task<bool> UpdateServiceProviderAsync(TiamServiceProvider serviceProvider)
|
||||
public Task<bool> UpdateServiceProviderAsync(Company serviceProvider)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,10 +22,10 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MessagePack" Version="2.5.140" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="8.0.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="8.0.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="8.0.5" />
|
||||
<PackageReference Include="Microsoft.JSInterop" Version="8.0.5" />
|
||||
<PackageReference Include="SkiaSharp" Version="2.88.8" />
|
||||
<PackageReference Include="SkiaSharp.Views.Desktop.Common" Version="2.88.8" />
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ using AyCode.Core.Loggers;
|
|||
using AyCode.Entities;
|
||||
using AyCode.Entities.LogItems;
|
||||
using AyCode.Services.Loggers;
|
||||
using MessagePack;
|
||||
using Microsoft.AspNetCore.SignalR.Client;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
|
|
|||
Loading…
Reference in New Issue