Add GetByIdAsync, GetAllAsync, UpdateAsync to SignalRClient; improvements, fixes, etc...

This commit is contained in:
jozsef.b@aycode.com 2024-05-27 08:32:48 +02:00
parent 771d32b6af
commit f21e6f56ef
12 changed files with 136 additions and 65 deletions

View File

@ -6,4 +6,5 @@ public class SignalRTags : AcSignalRTags
{
public const int GetTransfersAsync = 5;
public const int GetPropertiesByOwnerIdAsync = 6;
public const int UpdateTransferAsync = 7;
}

View File

@ -265,14 +265,14 @@ else
{
try
{
var result = await transferDataService.UpdateTransferAsync(transfer);
if (result)
var responseTransfer = await transferDataService.UpdateTransferAsync(transfer);
if (responseTransfer != null)
{
navManager.NavigateTo("/mytransfers"); // Redirect to a list or another page after successful update
}
else
{
errorMessage = $"Error updating transfer: {result.ToString()}";
errorMessage = $"Error updating transfer: {transfer.Id}";
}
}
catch (Exception ex)

View File

@ -10,7 +10,7 @@
@using AyCode.Services.Loggers
@using TIAMWebApp.Shared.Application.Services
@layout AdminLayout
@inject IAcLogWriterClientBase BrowserConsoleLogWriter
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IStringLocalizer<TIAMResources> localizer
@inject ISessionService SessionService
@inject IServiceProviderDataService ServiceProviderDataService
@ -104,6 +104,7 @@
@code {
private LoggerClient<MyServiceProviders> _logger;
IGrid Grid { get; set; }
Company[]? ServiceProviderData { get; set; }
@ -136,7 +137,7 @@
public async Task SubmitForm(object Result)
{
//await WizardProcessor.ProcessWizardAsync(Result.GetType(), Result);
BrowserConsoleLogWriter.Info($"Submitted nested form: {Result.GetType().FullName}");
_logger.Info($"Submitted nested form: {Result.GetType().FullName}");
}
@ -160,10 +161,10 @@
{
if (e.IsNew)
//add new orderData to orderData array
BrowserConsoleLogWriter.Info("New orderData added");
_logger.Info("New orderData added");
//await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel);
else
BrowserConsoleLogWriter.Info("orderData updated");
_logger.Info("orderData updated");
//modify orderData where orderData.Name == e.EditModel.Name
//await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel);
@ -174,21 +175,27 @@
{
//await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem);
//remove orderData from orderData array
BrowserConsoleLogWriter.Info("orderData deleted");
_logger.Info("orderData deleted");
//await UpdateDataAsync();
}
async Task UpdateDataAsync()
{
//DataSource = await NwindDataService.GetEmployeesEditableAsync();
//refresh grid
BrowserConsoleLogWriter.Info("orderData grid refreshed");
_logger.Info("orderData grid refreshed");
}
protected override void OnInitialized()
protected override Task OnInitializedAsync()
{
base.OnInitialized();
_logger = new LoggerClient<MyServiceProviders>(LogWriters.ToArray());
var myId = SessionService.User.UserId;
var companyPropertiesByOwner = ServiceProviderDataService.GetPropertiesByOwnerIdAsync(myId);
ServiceProviderDataService.GetPropertiesByOwnerIdAsync(myId, companyPropertiesByOwner =>
{
_logger.DetailConditional($"companyPropertiesByOwner count: {companyPropertiesByOwner?.Count.ToString() ?? "NULL"}");
});
return base.OnInitializedAsync();
}
}

View File

@ -212,25 +212,25 @@
public List<string> IgnoreList =
[
"ReceiverEmailAddress",
"ReceiverFullName",
"ReceiverId",
"SenderEmailAddress",
"SenderFullName",
"SenderId",
"ContextId",
"ReceiverFullName",
"ReceiverId",
"SenderEmailAddress",
"SenderFullName",
"SenderId",
"ContextId",
];
public List<TransferStatusModel> Statuses { get; set; } =
[
new(Convert.ToInt16(TransferStatusType.OrderSubmitted), "Order submitted"),
new(Convert.ToInt16(TransferStatusType.OrderConfirmed), "Order confirmed"),
new(Convert.ToInt16(TransferStatusType.AssignedToDriver), "Assigned to driver"),
new(Convert.ToInt16(TransferStatusType.DriverConfirmed), "Driver confirmed"),
new(Convert.ToInt16(TransferStatusType.DriverEnRoute), "Driver enroute"),
new(Convert.ToInt16(TransferStatusType.PassengerPickup), "Passenger in car"),
new(Convert.ToInt16(TransferStatusType.Finished), "Finished"),
new(Convert.ToInt16(TransferStatusType.UserCanceled), "User cancelled"),
new(Convert.ToInt16(TransferStatusType.AdminDenied), "Admin cancelled")
new(Convert.ToInt16(TransferStatusType.OrderConfirmed), "Order confirmed"),
new(Convert.ToInt16(TransferStatusType.AssignedToDriver), "Assigned to driver"),
new(Convert.ToInt16(TransferStatusType.DriverConfirmed), "Driver confirmed"),
new(Convert.ToInt16(TransferStatusType.DriverEnRoute), "Driver enroute"),
new(Convert.ToInt16(TransferStatusType.PassengerPickup), "Passenger in car"),
new(Convert.ToInt16(TransferStatusType.Finished), "Finished"),
new(Convert.ToInt16(TransferStatusType.UserCanceled), "User cancelled"),
new(Convert.ToInt16(TransferStatusType.AdminDenied), "Admin cancelled")
];
private MessageWizardModel _messageWizardModel = new();
@ -340,6 +340,8 @@
async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e)
{
bool success = false;
Transfer? transfer = null;
if (e.IsNew)
{
//add new orderData to orderData array
@ -350,7 +352,8 @@
{
_logger.Info("orderData updated at id " + ((Transfer)e.EditModel).Id);
success = 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
@ -365,11 +368,29 @@
// }
// }
if (success)
//if (success)
if (transfer != null)
{
//TODO: ne a teljes grid-et refresh-eljük, elég lenne csak az adott sort! - J.
await UpdateDataAsync();
UpdateDataSources(transfer);
//e.Reload = true;
}
else await UpdateAllDataAsync();
//StateHasChanged();
}
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)
@ -380,17 +401,11 @@
//await UpdateDataAsync();
}
async Task UpdateDataAsync()
public Task UpdateAllDataAsync()
{
TransferDataList = await transferDataService.GetTransfersAsync();
_logger.Info("orderData grid refreshed");
}
_logger.Info("UpdateAllDataAsync called");
protected override async Task OnInitializedAsync()
{
_logger = new LoggerClient<ManageTransfers>(LogWriters.ToArray());
devAdminSignalClient.SendMessageToServerAsync<List<Transfer>>(SignalRTags.GetTransfersAsync, response =>
devAdminSignalClient.GetAllAsync<List<Transfer>>(SignalRTags.GetTransfersAsync, response =>
{
if (response.Status == SignalResponseStatus.Error)
return;
@ -400,12 +415,22 @@
}).Forget();
//var transfers = await devAdminSignalClient.SendRequestToServerAsync<List<Transfer>>(SignalRTags.GetTransfersAsync);
//var transfers = await devAdminSignalClient.GetAllAsync<List<Transfer>>(SignalRTags.GetTransfersAsync);
//InitializeDataSources(transfers ?? []);
//InitializeDataSources(await transferDataService.GetTransfersAsync());
base.OnInitialized();
return Task.CompletedTask;
}
protected override Task OnInitializedAsync()
{
_logger = new LoggerClient<ManageTransfers>(LogWriters.ToArray());
UpdateAllDataAsync().Forget();
return base.OnInitializedAsync();
}
private void InitializeDataSources(List<Transfer> transferDataList)
@ -421,7 +446,7 @@
// bnm.Location = transfer.FromAddress;
// bnm.Subject = "Simple transfer";
AppointmentModels.Add(new AppointmentModel { StartDate = transfer.Appointment, EndDate=transfer.Appointment.AddMinutes(30), Description = $"{transfer.FullName}, {transfer.ToAddress}", Location = transfer.FromAddress, Caption = "Simple transfer" });
AppointmentModels.Add(CreateAppointmentModel(transfer));
}
_dataStorage = new DxSchedulerDataStorage
@ -444,6 +469,11 @@
};
}
public AppointmentModel CreateAppointmentModel(Transfer transfer)
{
return new AppointmentModel { SourceId = transfer.Id, StartDate = transfer.Appointment, EndDate = transfer.Appointment.AddMinutes(30), Description = $"{transfer.FullName}, {transfer.ToAddress}", Location = transfer.FromAddress, Caption = "Simple transfer" };
}
void ColumnChooserButton_Click()
{
Grid2.ShowColumnChooser();

View File

@ -403,10 +403,12 @@ namespace TIAMWebApp.Server.Controllers
[AllowAnonymous]
[HttpPost]
[Route(APIUrls.UpdateTransferRouteName)]
public async Task<bool> UpdateTransfer(Transfer transferToModify)
public async Task<Transfer> UpdateTransfer(Transfer transferToModify)
{
_logger.Info("UpdateTransfer called!");
return await _adminDal.UpdateTransferAsync(transferToModify);
await _adminDal.UpdateTransferAsync(transferToModify);
return transferToModify;
}
}

View File

@ -8,6 +8,7 @@ using MessagePack;
using MessagePack.Resolvers;
using AyCode.Services.Server.SignalRs;
using System.ServiceModel.Channels;
using TIAM.Entities.Transfers;
using TIAM.Services;
using TIAMWebApp.Server.Controllers;
@ -31,7 +32,7 @@ public class DevAdminSignalRHub(AdminDal adminDal, ServiceProviderAPIController
public override async Task OnDisconnectedAsync(Exception? exception)
{
_logger.Error($"Server OnDisconnectedAsync; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}", exception);
_logger.ErrorConditional($"Server OnDisconnectedAsync; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}", exception);
//await Groups.RemoveFromGroupAsync(Context.ConnectionId, "SignalR Users");
await base.OnDisconnectedAsync(exception);
@ -60,12 +61,20 @@ public class DevAdminSignalRHub(AdminDal adminDal, ServiceProviderAPIController
}
else if (messageTag == SignalRTags.GetPropertiesByOwnerIdAsync)
{
var ownerId = message.MessagePackTo<SignalRequestByIdMessage>().Id;
var ownerId = message!.MessagePackTo<SignalRequestByIdMessage>().Id;
var json = (await serviceProviderAPIController.GetServiceProvidersByOwnerId(ownerId)).ToJson();
await ResponseToCaller(messageTag, new SignalResponseMessage<string>(SignalResponseStatus.Success, json), requestId);
}
else if (messageTag == SignalRTags.UpdateTransferAsync)
{
var signalPostJsonDataMessage = message!.MessagePackTo<SignalPostJsonDataMessage>();
var transfer = signalPostJsonDataMessage.PostData.JsonTo<Transfer>()!;
await transferDataAPIController.UpdateTransfer(transfer);
await ResponseToCaller(messageTag, new SignalResponseMessage<string>(SignalResponseStatus.Success, transfer.ToJson()), requestId);
}
return;
}
catch (Exception ex)

View File

@ -14,7 +14,7 @@ namespace TIAMWebApp.Shared.Application.Interfaces
public interface IServiceProviderDataService
{
//17. (IServiceProviderDataService) get service providers by ownerId
public Task<Dictionary<Guid, string>?> GetPropertiesByOwnerIdAsync(Guid id);
public Task<Dictionary<Guid, string>?> GetPropertiesByOwnerIdAsync(Guid id, Action<Dictionary<Guid, string>?>? callback = null);
//13. delete service provider
public Task DeleteServiceProviderAsync(Guid serviceProviderId);

View File

@ -18,6 +18,6 @@ namespace TIAMWebApp.Shared.Application.Interfaces
Task<Transfer?> GetTransferByIdAsync(Guid id);
Task<List<Transfer>> GetTransfersAsync();
Task<bool> UpdateTransferAsync(Transfer model);
Task<Transfer?> UpdateTransferAsync(Transfer model);
}
}

View File

@ -10,6 +10,8 @@ namespace TIAMWebApp.Shared.Application.Models.PageModels
public class AppointmentModel
{
public AppointmentModel() { }
public Guid SourceId { get; set; } //pl: TransferId, stb... - J;
public int AppointmentType { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }

View File

@ -15,6 +15,7 @@ using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using TIAM.Entities.Transfers;
using TIAM.Services;
using TIAMWebApp.Shared.Application.Models.ClientSide;
using TIAMWebApp.Shared.Application.Utility;
@ -91,6 +92,24 @@ namespace TIAMWebApp.Shared.Application.Services
HubConnection.SendAsync(nameof(IAcSignalRHubClient.OnReceiveMessage), messageTag, message?.ToMessagePack(ContractlessStandardResolver.Options), requestId).Forget();
}
#region CRUD
public virtual Task<TResponse?> GetByIdAsync<TResponse>(int messageTag, Guid id) where TResponse : class
=> SendMessageToServerAsync<TResponse>(messageTag, new SignalRequestByIdMessage(id), AcDomain.NextUniqueInt32);
public virtual Task GetByIdAsync<TResponseData>(int messageTag, Guid id, Action<ISignalResponseMessage<TResponseData?>> responseCallback)
=> SendMessageToServerAsync(messageTag, new SignalRequestByIdMessage(id), responseCallback);
public virtual Task<TResponse?> GetAllAsync<TResponse>(int messageTag) where TResponse : class
=> SendMessageToServerAsync<TResponse>(messageTag);
public virtual Task GetAllAsync<TResponseData>(int messageTag, Action<ISignalResponseMessage<TResponseData?>> responseCallback)
=> SendMessageToServerAsync(messageTag, null, responseCallback);
public virtual Task<TPostData?> UpdateAsync<TPostData>(int messageTag, TPostData postData) where TPostData : class
=> SendMessageToServerAsync<TPostData>(messageTag, new SignalPostJsonDataMessage(postData), AcDomain.NextUniqueInt32);
public virtual Task UpdateAsync<TPostData>(int messageTag, TPostData postData, Action<ISignalResponseMessage<TPostData?>> responseCallback)
=> SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(postData!), responseCallback);
#endregion CRUD
public virtual Task<TResponse?> SendMessageToServerAsync<TResponse>(int messageTag) where TResponse : class
=> SendMessageToServerAsync<TResponse>(messageTag, null, AcDomain.NextUniqueInt32);
@ -128,7 +147,7 @@ namespace TIAMWebApp.Shared.Application.Services
}
public virtual Task SendMessageToServerAsync<TResponseData>(int messageTag, Action<ISignalResponseMessage<TResponseData?>> responseCallback)
=> SendMessageToServerAsync<TResponseData>(messageTag, null, responseCallback);
=> SendMessageToServerAsync(messageTag, null, responseCallback);
public virtual Task SendMessageToServerAsync<TResponseData>(int messageTag, ISignalRMessage? message, Action<ISignalResponseMessage<TResponseData?>> responseCallback)
{

View File

@ -75,21 +75,22 @@ namespace TIAMWebApp.Shared.Application.Services
}
//17.
public async Task<Dictionary<Guid, string>?> GetPropertiesByOwnerIdAsync(Guid id)
public async Task<Dictionary<Guid, string>?> GetPropertiesByOwnerIdAsync(Guid id, Action<Dictionary<Guid, string>?>? callback = null)
{
Dictionary<Guid, string>? companyPropertiesByOwner;
if (callback != null)
{
_devAdminSignalClient.GetByIdAsync<Dictionary<Guid, string>>(SignalRTags.GetPropertiesByOwnerIdAsync, id, response =>
{
if (response.Status == SignalResponseStatus.Error)
callback.Invoke(null);
//_devAdminSignalClient.SendMessageToServerAsync<Dictionary<Guid, string>>(SignalRTags.GetPropertiesByOwnerIdAsync, new SignalRequestByIdMessage(id), response =>
//{
// if (response.Status == SignalResponseStatus.Error)
// return;
_logger.DetailConditional($"companyPropertiesByOwner async: {string.Join("; ", response.ResponseData!.Values)}");
// companyPropertiesByOwner = response.ResponseData;
// if (companyPropertiesByOwner != null) _logger.DetailConditional($"companyPropertiesByOwner async: {string.Join("; ", companyPropertiesByOwner.Values)}");
//}).Forget();
callback.Invoke(response.ResponseData);
}).Forget();
}
companyPropertiesByOwner = await _devAdminSignalClient.SendMessageToServerAsync<Dictionary<Guid, string>>(SignalRTags.GetPropertiesByOwnerIdAsync, new SignalRequestByIdMessage(id));
var companyPropertiesByOwner = await _devAdminSignalClient.GetByIdAsync<Dictionary<Guid, string>>(SignalRTags.GetPropertiesByOwnerIdAsync, id);
if (companyPropertiesByOwner != null) _logger.DetailConditional($"companyPropertiesByOwner: {string.Join("; ", companyPropertiesByOwner.Values)}");
return companyPropertiesByOwner;

View File

@ -183,7 +183,7 @@ namespace TIAMWebApp.Shared.Application.Services
return response;
}
public async Task<bool> UpdateTransferAsync(Transfer model)
public async Task<Transfer?> UpdateTransferAsync(Transfer model)
{
var url = $"{Setting.ApiBaseUrl}/{APIUrls.UpdateTransfer}";
var response = await _http.PostAsJsonAsync(url, model);
@ -197,9 +197,9 @@ namespace TIAMWebApp.Shared.Application.Services
//}
if (!response.IsSuccessStatusCode)
return false;
return null;
var result = (bool)(await response.Content.ReadFromJsonAsync(typeof(bool)))!;
var result = (Transfer)(await response.Content.ReadFromJsonAsync(typeof(Transfer)))!;
return result;
}