diff --git a/TIAM.Services/SignalRTags.cs b/TIAM.Services/SignalRTags.cs index 066c83ac..7d676f98 100644 --- a/TIAM.Services/SignalRTags.cs +++ b/TIAM.Services/SignalRTags.cs @@ -6,15 +6,13 @@ namespace TIAM.Services; public class SignalRTags : AcSignalRTags { //[SignalMessageTag(null, typeof(SignalResponseMessage), null, null)] - public static readonly int GetTransfersAsync = 5; + public const int GetTransfersAsync = 5; - public static readonly int GetPropertiesByOwnerIdAsync = 6; + public const int GetPropertiesByOwnerIdAsync = 6; [SignalMessageTag(typeof(SignalPostJsonDataMessage), typeof(SignalResponseMessage), null, null)] - public static readonly int UpdateTransferAsync = 7; - public static readonly int GetCompaniesAsync = 8; - - public static readonly int UpdateCompanyAsync = 9; - public static readonly int CreateCompanyAsync = 10; - + public const int UpdateTransferAsync = 7; + public const int AddTransferAsync = 8; + public const int DeleteTransferAsync = 9; + public const int GetCompaniesAsync = 10; } \ No newline at end of file diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor index a0913f7b..a97276c3 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor @@ -18,6 +18,7 @@ @using AyCode.Core.Extensions; @using AyCode.Core @using AyCode.Core.Helpers +@using AyCode.Interfaces.Entities @using TIAM.Services @layout AdminLayout @inject IEnumerable LogWriters @@ -338,68 +339,75 @@ transferEditModel.ContactEmail = "your@email.address"; } - async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) - { - bool success = false; - Transfer? transfer = null; - - if (e.IsNew) - { - //add new orderData to orderData array - _logger.Info("New orderData added"); - //await transferDataService.CreateTransfer((TransferWizardModel)e.EditModel); - } - else - { - _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); - - } - //get transfer from TransferData by Id - - // foreach (var transferToModify in (List)TransferData) - // { - // myModel = (Transfer)e.EditModel; - - // if (transferToModify.Id == myModel.Id) - // { - // //transferToModify.Driver = myModel.Driver; - // } - // } - - //if (success) - if (transfer != null) - { - UpdateDataSources(transfer); - - //e.Reload = true; - } - else UpdateAllDataAsync().Forget(); - } - - private void UpdateDataSources(Transfer transfer) - { - var transferIndex = TransferDataList.FindIndex(x => x.Id == transfer.Id); - if (transferIndex > -1) TransferDataList[transferIndex] = transfer; - else TransferDataList.Add(transfer); - - var appointment = CreateAppointmentModel(transfer); - var appointmentIndex = AppointmentModels.FindIndex(x => x.SourceId == transfer.Id); - - if (appointmentIndex > -1) AppointmentModels[appointmentIndex] = appointment; - else AppointmentModels.Add(appointment); - } - async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) { + var transfer = (Transfer)e.DataItem; + //await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem); //remove orderData from orderData array - _logger.Info("orderData deleted"); + _logger.Info("transfer delete"); + + PostDataToServerAsync(transfer, SignalRTags.DeleteTransferAsync, true).Forget(); //await UpdateDataAsync(); } + + async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) + { + var transfer = (Transfer)e.EditModel; + var logText = e.IsNew ? "add" : "update"; + + _logger.Info($"EditModelSaving, {logText} transfer; transferId " + transfer.Id); + + PostDataToServerAsync(transfer, e.IsNew ? SignalRTags.AddTransferAsync : SignalRTags.UpdateTransferAsync).Forget(); + + //await transferDataService.CreateTransfer((TransferWizardModel)e.EditModel); + //transfer = await transferDataService.UpdateTransferAsync(transfer); + } + + private Task PostDataToServerAsync(T transfer, int messageTag, bool isDelete = false) where T : Transfer //IEntityGuid + { + _logger.Info("PostDataToServerAsync called; transferId " + transfer.Id); + + RefreshDataSources(transfer, isDelete); //egybÅ‘l látszódik a változás a grid-ben, nem csak a callback lefutásakor! felhasználóbarátabb... - J. + + return devAdminSignalClient.PostDataAsync(messageTag, transfer, repsonse => + { + if (repsonse.Status != SignalResponseStatus.Success || repsonse.ResponseData == null) + { + UpdateAllDataAsync().Forget(); + return; + } + + RefreshDataSources(repsonse.ResponseData, isDelete); + StateHasChanged(); + }); + + //transfer = await devAdminSignalClient.PostDataAsync(SignalRTags.UpdateTransferAsync, transfer); + } + + private void RefreshDataSources(Transfer transfer, bool isDelete) + { + var transferIndex = TransferDataList.FindIndex(x => x.Id == transfer.Id); + + if (isDelete && transferIndex > -1) TransferDataList.RemoveAt(transferIndex); + else + { + if (transferIndex > -1) TransferDataList[transferIndex] = transfer; + else TransferDataList.Add(transfer); + } + + var appointmentIndex = AppointmentModels.FindIndex(x => x.SourceId == transfer.Id); + if (isDelete && appointmentIndex > -1) AppointmentModels.RemoveAt(appointmentIndex); + else + { + var appointment = CreateAppointmentModel(transfer); + + if (appointmentIndex > -1) AppointmentModels[appointmentIndex] = appointment; + else AppointmentModels.Add(appointment); + } + } + public Task UpdateAllDataAsync() { _logger.Info("UpdateAllDataAsync called"); @@ -472,7 +480,7 @@ void ColumnChooserButton_Click() { - Grid2.ShowColumnChooser(); + Grid2.ShowColumnChooser(); } IGrid Grid2 { get; set; } diff --git a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs index 6f2a23cf..ccd1a74c 100644 --- a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs +++ b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs @@ -391,11 +391,11 @@ namespace TIAMWebApp.Server.Controllers [AllowAnonymous] [HttpPost] [Route(APIUrls.GetTransferByIdRouteName)] - public async Task GetTransferById([FromBody] Guid transferID) + public async Task GetTransferById([FromBody] Guid transferId) { - _logger.Info(@"Get transfer by id called"); - _logger.Info($"transferId: {transferID.ToString()}"); - var result = _adminDal.GetTransferById(transferID); + _logger.Info($"Get transfer by id called; transferId: {transferId}"); + + var result = _adminDal.GetTransferById(transferId); //TODO: Implementálni a Logout-ot kliens és szerver oldalon is! - J. return Ok(result); @@ -406,7 +406,7 @@ namespace TIAMWebApp.Server.Controllers [Route(APIUrls.UpdateTransferRouteName)] public async Task UpdateTransfer(Transfer transferToModify) { - _logger.Info($"UpdateTransfer called! + {transferToModify.Id}"); + _logger.Info($"UpdateTransfer called! + {Request?.ReadFormAsync()}"); await _adminDal.UpdateTransferAsync(transferToModify); return transferToModify; diff --git a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs index 8757d2b9..fd6034f5 100644 --- a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs +++ b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs @@ -14,7 +14,6 @@ using TIAMWebApp.Server.Controllers; using System.Text.Json.Nodes; using System.Text.RegularExpressions; using System.Web; -using TIAM.Entities.ServiceProviders; namespace TIAMWebApp.Server.Services; @@ -59,55 +58,43 @@ public class DevAdminSignalRHub(AdminDal adminDal, ServiceProviderAPIController try { - if (messageTag == SignalRTags.GetTransfersAsync) + switch (messageTag) { - await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, await transferDataAPIController.GetTransfers()), requestId); - } - else if (messageTag == SignalRTags.GetPropertiesByOwnerIdAsync) - { - var ownerId = message!.MessagePackTo().Id; - var json = (await serviceProviderAPIController.GetServiceProvidersByOwnerId(ownerId)).ToJson(); + case SignalRTags.GetTransfersAsync: + await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, await transferDataAPIController.GetTransfers()), requestId); + return; - await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, json), requestId); - } - else if (messageTag == SignalRTags.UpdateTransferAsync) - { + case SignalRTags.GetPropertiesByOwnerIdAsync: + var ownerId = message!.MessagePackTo().Id; + var json = (await serviceProviderAPIController.GetServiceProvidersByOwnerId(ownerId)).ToJson(); - //var jsonPostData = message!.MessagePackTo().PostDataJson; - //_logger.DetailConditional($"PostData: [{jsonPostData}]"); - //var transfer = jsonPostData.JsonTo()!; + await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, json), requestId); - var transfer = message!.MessagePackTo>().PostData; + return; - await transferDataAPIController.UpdateTransfer(transfer); - await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, transfer.ToJson()), requestId); - } - else if (messageTag == SignalRTags.GetCompaniesAsync) - { - await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, await serviceProviderAPIController.GetServiceProviders()), requestId); - } - else if (messageTag == SignalRTags.UpdateCompanyAsync) - { - var company = message!.MessagePackTo>().PostData; + case SignalRTags.UpdateTransferAsync: + var transfer = message!.MessagePackTo>().PostData; - await serviceProviderAPIController.UpdateServiceProvider(company); - await ResponseToCaller(messageTag, new SignalResponseMessage(SignalResponseStatus.Success, company.ToJson()), requestId); - } - else if (messageTag == SignalRTags.CreateCompanyAsync) - { - //var company = message!.MessagePackTo>().PostData; + await transferDataAPIController.UpdateTransfer(transfer); + await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, transfer.ToJson()), requestId); - //await serviceProviderAPIController.CreateServiceProvider(company); - //await ResponseToCaller(messageTag, new SignalResponseMessage(SignalResponseStatus.Success, company.ToJson()), requestId); + return; + + case SignalRTags.GetCompaniesAsync: + await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, await serviceProviderAPIController.GetServiceProviders()), requestId); + return; + + default: + _logger.Error($"Server OnReceiveMessage; messageTag not found! messageTag: {messageTag}"); + break; } - return; } catch (Exception ex) { _logger.Error($"Server OnReceiveMessage; {ex.Message}", ex); } - await ResponseToCaller(messageTag, new SignalResponseMessage(SignalResponseStatus.Error, null), requestId); + await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Error), requestId); } protected async Task ResponseToCaller(int messageTag, ISignalRMessage message, int? requestId) diff --git a/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs b/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs index a050d569..e9e19336 100644 --- a/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs +++ b/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs @@ -104,9 +104,9 @@ namespace TIAMWebApp.Shared.Application.Services public virtual Task GetAllAsync(int messageTag, Action> responseCallback) => SendMessageToServerAsync(messageTag, null, responseCallback); - public virtual Task UpdateAsync(int messageTag, TPostData postData) where TPostData : class + public virtual Task PostDataAsync(int messageTag, TPostData postData) where TPostData : class => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(postData), AcDomain.NextUniqueInt32); - public virtual Task UpdateAsync(int messageTag, TPostData postData, Action> responseCallback) where TPostData : class + public virtual Task PostDataAsync(int messageTag, TPostData postData, Action> responseCallback) where TPostData : class => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(postData), responseCallback); #endregion CRUD @@ -182,6 +182,7 @@ namespace TIAMWebApp.Shared.Application.Services if (requestId.HasValue && _responseByRequestId.ContainsKey(requestId.Value)) { var reqId = requestId.Value; + var responseMessage = message.MessagePackTo(ContractlessStandardResolver.Options); switch (_responseByRequestId[reqId]) @@ -209,11 +210,14 @@ namespace TIAMWebApp.Shared.Application.Services _responseByRequestId.TryRemove(reqId, out _); } - + OnMessageReceived(messageTag, message, requestId); } catch(Exception ex) { + if (requestId.HasValue) + _responseByRequestId.TryRemove(requestId.Value, out _); + Logger.Error($"Client OnReceiveMessage; messageTag: {messageTag}; requestId: {requestId}; {ex.Message}", ex); throw; }