diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs index 080623c6..070752f1 100644 --- a/TIAM.Database/DataLayers/Admins/AdminDal.cs +++ b/TIAM.Database/DataLayers/Admins/AdminDal.cs @@ -10,6 +10,7 @@ using TIAM.Database.DbContexts.Admins; using TIAM.Database.DbSets.Emails; using TIAM.Database.DbSets.Permissions; using TIAM.Database.DbSets.Products; +using TIAM.Database.DbSets.ServiceProvider; using TIAM.Database.DbSets.Transfers; using TIAM.Database.DbSets.Users; using TIAM.Entities.Addresses; @@ -220,11 +221,7 @@ namespace TIAM.Database.DataLayers.Admins #endregion EmailMessage //15. (IServiceProviderDataService) Create service provider - public Task CreateServiceProviderAsync(Company serviceProvider) - { - Context.CreateServiceProvider(serviceProvider); - return Context.SaveChangesAsync().ContinueWith(x => x.Result > 0); - } + public Task CreateServiceProviderAsync(Company serviceProvider) => SessionAsync(ctx => ctx.AddServiceProvider(serviceProvider)); public bool CreateProductAsync(Product product) { @@ -234,21 +231,12 @@ namespace TIAM.Database.DataLayers.Admins return result.Result > 0; } - public Task> GetServiceProvidersAsync() - { - return SessionAsync(ctx => ctx.ServiceProviders.ToList()); - } + public Task> GetServiceProvidersAsync() => SessionAsync(ctx => ctx.GetServiceProviders().ToList()); - public Task GetServiceProvidersAsyncJson() - { - return SessionAsync(ctx => ctx.ServiceProviders.ToJson()); - } + public Task GetServiceProvidersAsyncJson() => SessionAsync(ctx => ctx.GetServiceProviders().ToJson()); - public virtual Task GetServiceProviderByIdAsync(Guid id) - { - GlobalLogger.Info($@"Getting serviceProvider from db {id}"); - return Context.ServiceProviders.SingleOrDefaultAsync(x => x.Id == id); - } + + public virtual Task GetServiceProviderByIdAsync(Guid id) => SessionAsync(ctx => ctx.GetServiceProviderById(id)); //public Task CreateUserProductMappingAsync(UserProductMapping userProductMapping) //{ @@ -260,64 +248,11 @@ namespace TIAM.Database.DataLayers.Admins #region ServiceProviders //14. (IserviceProviderDataService) Update service provider - public Task UpdateServiceProviderAsync(Company serviceProvider) - { - var dbServiceProvider = Context.ServiceProviders.FirstOrDefault(u => u.Id == serviceProvider.Id); - if (dbServiceProvider != null) - { - dbServiceProvider = serviceProvider; - Context.ServiceProviders.Update(dbServiceProvider); - return Context.SaveChangesAsync().ContinueWith(x => x.Result > 0); - } - else - { - throw new Exception("ServiceProvider not found"); - } - } + public Task UpdateServiceProviderAsync(Company company) => TransactionAsync(ctx => ctx.UpdateServiceProvider(company)); //13. (IserviceProviderDataService) delete service provider - public Task DeleteServiceProviderAsync(Guid id) - { - using (var transaction = Context.Database.BeginTransaction()) - { - var dbServiceProvider = Context.ServiceProviders.FirstOrDefault(u => u.Id == id); - if (dbServiceProvider != null) - { - //get products for this provider - var products = Context.Products.Where(x => x.ServiceProviderId == id).ToList(); + public Task DeleteServiceProviderAsync(Guid id) => TransactionAsync(ctx => ctx.RemoveServiceProvider(id)); - /*foreach (var productItem in products) - { - //delete products - var permissionContextMappings = Context.PermissionContextMappings.Where(x => x.ContextId == productItem.Id).ToList(); - //iterate through every row - foreach (var item in permissionContextMappings) - { - - if (item.SubjectType == (int)PermissionContextMappingSubjectType.Group) - { - //get users in the permissiongroup - var permissionGroupUserMapping = Context.PermissionGroupUserMappings.Where(x => x.PermissionContextMappingId == item.Id).ToList(); - //remove every row (users) from permissiongroup - foreach (var user in permissionGroupUserMapping) - { - Context.PermissionGroupUserMappings.Remove(user); - } - } - } - //remove permissioncontextmappings - Context.PermissionContextMappings.RemoveRange(permissionContextMappings); - }*/ - Context.Products.RemoveRange(products); - Context.ServiceProviders.Remove(dbServiceProvider); - return Context.SaveChangesAsync().ContinueWith(x => x.Result > 0); - } - else - { - return Task.FromResult(false); - } - } - } //17. (IServiceProviderDataService) get service provider by ownerId public Task> GetServiceProvidersByOwnerIdAsync() diff --git a/TIAM.Database/DbSets/ServiceProvider/ServiceProviderDbSetExtensions.cs b/TIAM.Database/DbSets/ServiceProvider/ServiceProviderDbSetExtensions.cs new file mode 100644 index 00000000..4f38d4aa --- /dev/null +++ b/TIAM.Database/DbSets/ServiceProvider/ServiceProviderDbSetExtensions.cs @@ -0,0 +1,36 @@ +using Microsoft.EntityFrameworkCore; +using TIAM.Entities.ServiceProviders; + + +namespace TIAM.Database.DbSets.ServiceProvider; + +public static class ServiceProviderDbSetExtensions +{ + #region Add, Update, Remove + + public static bool AddServiceProvider(this IServiceProviderDbSet ctx, Company company) + => ctx.ServiceProviders.Add(company).State == EntityState.Added; + + public static bool RemoveServiceProvider(this IServiceProviderDbSet ctx, Company company) + => ctx.ServiceProviders.Remove(company).State == EntityState.Deleted; + + public static bool RemoveServiceProvider(this IServiceProviderDbSet ctx, Guid companyId) + { + var company = ctx.GetServiceProviderById(companyId); + return company == null || ctx.RemoveServiceProvider(company); + } + + #endregion Add, Update, Remove + + public static Company? GetServiceProviderById(this IServiceProviderDbSet ctx, Guid companyId) + => ctx.ServiceProviders.FirstOrDefault(x => x.Id == companyId); + + public static IQueryable GetServiceProviders(this IServiceProviderDbSet ctx) + => ctx.ServiceProviders; + + public static List GetServiceProvidersByOwnerId(this IServiceProviderDbSet ctx, Guid ownerId) + => ctx.ServiceProviders.Where(x => x.OwnerId == ownerId).ToList(); + + + +} \ No newline at end of file diff --git a/TIAM.Database/TIAM.Database.csproj b/TIAM.Database/TIAM.Database.csproj index b10b1334..d2d4b0cd 100644 --- a/TIAM.Database/TIAM.Database.csproj +++ b/TIAM.Database/TIAM.Database.csproj @@ -18,7 +18,6 @@ - diff --git a/TIAM.Services/AcSignalRTags.cs b/TIAM.Services/AcSignalRTags.cs index f67c7e6d..7f6ef93c 100644 --- a/TIAM.Services/AcSignalRTags.cs +++ b/TIAM.Services/AcSignalRTags.cs @@ -8,4 +8,5 @@ public class SignalRTags : AcSignalRTags public const int GetPropertiesByOwnerIdAsync = 6; public const int UpdateTransferAsync = 7; public const int GetCompaniesAsync = 8; + public const int UpdateCompanyAsync = 9; } \ No newline at end of file diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor index 5452f121..365e4e5e 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor @@ -198,7 +198,7 @@ SetOwnerPopupVisible = true; } - async Task SetOwner(Guid CompanyId) + async Task SetOwner(Guid CompanyId) { //get user id from DB var userModelDto = await userDataService.GetUserByEmailAsync(UpdateOwnerIdText); @@ -207,14 +207,14 @@ var target = await serviceProviderDataService.GetServiceProviderByIdAsync(CompanyId); if (target == null) { - return false; + return null; } else { target.OwnerId = userModelDto.Id; var result = await serviceProviderDataService.UpdateServiceProviderAsync(target); - return result; - + return result; + } } @@ -289,7 +289,7 @@ async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) { - bool success = false; + Company resultCompany = null; if (e.IsNew) { //add new orderData to orderData array @@ -300,7 +300,7 @@ { _logger.Info("orderData updated at id " + ((Company)e.EditModel).Id); - success = await serviceProviderDataService.UpdateServiceProviderAsync((Company)e.EditModel); + resultCompany = await serviceProviderDataService.UpdateServiceProviderAsync((Company)e.EditModel); } //get transfer from TransferData by Id @@ -315,7 +315,7 @@ // } // } - if (success) + if (resultCompany!=null) { //TODO: ne a teljes grid-et refresh-eljük, elég lenne csak az adott sort! - J. await UpdateDataAsync(); diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor index 0178e8c9..ef697e7a 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor @@ -353,8 +353,8 @@ { _logger.Info("orderData updated at id " + ((Transfer)e.EditModel).Id); - //transfer = await devAdminSignalClient.UpdateAsync(SignalRTags.UpdateTransferAsync, (Transfer)e.EditModel); - transfer = await transferDataService.UpdateTransferAsync((Transfer)e.EditModel); + transfer = await devAdminSignalClient.UpdateAsync(SignalRTags.UpdateTransferAsync, (Transfer)e.EditModel); + //transfer = await transferDataService.UpdateTransferAsync((Transfer)e.EditModel); } //get transfer from TransferData by Id diff --git a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs index 743c9630..6e503d15 100644 --- a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs +++ b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs @@ -10,6 +10,7 @@ using TIAM.Entities.ServiceProviders; using TIAM.Entities.Users; using TIAMWebApp.Shared.Application.Models; using Product = TIAM.Entities.Products.Product; +using TIAM.Entities.Transfers; namespace TIAMWebApp.Server.Controllers { @@ -95,6 +96,17 @@ namespace TIAMWebApp.Server.Controllers return await _adminDal.GetServiceProviderByIdAsync(id); } + [AllowAnonymous] + [HttpPost] + [Route(APIUrls.UpdateServiceProviderRouteName)] + public async Task UpdateServiceProvider(Company companyToModify) + { + GlobalLogger.Info($"UpdateServiceProvider called! + {Request.ReadFormAsync()}"); + var result = await _adminDal.UpdateServiceProviderAsync(companyToModify); + + return result; + } + //17. [Authorize] [HttpPost] diff --git a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs index dc9888bc..b9a27a16 100644 --- a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs +++ b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs @@ -14,6 +14,7 @@ using TIAMWebApp.Server.Controllers; using System.Text.Json.Nodes; using System.Text.RegularExpressions; using System.Web; +using TIAM.Entities.ServiceProviders; namespace TIAMWebApp.Server.Services; @@ -84,7 +85,14 @@ public class DevAdminSignalRHub(AdminDal adminDal, ServiceProviderAPIController { await ResponseToCaller(messageTag, new SignalResponseMessage(SignalResponseStatus.Success, await serviceProviderAPIController.GetServiceProviders()), requestId); } - return; + else if (messageTag == SignalRTags.UpdateCompanyAsync) + { + var company = message!.MessagePackTo().PostData.JsonTo()!; + + await serviceProviderAPIController.UpdateServiceProvider(company); + await ResponseToCaller(messageTag, new SignalResponseMessage(SignalResponseStatus.Success, company.ToJson()), requestId); + } + return; } catch (Exception ex) { diff --git a/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs b/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs index 734566d0..2d085b5a 100644 --- a/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs +++ b/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs @@ -21,7 +21,7 @@ namespace TIAMWebApp.Shared.Application.Interfaces public Task DeleteServiceProviderAsync(Guid serviceProviderId); //14 Update service provider - public Task UpdateServiceProviderAsync(Company serviceProvider); + public Task UpdateServiceProviderAsync(Company serviceProvider); //15. Create service provider public Task CreateServiceProviderAsync(Company serviceProvider); diff --git a/TIAMWebApp/Shared/Models/APIUrls.cs b/TIAMWebApp/Shared/Models/APIUrls.cs index 7a46f3d9..c98cbb65 100644 --- a/TIAMWebApp/Shared/Models/APIUrls.cs +++ b/TIAMWebApp/Shared/Models/APIUrls.cs @@ -111,6 +111,11 @@ namespace TIAMWebApp.Shared.Application.Models public const string GetServiceProvidersByOwnerIdRouteName = "GetServiceProvidersByOwnerId"; public const string GetServiceProvidersByOwnerId = ServiceProviderAPI+GetServiceProvidersByOwnerIdRouteName; + public const string UpdateServiceProviderRouteName = "UpdateServiceProvider"; + public const string UpdateServiceProviderUrl = ServiceProviderAPI + UpdateServiceProviderRouteName; + + + public const string GetQrCodeByProductIdRouteName = "GetQRCodeByProductId"; public const string GetQrCodeByProductId = ServiceProviderAPI+GetQrCodeByProductIdRouteName; diff --git a/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs b/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs index bfacfa37..ca8a4ef4 100644 --- a/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs +++ b/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs @@ -18,6 +18,8 @@ using TIAMWebApp.Shared.Application.Models.ClientSide; using TIAMWebApp.Shared.Application.Utility; using TIAM.Services; using System.Linq; +using TIAM.Entities.Transfers; +using System.Net.WebSockets; namespace TIAMWebApp.Shared.Application.Services { @@ -144,9 +146,10 @@ namespace TIAMWebApp.Shared.Application.Services } //14. - public Task UpdateServiceProviderAsync(Company serviceProvider) + public async Task UpdateServiceProviderAsync(Company company) { - throw new NotImplementedException(); + var result = await _devAdminSignalClient.UpdateAsync(SignalRTags.UpdateCompanyAsync, company); + return result; } public async Task GetQRCodeByProductIdAsync(Guid productId)