diff --git a/TIAM.Database.Test/UserDalTests.cs b/TIAM.Database.Test/UserDalTests.cs index fe54a20b..9cfb682e 100644 --- a/TIAM.Database.Test/UserDalTests.cs +++ b/TIAM.Database.Test/UserDalTests.cs @@ -14,7 +14,7 @@ using TIAM.Entities.Emails; namespace TIAM.Database.Test { [TestClass] - public class UserDalTests : AcUserDalTestBase + public class UserDalTests : AcUserDalTestBase { //private Guid _registerUserId = Guid.Parse("1f7e0591-330b-463b-81ad-d01f2e65e23e"); //private const string RegisterEmail = "qwerty@xxxxx.com"; diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs index 6f40cba5..f165bb2e 100644 --- a/TIAM.Database/DataLayers/Admins/AdminDal.cs +++ b/TIAM.Database/DataLayers/Admins/AdminDal.cs @@ -220,7 +220,7 @@ namespace TIAM.Database.DataLayers.Admins #endregion EmailMessage //15. (IServiceProviderDataService) Create service provider - public Task CreateServiceProviderAsync(TiamServiceProvider serviceProvider) + public Task 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> GetServiceProvidersAsync() + public Task> GetServiceProvidersAsync() { return Context.ServiceProviders.ToListAsync(); } - public virtual Task GetServiceProviderByIdAsync(Guid id) + public virtual Task 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 UpdateServiceProviderAsync(TiamServiceProvider serviceProvider) + public Task 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> GetServiceProvidersByOwnerIdAsync() + public Task> GetServiceProvidersByOwnerIdAsync() { throw new NotImplementedException(); @@ -495,7 +495,7 @@ namespace TIAM.Database.DataLayers.Admins } //8. (IPermissionService) create permission group - public Task CreatePermissionGroupAsync(PermissionGroup permissionGroup, TiamServiceProvider serviceProvider) + public Task CreatePermissionGroupAsync(PermissionGroup permissionGroup, Company serviceProvider) { bool result = false; using (var transaction = Context.Database.BeginTransaction()) diff --git a/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDal.cs b/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDal.cs index aba40548..99d8a677 100644 --- a/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDal.cs +++ b/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDal.cs @@ -35,7 +35,7 @@ namespace TIAM.Database.DataLayers.ServiceProviders //// #region ServiceProviders //// //14. (IserviceProviderDataService) Update service provider - //// public Task UpdateServiceProviderAsync(TiamServiceProvider serviceProvider) + //// public Task 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> GetServiceProvidersByOwnerIdAsync() + //// public Task> GetServiceProvidersByOwnerIdAsync() //// { //// throw new NotImplementedException(); @@ -275,7 +275,7 @@ namespace TIAM.Database.DataLayers.ServiceProviders //// } //// //8. (IPermissionService) create permission group - //// public Task CreatePermissionGroupAsync(PermissionGroup permissionGroup, TiamServiceProvider serviceProvider) + //// public Task CreatePermissionGroupAsync(PermissionGroup permissionGroup, Company serviceProvider) //// { //// bool result = false; //// using (var transaction = Context.Database.BeginTransaction()) diff --git a/TIAM.Database/DataLayers/Users/UserDal.cs b/TIAM.Database/DataLayers/Users/UserDal.cs index c0051901..4daa1ff6 100644 --- a/TIAM.Database/DataLayers/Users/UserDal.cs +++ b/TIAM.Database/DataLayers/Users/UserDal.cs @@ -19,7 +19,7 @@ using TIAM.Models.Dtos.Users; namespace TIAM.Database.DataLayers.Users { - public class UserDal : AcUserDalBase, IDalBase + public class UserDal : AcUserDalBase, IDalBase { public UserDal() : base() diff --git a/TIAM.Database/DbContexts/Admins/AdminDbContext.cs b/TIAM.Database/DbContexts/Admins/AdminDbContext.cs index eb24e122..1b472c6d 100644 --- a/TIAM.Database/DbContexts/Admins/AdminDbContext.cs +++ b/TIAM.Database/DbContexts/Admins/AdminDbContext.cs @@ -30,7 +30,7 @@ namespace TIAM.Database.DbContexts.Admins public DbSet TransferToDrivers { get; set; } public DbSet Cars { get; set; } - public DbSet ServiceProviders { get; set; } + public DbSet ServiceProviders { get; set; } public DbSet Products { get; set; } public DbSet UserProductMappings { get; set; } public DbSet PermissionGroups { get; set; } diff --git a/TIAM.Database/DbContexts/Admins/AdminDbContextExtension.cs b/TIAM.Database/DbContexts/Admins/AdminDbContextExtension.cs index 8dc2a23a..076c17d1 100644 --- a/TIAM.Database/DbContexts/Admins/AdminDbContextExtension.cs +++ b/TIAM.Database/DbContexts/Admins/AdminDbContextExtension.cs @@ -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; diff --git a/TIAM.Database/DbContexts/ServiceProviders/ServiceProviderDbContext.cs b/TIAM.Database/DbContexts/ServiceProviders/ServiceProviderDbContext.cs index c0ab2b20..563446d0 100644 --- a/TIAM.Database/DbContexts/ServiceProviders/ServiceProviderDbContext.cs +++ b/TIAM.Database/DbContexts/ServiceProviders/ServiceProviderDbContext.cs @@ -30,7 +30,7 @@ namespace TIAM.Database.DbContexts.ServiceProviders public DbSet UserProductMappings { get; set; } public DbSet Products { get; set; } - public DbSet ServiceProviders { get; set; } + public DbSet ServiceProviders { get; set; } public DbSet PermissionsTypes { get; set; } diff --git a/TIAM.Database/DbContexts/Users/IUserDbContext.cs b/TIAM.Database/DbContexts/Users/IUserDbContext.cs index 3c768a37..b2010960 100644 --- a/TIAM.Database/DbContexts/Users/IUserDbContext.cs +++ b/TIAM.Database/DbContexts/Users/IUserDbContext.cs @@ -13,5 +13,5 @@ using TIAM.Entities.Users; namespace TIAM.Database.DbContexts.Users; public interface IUserDbContext : - IAcUserDbContextBase, IUserDbSet, IAddressDbSet, ITransferDestinationDbSet, ITransferDbSet, IEmailMessageDbSet + IAcUserDbContextBase, IUserDbSet, IAddressDbSet, ITransferDestinationDbSet, ITransferDbSet, IEmailMessageDbSet { } \ No newline at end of file diff --git a/TIAM.Database/DbContexts/Users/UserDbContext.cs b/TIAM.Database/DbContexts/Users/UserDbContext.cs index 46d2c63a..198b0397 100644 --- a/TIAM.Database/DbContexts/Users/UserDbContext.cs +++ b/TIAM.Database/DbContexts/Users/UserDbContext.cs @@ -28,7 +28,7 @@ using TIAM.Entities.Users; namespace TIAM.Database.DbContexts.Users { public class UserDbContext : DbContextBase, IUserDbContext - //AcUserDbContextBase, IUserDbContext + //AcUserDbContextBase, IUserDbContext { public DbSet Users { get; set; } public DbSet UserTokens { get; set; } diff --git a/TIAM.Database/DbSets/ServiceProvider/IServiceProviderDbSet.cs b/TIAM.Database/DbSets/ServiceProvider/IServiceProviderDbSet.cs index 596a5139..b7c884be 100644 --- a/TIAM.Database/DbSets/ServiceProvider/IServiceProviderDbSet.cs +++ b/TIAM.Database/DbSets/ServiceProvider/IServiceProviderDbSet.cs @@ -5,5 +5,5 @@ namespace TIAM.Database.DbSets.ServiceProvider; public interface IServiceProviderDbSet { - public DbSet ServiceProviders { get; set; } + public DbSet ServiceProviders { get; set; } } \ No newline at end of file diff --git a/TIAM.Database/DbSets/Users/IUserDbSet.cs b/TIAM.Database/DbSets/Users/IUserDbSet.cs index 92b7a85f..95955b40 100644 --- a/TIAM.Database/DbSets/Users/IUserDbSet.cs +++ b/TIAM.Database/DbSets/Users/IUserDbSet.cs @@ -6,6 +6,6 @@ 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/ModelBuilders/Users/UserEntityTypeConfigurations.cs b/TIAM.Database/ModelBuilders/Users/UserEntityTypeConfigurations.cs index 9f33add3..822a0e70 100644 --- a/TIAM.Database/ModelBuilders/Users/UserEntityTypeConfigurations.cs +++ b/TIAM.Database/ModelBuilders/Users/UserEntityTypeConfigurations.cs @@ -27,7 +27,7 @@ public class UserProductMappingEntityTypeTransferConfiguration : IAcEntityTypeCo builder.BuildUserProductMappingToRelations(false); } } -public class UserEntityTypeDefaultConfiguration : AcUserEntityTypeDefaultConfiguration //IAcEntityTypeConfiguration// +public class UserEntityTypeDefaultConfiguration : AcUserEntityTypeDefaultConfiguration //IAcEntityTypeConfiguration// { public override void Configure(EntityTypeBuilder builder) { diff --git a/TIAM.Entities/Products/Product.cs b/TIAM.Entities/Products/Product.cs index 11820039..f7c6c080 100644 --- a/TIAM.Entities/Products/Product.cs +++ b/TIAM.Entities/Products/Product.cs @@ -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 Users { get; } = new(); public virtual List 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; diff --git a/TIAM.Entities/ServiceProviders/TiamServiceProvider.cs b/TIAM.Entities/ServiceProviders/Company.cs similarity index 50% rename from TIAM.Entities/ServiceProviders/TiamServiceProvider.cs rename to TIAM.Entities/ServiceProviders/Company.cs index 53293c89..e130c36c 100644 --- a/TIAM.Entities/ServiceProviders/TiamServiceProvider.cs +++ b/TIAM.Entities/ServiceProviders/Company.cs @@ -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, ITiamServiceProvider +public class Company : AcCompany, ICompany { public virtual List 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) { } } \ No newline at end of file diff --git a/TIAM.Entities/ServiceProviders/ICompany.cs b/TIAM.Entities/ServiceProviders/ICompany.cs new file mode 100644 index 00000000..b52dd5b4 --- /dev/null +++ b/TIAM.Entities/ServiceProviders/ICompany.cs @@ -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 : IAcCompany, ICompanyBase + where TUser : class, IUserBase + where TIUserToServiceProvider : class, IUserToCompanyBase + where TProfile : class, IProfileDto +{ + public List Products { get; } +} \ No newline at end of file diff --git a/TIAM.Entities/ServiceProviders/ITiamServiceProviderBase.cs b/TIAM.Entities/ServiceProviders/ICompanyBase.cs similarity index 57% rename from TIAM.Entities/ServiceProviders/ITiamServiceProviderBase.cs rename to TIAM.Entities/ServiceProviders/ICompanyBase.cs index 62613601..50153467 100644 --- a/TIAM.Entities/ServiceProviders/ITiamServiceProviderBase.cs +++ b/TIAM.Entities/ServiceProviders/ICompanyBase.cs @@ -2,6 +2,6 @@ namespace TIAM.Entities.ServiceProviders; -public interface ITiamServiceProviderBase : IAcServiceProviderBase +public interface ICompanyBase : IAcCompanyBase { } \ No newline at end of file diff --git a/TIAM.Entities/ServiceProviders/ITiamServiceProvider.cs b/TIAM.Entities/ServiceProviders/ITiamServiceProvider.cs deleted file mode 100644 index 7c098451..00000000 --- a/TIAM.Entities/ServiceProviders/ITiamServiceProvider.cs +++ /dev/null @@ -1,12 +0,0 @@ -using AyCode.Interfaces.ServiceProviders; -using TIAM.Entities.Products; -using TIAM.Entities.Users; - -namespace TIAM.Entities.ServiceProviders; - -public interface ITiamServiceProvider : IAcServiceProvider, ITiamServiceProviderBase - where TUser : class, IUserBase - where TIUserToServiceProvider : class, IUserToServiceProviderBase -{ - public List Products { get; } -} \ No newline at end of file diff --git a/TIAM.Entities/Users/IUser.cs b/TIAM.Entities/Users/IUser.cs index 96c41353..b6b39d9f 100644 --- a/TIAM.Entities/Users/IUser.cs +++ b/TIAM.Entities/Users/IUser.cs @@ -6,7 +6,7 @@ using TIAM.Entities.ServiceProviders; namespace TIAM.Entities.Users; -public interface IUser : IAcUser, IUserDto, IUserBase +public interface IUser : IAcUser, IUserDto, IUserBase { public List Products { get; } diff --git a/TIAM.Entities/Users/IUserDto.cs b/TIAM.Entities/Users/IUserDto.cs index 32d1d154..83e0b6b2 100644 --- a/TIAM.Entities/Users/IUserDto.cs +++ b/TIAM.Entities/Users/IUserDto.cs @@ -10,9 +10,9 @@ using TIAM.Entities.ServiceProviders; namespace TIAM.Entities.Users; -public interface IUserDto : IAcUserDtoBase +public interface IUserDto : IAcUserDtoBase where TProfile : class, IProfile - where TServiceProvider : class, ITiamServiceProviderBase - where TUserToServiceProvider : class, IUserToServiceProviderBase + where TCompany : class, ICompanyBase + where TUserToServiceProvider : class, IUserToCompanyBase where TProfileAddress : class, IAddress { } \ No newline at end of file diff --git a/TIAM.Entities/Users/IUserDtoDetail.cs b/TIAM.Entities/Users/IUserDtoDetail.cs index 6435bbc0..acdd5cbc 100644 --- a/TIAM.Entities/Users/IUserDtoDetail.cs +++ b/TIAM.Entities/Users/IUserDtoDetail.cs @@ -10,7 +10,7 @@ using TIAM.Entities.ServiceProviders; namespace TIAM.Entities.Users { - public interface IUserDtoDetail : IAcUserDtoDetailBase + public interface IUserDtoDetail : IAcUserDtoDetailBase { } } diff --git a/TIAM.Entities/Users/IUserForeignKey.cs b/TIAM.Entities/Users/IUserForeignKey.cs index 42f2d26e..ffab2ad1 100644 --- a/TIAM.Entities/Users/IUserForeignKey.cs +++ b/TIAM.Entities/Users/IUserForeignKey.cs @@ -10,6 +10,6 @@ public interface IUserRelation : IAcUserRelation, IUserForeignKey { } -public interface IUsersRelation : IAcUsersRelation +public interface IUsersRelation : IAcUsersRelation { } \ No newline at end of file diff --git a/TIAM.Entities/Users/IUserToCompany.cs b/TIAM.Entities/Users/IUserToCompany.cs new file mode 100644 index 00000000..e25d3228 --- /dev/null +++ b/TIAM.Entities/Users/IUserToCompany.cs @@ -0,0 +1,11 @@ +using TIAM.Entities.ServiceProviders; + +namespace TIAM.Entities.Users; + +public interface IUserToCompany : IUserToCompanyBase + where TUser : class, IUserBase + where TCompany : class, ICompanyBase +{ + public TUser User { get; set; } + public TCompany Company { get; set; } +} \ No newline at end of file diff --git a/TIAM.Entities/Users/IUserToCompanyBase.cs b/TIAM.Entities/Users/IUserToCompanyBase.cs new file mode 100644 index 00000000..495cc34c --- /dev/null +++ b/TIAM.Entities/Users/IUserToCompanyBase.cs @@ -0,0 +1,6 @@ +using AyCode.Interfaces.Users; + +namespace TIAM.Entities.Users; + +public interface IUserToCompanyBase : IAcUserToCompanyBase +{} \ No newline at end of file diff --git a/TIAM.Entities/Users/IUserToServiceProvider.cs b/TIAM.Entities/Users/IUserToServiceProvider.cs deleted file mode 100644 index 407ed533..00000000 --- a/TIAM.Entities/Users/IUserToServiceProvider.cs +++ /dev/null @@ -1,11 +0,0 @@ -using TIAM.Entities.ServiceProviders; - -namespace TIAM.Entities.Users; - -public interface IUserToServiceProvider : IUserToServiceProviderBase - where TUser : class, IUserBase - where TServiceProvider : class, ITiamServiceProviderBase -{ - public TUser User { get; set; } - public TServiceProvider ServiceProvider { get; set; } -} \ No newline at end of file diff --git a/TIAM.Entities/Users/IUserToServiceProviderBase.cs b/TIAM.Entities/Users/IUserToServiceProviderBase.cs deleted file mode 100644 index af406e05..00000000 --- a/TIAM.Entities/Users/IUserToServiceProviderBase.cs +++ /dev/null @@ -1,6 +0,0 @@ -using AyCode.Interfaces.Users; - -namespace TIAM.Entities.Users; - -public interface IUserToServiceProviderBase : IAcUserToServiceProviderBase -{} \ No newline at end of file diff --git a/TIAM.Entities/Users/User.cs b/TIAM.Entities/Users/User.cs index 38e06ec4..5e15aa8e 100644 --- a/TIAM.Entities/Users/User.cs +++ b/TIAM.Entities/Users/User.cs @@ -14,7 +14,7 @@ using TIAM.Entities.ServiceProviders; namespace TIAM.Entities.Users { [Table("Users")] - public class User : AcUser, IUser + 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 63c8c85d..c6b4b4c2 100644 --- a/TIAM.Entities/Users/UserServiceProviderMapping.cs +++ b/TIAM.Entities/Users/UserServiceProviderMapping.cs @@ -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; } diff --git a/TIAM.Entities/Users/UserToServiceProvider.cs b/TIAM.Entities/Users/UserToCompany.cs similarity index 56% rename from TIAM.Entities/Users/UserToServiceProvider.cs rename to TIAM.Entities/Users/UserToCompany.cs index 4f714a36..9091f8d2 100644 --- a/TIAM.Entities/Users/UserToServiceProvider.cs +++ b/TIAM.Entities/Users/UserToCompany.cs @@ -5,7 +5,7 @@ using TIAM.Entities.ServiceProviders; namespace TIAM.Entities.Users; -public class UserToServiceProvider : AcUserToServiceProvider, IUserToServiceProvider +public class UserToCompany : AcUserToCompany, IUserToCompany { } \ No newline at end of file diff --git a/TIAM.Models.Server/Logins/ILoggedInModel.cs b/TIAM.Models.Server/Logins/ILoggedInModel.cs index 541c99f9..e5cf1fcb 100644 --- a/TIAM.Models.Server/Logins/ILoggedInModel.cs +++ b/TIAM.Models.Server/Logins/ILoggedInModel.cs @@ -6,5 +6,5 @@ using TIAM.Entities.Users; namespace TIAM.Models.Server.Logins; -public interface ILoggedInModel : IAcLoggedInModelBase +public interface ILoggedInModel : IAcLoggedInModelBase {} \ No newline at end of file diff --git a/TIAM.Models.Server/Logins/LoggedInModel.cs b/TIAM.Models.Server/Logins/LoggedInModel.cs index 110056bb..e0d2aa09 100644 --- a/TIAM.Models.Server/Logins/LoggedInModel.cs +++ b/TIAM.Models.Server/Logins/LoggedInModel.cs @@ -6,6 +6,6 @@ using TIAM.Entities.Users; namespace TIAM.Models.Server.Logins; -public class LoggedInModel : AcLoggedInModelServer, ILoggedInModel +public class LoggedInModel : AcLoggedInModelServer, ILoggedInModel { } \ No newline at end of file diff --git a/TIAM.Models/Dtos/Users/UserDto.cs b/TIAM.Models/Dtos/Users/UserDto.cs index 391ab926..0593fa70 100644 --- a/TIAM.Models/Dtos/Users/UserDto.cs +++ b/TIAM.Models/Dtos/Users/UserDto.cs @@ -6,7 +6,7 @@ using TIAM.Entities.Users; namespace TIAM.Models.Dtos.Users; -public class UserDto : IUserDto +public class UserDto : IUserDto { public Guid Id { get; set; } @@ -15,6 +15,6 @@ public class UserDto : IUserDto ServiceProviders { get; set; } - public List UserToServiceProviders { get; set; } + public List ServiceProviders { get; set; } + public List UserToServiceProviders { get; set; } } \ No newline at end of file diff --git a/TIAM.Models/Dtos/Users/UserModelDto.cs b/TIAM.Models/Dtos/Users/UserModelDto.cs index 2a5f06b5..7893f1ba 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, IUserModelDtoMinBase +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 f97fc315..820b18fc 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, IUserModelDtoMinBase + public class UserModelDtoDetail : AcUserModelDtoDetailBase, IProductsRelation, IUserModelDtoMinBase { public List UserProductMappings { get; set; } public List Products { get; set; } diff --git a/TIAM.Services.Server.Tests/LoginServices/LoginServiceServerTests.cs b/TIAM.Services.Server.Tests/LoginServices/LoginServiceServerTests.cs index f042231c..d21768be 100644 --- a/TIAM.Services.Server.Tests/LoginServices/LoginServiceServerTests.cs +++ b/TIAM.Services.Server.Tests/LoginServices/LoginServiceServerTests.cs @@ -13,7 +13,7 @@ using TIAM.Services.Server.Logins; namespace TIAM.Services.Server.Tests.LoginServices { [TestClass] - public class LoginServiceServerTests : AcLoginServiceServerTestBase + public class LoginServiceServerTests : AcLoginServiceServerTestBase { private const string RegisterEmail = "qwerty@xxxxx.com"; private const string RegisterPassword = "elem'r"; diff --git a/TIAM.Services.Server/Logins/ILoginService.cs b/TIAM.Services.Server/Logins/ILoginService.cs index 3455aaa9..f53491f8 100644 --- a/TIAM.Services.Server/Logins/ILoginService.cs +++ b/TIAM.Services.Server/Logins/ILoginService.cs @@ -7,7 +7,7 @@ using TIAM.Models.Server.Logins; namespace TIAM.Services.Server.Logins; -public interface ILoginService : IAcLoginServiceServer +public interface ILoginService : IAcLoginServiceServer { } \ No newline at end of file diff --git a/TIAM.Services.Server/Logins/LoginService.cs b/TIAM.Services.Server/Logins/LoginService.cs index dcfb8766..ceef73b6 100644 --- a/TIAM.Services.Server/Logins/LoginService.cs +++ b/TIAM.Services.Server/Logins/LoginService.cs @@ -12,7 +12,7 @@ using TIAM.Models.Server.Logins; namespace TIAM.Services.Server.Logins; -public class LoginService(UserDal userDal, IConfiguration configuration) : AcLoginServiceServer(userDal, configuration), ILoginService +public class LoginService(UserDal userDal, IConfiguration configuration) : AcLoginServiceServer(userDal, configuration), ILoginService { public override LoggedInModel Login(string? email, string? password) diff --git a/TIAMSharedUI/Pages/User/MyServiceProviders.razor b/TIAMSharedUI/Pages/User/MyServiceProviders.razor index 5cb0e33f..25944cdf 100644 --- a/TIAMSharedUI/Pages/User/MyServiceProviders.razor +++ b/TIAMSharedUI/Pages/User/MyServiceProviders.razor @@ -148,7 +148,7 @@ { if (e.IsNew) { - var newEmployee = (TiamServiceProvider)e.EditModel; + var newEmployee = (Company)e.EditModel; newEmployee.Name = "John"; newEmployee.OwnerId = Guid.NewGuid(); } diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor.cs b/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor.cs index 0d4adee1..1d4ad9b0 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor.cs +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor.cs @@ -39,9 +39,9 @@ namespace TIAMSharedUI.Pages.User.SysAdmins //List _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 _productWizardModels = []; diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor index 36af5167..65f5084e 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor @@ -16,6 +16,8 @@ @using MessagePack @using MessagePack.Resolvers @using AyCode.Core.Extensions; +@using AyCode.Core +@using AyCode.Core.Helpers @layout AdminLayout @inject IEnumerable LogWriters @inject IStringLocalizer localizer @@ -387,21 +389,21 @@ { _logger = new LoggerClient(LogWriters.ToArray()); - devAdminSignalClient.OnMessageReceived += (messageTag, message) => + devAdminSignalClient.SendRequestToServerAsync(SignalRTags.GetTransfersAsync, responseBytes => { - if (messageTag == SignalRTags.PostTransfersAsync) - { - var json = message?.MessagePackTo(ContractlessStandardResolver.Options); + var transfers = responseBytes.MessagePackTo(ContractlessStandardResolver.Options).JsonTo>(); - InitializeDataSources(json?.JsonTo>() ?? []); - StateHasChanged(); - } - }; + InitializeDataSources(transfers ?? []); + StateHasChanged(); + }).Forget(); - await devAdminSignalClient.Send("", SignalRTags.GetTransfersAsync, null); + + //var transfers = await devAdminSignalClient.SendRequestToServerAsync>(SignalRTags.GetTransfersAsync); + //InitializeDataSources(transfers ?? []); + + //InitializeDataSources(await transferDataService.GetTransfersAsync()); - - base.OnInitialized(); + base.OnInitialized(); } private void InitializeDataSources(List transferDataList) diff --git a/TIAMSharedUI/Pages/User/SysAdmins/UserGrid_MasterDetail_NestedGrid_ServiceProviders.razor b/TIAMSharedUI/Pages/User/SysAdmins/UserGrid_MasterDetail_NestedGrid_ServiceProviders.razor index 2934ea91..1b57b299 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/UserGrid_MasterDetail_NestedGrid_ServiceProviders.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/UserGrid_MasterDetail_NestedGrid_ServiceProviders.razor @@ -61,9 +61,9 @@ [Parameter] public UserModelDtoDetail UserModelDtoDetail { get; set; } - List _detailGridData; + List _detailGridData; - List _availableServices; + List _availableServices; public UserModelDtoDetail UserInfo; @@ -73,7 +73,7 @@ { _logger = new LoggerClient(LogWriters.ToArray()); - _detailGridData = UserModelDtoDetail.ServiceProviders ?? new List(); + _detailGridData = UserModelDtoDetail.ServiceProviders ?? new List(); _availableServices = await ServiceProviderDataService.GetServiceProvidersAsync(); _logger.Info($"DetailGridData: {_detailGridData.Count}"); diff --git a/TIAMSharedUI/Shared/AdminLayout.razor b/TIAMSharedUI/Shared/AdminLayout.razor index c480f6a3..b39a893d 100644 --- a/TIAMSharedUI/Shared/AdminLayout.razor +++ b/TIAMSharedUI/Shared/AdminLayout.razor @@ -28,16 +28,13 @@
- +
-
-
- @Body
@@ -45,54 +42,8 @@
@code { - - private ILogger _logger; - public PopupMessageBox PopupMessageBox { get; private set; } = default!; - - protected override void OnInitialized() - { - _logger = new LoggerClient(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."); } + diff --git a/TIAMSharedUI/Shared/Components/TiamErrorBoundaryComponent.razor b/TIAMSharedUI/Shared/Components/TiamErrorBoundaryComponent.razor index 04a5aad2..c49e81d5 100644 --- a/TIAMSharedUI/Shared/Components/TiamErrorBoundaryComponent.razor +++ b/TIAMSharedUI/Shared/Components/TiamErrorBoundaryComponent.razor @@ -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 LogWriters + +@inherits ErrorBoundary @if (_currentError != null) { + @* *@

An error has occurred: @_currentError.Message

+@*
+ *@ } 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 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; diff --git a/TIAMSharedUI/Shared/MainLayout.razor b/TIAMSharedUI/Shared/MainLayout.razor index 4f20df2e..c8225ec0 100644 --- a/TIAMSharedUI/Shared/MainLayout.razor +++ b/TIAMSharedUI/Shared/MainLayout.razor @@ -23,90 +23,32 @@
- + - - -
-
- - @Body - -
-
- @* *@ - - +
+
+ + @Body + +
+
+ + @* *@ + +
- - -
@code { - private ILogger _logger; - public PopupMessageBox PopupMessageBox { get; private set; } = default!; - - protected override void OnInitialized() - { - _logger = new LoggerClient(LogWriters.ToArray()); - //_logger.Writer()?.StartConnection(Setting.UserBasicDetails?.RefreshToken ?? Guid.NewGuid().ToString("N")); - - base.OnInitialized(); - } - - protected override void OnAfterRender(bool firstRender) - { - // if (firstRender) - // _logger.Writer()?.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."); } diff --git a/TIAMSharedUI/TIAMSharedUI.csproj b/TIAMSharedUI/TIAMSharedUI.csproj index 573269b5..cfab2b04 100644 --- a/TIAMSharedUI/TIAMSharedUI.csproj +++ b/TIAMSharedUI/TIAMSharedUI.csproj @@ -15,6 +15,7 @@ + diff --git a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs index af9e9986..2250b60b 100644 --- a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs +++ b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs @@ -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> GetServiceProviders() + public Task> 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 GetServiceProviderById([FromBody] Guid id) + public async Task 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; } diff --git a/TIAMWebApp/Server/Program.cs b/TIAMWebApp/Server/Program.cs index 1c3b3c6e..770482b7 100644 --- a/TIAMWebApp/Server/Program.cs +++ b/TIAMWebApp/Server/Program.cs @@ -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; diff --git a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs index 0036ff67..9a900624 100644 --- a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs +++ b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs @@ -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 logWriters) : Hub, ISignalRHubServer +public class DevAdminSignalRHub(AdminDal adminDal, IEnumerable logWriters) : Hub, IAcSignalRHubServer { private readonly TIAM.Core.Loggers.Logger _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()); - } - } \ No newline at end of file diff --git a/TIAMWebApp/Server/Services/ISignalRHub.cs b/TIAMWebApp/Server/Services/ISignalRHub.cs index f4a7a14a..40678dd3 100644 --- a/TIAMWebApp/Server/Services/ISignalRHub.cs +++ b/TIAMWebApp/Server/Services/ISignalRHub.cs @@ -2,6 +2,6 @@ namespace TIAMWebApp.Server.Services; -public interface ISignalRHubServer : IAcSignalRHubServer +public interface ISignalRHubItemServer : IAcSignalRHubItemServer { } \ No newline at end of file diff --git a/TIAMWebApp/Server/TIAMWebApp.Server.csproj b/TIAMWebApp/Server/TIAMWebApp.Server.csproj index 47a184b0..ce459e35 100644 --- a/TIAMWebApp/Server/TIAMWebApp.Server.csproj +++ b/TIAMWebApp/Server/TIAMWebApp.Server.csproj @@ -13,16 +13,16 @@ - + - - - + + + diff --git a/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs b/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs index 373954c3..971d1451 100644 --- a/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs +++ b/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs @@ -20,16 +20,16 @@ namespace TIAMWebApp.Shared.Application.Interfaces public Task DeleteServiceProviderAsync(Guid serviceProviderId); //14 Update service provider - public Task UpdateServiceProviderAsync(TiamServiceProvider serviceProvider); + public Task UpdateServiceProviderAsync(Company serviceProvider); //15. Create service provider - public Task CreateServiceProviderAsync(TiamServiceProvider serviceProvider); + public Task CreateServiceProviderAsync(Company serviceProvider); //16. (IServiceProviderDataService) get all service providers - public Task> GetServiceProvidersAsync(); + public Task> GetServiceProvidersAsync(); //18. (IServiceProviderDataService) get serviceProvider by Id - public Task GetServiceProviderByIdAsync(Guid id); + public Task GetServiceProviderByIdAsync(Guid id); //19. (IServiceProviderDataService) Create product public Task CreateProductAsync(Product product); diff --git a/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/ProductWizardModel.cs b/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/ProductWizardModel.cs index b8286838..b3640c08 100644 --- a/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/ProductWizardModel.cs +++ b/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/ProductWizardModel.cs @@ -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; } } diff --git a/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs b/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs index 19511b4b..c81a9fcc 100644 --- a/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs +++ b/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs @@ -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 _responseByRequestId = new(); + protected readonly HubConnection HubConnection; protected readonly LoggerClient Logger; - public event Action OnMessageReceived; + public event Action OnMessageReceived; + public event Action OnMessageRequested; protected AcSignalRClientBase(string hubName, IEnumerable logWriters) { @@ -31,9 +39,22 @@ namespace TIAMWebApp.Shared.Application.Services //.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData)) .Build(); - _ = HubConnection.On("MessageReceived", MessageReceived); + HubConnection.Closed += HubConnection_Closed; + + _ = HubConnection.On("OnReceiveMessage", OnReceiveMessage); + _ = HubConnection.On(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 SendRequestToServerAsync(int messageTag) + { + var requestId = AcDomain.NextUniqueInt32; + + Logger.DebugConditional($"Client SendRequestToServerAsync; {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(ContractlessStandardResolver.Options); + return json.JsonTo() ?? 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 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 messagePackCallback: + _responseByRequestId.TryRemove(reqId, out _); + + messagePackCallback.Invoke(message); + return Task.CompletedTask; + + //case Action jsonCallback: + // jsonCallback.Invoke(message.MessagePackTo()); + // 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; + + } } } diff --git a/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs b/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs index cce91efb..83c203d5 100644 --- a/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs +++ b/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs @@ -44,7 +44,7 @@ namespace TIAMWebApp.Shared.Application.Services } //15. - public Task CreateServiceProviderAsync(TiamServiceProvider serviceProvider) + public Task CreateServiceProviderAsync(Company serviceProvider) { throw new NotImplementedException(); } @@ -91,13 +91,13 @@ namespace TIAMWebApp.Shared.Application.Services } //18. - public Task GetServiceProviderByIdAsync(Guid id) + public Task GetServiceProviderByIdAsync(Guid id) { throw new NotImplementedException(); } //16. - public Task> GetServiceProvidersAsync() + public Task> GetServiceProvidersAsync() { throw new NotImplementedException(); } @@ -115,7 +115,7 @@ namespace TIAMWebApp.Shared.Application.Services } //14. - public Task UpdateServiceProviderAsync(TiamServiceProvider serviceProvider) + public Task UpdateServiceProviderAsync(Company serviceProvider) { throw new NotImplementedException(); } diff --git a/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj b/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj index 22df6d05..603e5382 100644 --- a/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj +++ b/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj @@ -22,10 +22,10 @@ + - diff --git a/TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs b/TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs index 7a48e3f0..c3cbd36f 100644 --- a/TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs +++ b/TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs @@ -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;