Refactor SignalR handling; add stock history tab

Refactored SignalR message handling to use strongly-typed SignalResponseDataMessage objects instead of JSON strings, updating event signatures and deserialization logic in MainLayout, MeasuringOut, and FruitBankSignalRClient. Added a new "Stock quantity changes" tab for administrators in GridProductDtoTemplate. Also added Microsoft.Extensions.ObjectPool package to the project.
This commit is contained in:
Loretta 2025-12-14 01:45:12 +01:00
parent ba05b5f37e
commit 80a1ce6a44
5 changed files with 20 additions and 12 deletions

View File

@ -37,6 +37,12 @@
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i, productId)">
<DxTabPage Text="Készlet mennyiség változások" Visible="@LoggedInModel.IsAdministrator">
@{
var contextIds = new[] { (object)productDto.Id };
<GridStockQuantityHistoryDtoTemplate ContextIds="@(contextIds)" ParentDataItem="@productDto" />
}
</DxTabPage>
<DxTabPage Text="Rendelések melyben megtalálható" Visible="@LoggedInModel.IsAdministrator">
@{
//GetOrderDtosFromDbAsync(productId).Forget();

View File

@ -65,11 +65,11 @@ public partial class MainLayout : LayoutComponentBase
}
}
private async Task SignalRClientOnMessageReceived(int messageTag, string? jsonMessage)
private async Task SignalRClientOnMessageReceived(int messageTag, SignalResponseDataMessage? responseDataMessage)
{
if (messageTag != SignalRTags.NotificationReceived || !LoggedInModel.IsLoggedIn) return;
var notificationMessage = jsonMessage?.JsonTo<SignalRMessageToClientWithText<OrderDto>>();
var notificationMessage = responseDataMessage?.GetResponseData<SignalRMessageToClientWithText<OrderDto>>();
if (notificationMessage == null)
{
_logger.Error($"notificationMessage == null");

View File

@ -1,5 +1,6 @@
using AyCode.Core.Extensions;
using AyCode.Core.Loggers;
using AyCode.Services.SignalRs;
using DevExpress.Blazor;
using FruitBank.Common.Dtos;
using FruitBank.Common.Entities;
@ -51,14 +52,14 @@ namespace FruitBankHybrid.Shared.Pages
await base.OnInitializedAsync();
}
private async Task SignalRClientOnMessageReceived(int messageTag, string? jsonMessage)
private async Task SignalRClientOnMessageReceived(int messageTag, SignalResponseDataMessage? responseDataMessage)
{
if (!LoggedInModel.IsLoggedIn) return;
if (messageTag != SignalRTags.SendOrderItemDeleted && messageTag != SignalRTags.SendOrderChanged && messageTag != SignalRTags.SendOrderItemChanged &&
messageTag != SignalRTags.SendOrderItemPalletChanged && messageTag != SignalRTags.SendProductChanged) return;
_logger.DebugConditional($"SignalRClientOnMessageReceived received. {jsonMessage}");
_logger.DebugConditional($"SignalRClientOnMessageReceived received. {responseDataMessage}");
OrderDto? orderDto;
OrderItem? orderItem;
@ -67,7 +68,7 @@ namespace FruitBankHybrid.Shared.Pages
switch (messageTag)
{
case SignalRTags.SendOrderItemDeleted:
orderItem = jsonMessage?.JsonTo<OrderItem>();
orderItem = responseDataMessage?.GetResponseData<OrderItem>();
if (orderItem == null) break;
lock (_lock)
@ -79,7 +80,7 @@ namespace FruitBankHybrid.Shared.Pages
await InvokeAsync(StateHasChanged);
return;
case SignalRTags.SendOrderChanged:
orderDto = jsonMessage?.JsonTo<OrderDto>();
orderDto = responseDataMessage?.GetResponseData<OrderDto>();
if (orderDto == null) break;
if (orderDto.DateOfReceipt == null) return;
@ -104,7 +105,7 @@ namespace FruitBankHybrid.Shared.Pages
await InvokeAsync(StateHasChanged);
return;
case SignalRTags.SendOrderItemChanged:
orderItemDto = jsonMessage?.JsonTo<OrderItemDto>();
orderItemDto = responseDataMessage?.GetResponseData<OrderItemDto>();
if (orderItemDto == null) break;
lock (_lock)
@ -123,7 +124,7 @@ namespace FruitBankHybrid.Shared.Pages
await InvokeAsync(StateHasChanged);
return;
case SignalRTags.SendOrderItemPalletChanged:
var orderItemPallet = jsonMessage?.JsonTo<OrderItemPallet>();
var orderItemPallet = responseDataMessage?.GetResponseData<OrderItemPallet>();
if (orderItemPallet == null) break;
lock (_lock)
@ -143,7 +144,7 @@ namespace FruitBankHybrid.Shared.Pages
await InvokeAsync(StateHasChanged);
return;
case SignalRTags.SendProductChanged:
var productDto = jsonMessage?.JsonTo<ProductDto>();
var productDto = responseDataMessage?.GetResponseData<ProductDto>();
if (productDto == null) break;
await InvokeAsync(StateHasChanged);

View File

@ -40,13 +40,13 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
/// <summary>
/// MessageTag, JSON
/// </summary>
public event Func<int, string?, Task> OnMessageReceived = null!;
public event Func<int, SignalResponseDataMessage?, Task> OnMessageReceived = null!;
protected override async Task MessageReceived(int messageTag, byte[] messageBytes)
{
var jsonMessage = messageBytes.MessagePackTo<SignalResponseJsonMessage>(ContractlessStandardResolver.Options);
var responseDataMessage = messageBytes.BinaryTo<SignalResponseDataMessage>();
await OnMessageReceived(messageTag, jsonMessage.ResponseData);
await OnMessageReceived(messageTag, responseDataMessage);
}
private void SendMessageToAllClients(int messageTag, string message)

View File

@ -90,6 +90,7 @@
<ItemGroup>
<PackageReference Include="DevExpress.Data" Version="25.1.3" />
<PackageReference Include="Microsoft.Extensions.ObjectPool" Version="10.0.1" />
<!--<PackageReference Include="DevExpress.Maui.Controls" Version="25.1.3" />
<PackageReference Include="DevExpress.Maui.Editors" Version="25.1.3" />
<PackageReference Include="DevExpress.Maui.CollectionView" Version="25.1.3" />-->