using AyCode.Core.Extensions; using AyCode.Core.Helpers; using AyCode.Core.Loggers; using AyCode.Services.Server.SignalRs; using AyCode.Services.SignalRs; using DevExpress.Utils.About; using FruitBank.Common; using FruitBank.Common.Dtos; using FruitBank.Common.Entities; using FruitBank.Common.Interfaces; using FruitBank.Common.Models; using FruitBank.Common.SignalRs; using FruitBankHybrid.Shared.Databases; using FruitBankHybrid.Shared.Services.Loggers; using Mango.Nop.Core.Dtos; using Mango.Nop.Core.Models; using MessagePack.Resolvers; using Microsoft.AspNetCore.SignalR.Client; using Nop.Core.Domain.Customers; using System.Collections.ObjectModel; using System.ServiceModel.Channels; using Mango.Nop.Core.Entities; namespace FruitBankHybrid.Shared.Services.SignalRs { public class FruitBankSignalRClient : AcSignalRClientBase, IFruitBankDataControllerClient, ICustomOrderSignalREndpointClient, IStockSignalREndpointClient { public FruitBankSignalRClient( /*IServiceProvider serviceProvider, */ IEnumerable logWriters) : base($"{FruitBankConstClient.BaseUrl}/{FruitBankConstClient.DefaultHubName}", new LoggerClient(nameof(FruitBankSignalRClient), logWriters.ToArray())) { //var hubConnection = new HubConnectionBuilder() // .WithUrl("fullHubName") // .WithAutomaticReconnect() // .WithStatefulReconnect() // .WithKeepAliveInterval(TimeSpan.FromSeconds(60)) // .WithServerTimeout(TimeSpan.FromSeconds(120)) ConstHelper.NameByValue(0); } /// /// MessageTag, JSON /// public event Func OnMessageReceived = null!; protected override async Task MessageReceived(int messageTag, byte[] messageBytes) { var jsonMessage = messageBytes.MessagePackTo(ContractlessStandardResolver.Options); await OnMessageReceived(messageTag, jsonMessage.ResponseData); } private void SendMessageToAllClients(int messageTag, string message) { if (messageTag == SignalRTags.NotificationReceived) { Logger.Info(message); } } public Task?> GetMeasuringModels() => GetAllAsync>(SignalRTags.GetMeasuringModels); public Task?> GetPartners() => GetAllAsync>(SignalRTags.GetPartners); #region Partner public Task GetPartnerById(int id) => GetByIdAsync(SignalRTags.GetPartnerById, id); public Task UpdatePartner(Partner partner) => PostDataAsync(SignalRTags.UpdatePartner, partner); #endregion Partner #region Shipping public Task?> GetShippings() => GetAllAsync>(SignalRTags.GetShippings); public Task?> GetNotMeasuredShippings() => GetAllAsync>(SignalRTags.GetNotMeasuredShippings); public Task GetShippingById(int id) => GetByIdAsync(SignalRTags.GetShippingById, id); public Task AddShipping(Shipping shipping) => PostDataAsync(SignalRTags.AddShipping, shipping); public Task UpdateShipping(Shipping shipping) => PostDataAsync(SignalRTags.UpdateShipping, shipping); public Task?> ProcessAndSaveFullShippingJson(string fullShippingJson, int customerId) => GetAllAsync>(SignalRTags.ProcessAndSaveFullShippingJson, [fullShippingJson, customerId]); #endregion Shipping #region ShippingItem public Task?> GetShippingItems() => GetAllAsync>(SignalRTags.GetShippingItems); public Task?> GetShippingItemsByDocumentId(int shippingDocumentId) => GetAllAsync>(SignalRTags.GetShippingItemsByDocumentId, [shippingDocumentId]); public Task?> GetShippingItemsByShippingId(int shippingId) => GetAllAsync>(SignalRTags.GetShippingItemsByShippingId, [shippingId]); public Task?> GetShippingItemsByPartnerId(int partnerId) => GetAllAsync>(SignalRTags.GetShippingItemsByPartnerId, [partnerId]); public Task GetShippingItemById(int id) => GetByIdAsync(SignalRTags.GetShippingItemById, id); public Task AddShippingItem(ShippingItem shippingItem) => PostDataAsync(SignalRTags.AddShippingItem, shippingItem); public Task UpdateShippingItem(ShippingItem shippingItem) => PostDataAsync(SignalRTags.UpdateShippingItem, shippingItem); public Task UpdateMeasuredShippingItem(ShippingItem shippingItem) => PostDataAsync(SignalRTags.UpdateMeasuredShippingItem, shippingItem); #endregion ShippingItem #region ShippingItemPallet public Task?> GetShippingItemPallets() => GetAllAsync>(SignalRTags.GetShippingItemPallets); public Task AddShippingItemPallet(ShippingItemPallet shippingItemPallet) => PostDataAsync(SignalRTags.AddShippingItemPallet, shippingItemPallet); public Task UpdateShippingItemPallet(ShippingItemPallet shippingItemPallet) => PostDataAsync(SignalRTags.UpdateShippingItemPallet, shippingItemPallet); public Task AddOrUpdateMeasuredShippingItemPallet(ShippingItemPallet shippingItemPallet) => PostDataAsync(SignalRTags.AddOrUpdateMeasuredShippingItemPallet, shippingItemPallet); public Task AddOrUpdateMeasuredShippingItemPallets(List shippingItemPallets) => PostDataAsync, ShippingItem>(SignalRTags.AddOrUpdateMeasuredShippingItemPallets, shippingItemPallets); #endregion ShippingItemPallet #region ShippingDocument public Task?> GetShippingDocuments() => GetAllAsync>(SignalRTags.GetShippingDocuments); public Task GetShippingDocumentById(int id) => GetByIdAsync(SignalRTags.GetShippingDocumentById, id); public Task?> GetShippingDocumentsByShippingId(int shippingId) => GetAllAsync>(SignalRTags.GetShippingDocumentsByShippingId, [shippingId]); public Task?> GetShippingDocumentsByProductId(int productId) => GetAllAsync>(SignalRTags.GetShippingDocumentsByShippingId, [productId]); public Task?> GetShippingDocumentsByPartnerId(int partnerId) => GetAllAsync>(SignalRTags.GetShippingDocumentsByShippingId, [partnerId]); public Task AddShippingDocument(ShippingDocument shippingDocument) => PostDataAsync(SignalRTags.AddShippingDocument, shippingDocument); public Task UpdateShippingDocument(ShippingDocument shippingDocument) => PostDataAsync(SignalRTags.UpdateShippingDocument, shippingDocument); #endregion ShippingDocument #region Customer public Task?> GetMeasuringUsers() => GetAllAsync>(SignalRTags.GetMeasuringUsers); public Task?> GetCustomerRolesByCustomerId(int customerId) => GetAllAsync>(SignalRTags.GetCustomerRolesByCustomerId, [customerId]); #endregion Customer #region Product public Task?> GetProductDtoTableItems() => GetAllAsync>(SignalRTags.GetProductDtos); public Task?> GetProductDtos() => GetAllAsync>(SignalRTags.GetProductDtos); //public Task?> GetAllMeasuringProductDtos() // => GetAllAsync>(SignalRTags.GetAllMeasuringProductDtos); public Task GetProductDtoById(int productId) => GetByIdAsync(SignalRTags.GetMeasuringProductDtoById, productId); #endregion Product #region Authenticate public Task LoginMeasuringUser(string customerEmail, string customerPassword) => LoginMeasuringUser(new MgLoginModelRequest(customerEmail, customerPassword)); public Task LoginMeasuringUser(MgLoginModelRequest loginModelRequest) => PostDataAsync(SignalRTags.AuthenticateUser, loginModelRequest); #endregion Authenticate #region Orders public Task?> GetAllOrderDtoTableItems() => GetAllAsync>(SignalRTags.GetAllOrderDtos); public Task?> GetAllOrderDtos() => GetAllAsync>(SignalRTags.GetAllOrderDtos); public Task GetOrderDtoById(int orderId) => GetByIdAsync(SignalRTags.GetOrderDtoById, orderId); public Task?> GetPendingOrderDtos() => GetAllAsync>(SignalRTags.GetPendingOrderDtos); public Task?> GetPendingOrderDtosForMeasuring(int lastDaysCount) => GetAllAsync>(SignalRTags.GetPendingOrderDtosForMeasuring, [lastDaysCount]); public Task?> GetAllOrderDtoByIds(int[] orderIds) => GetAllAsync>(SignalRTags.GetAllOrderDtoByIds, [orderIds]); public Task?> GetAllOrderItemDtos() => GetAllAsync>(SignalRTags.GetAllOrderItemDtos); public Task AddOrUpdateMeasuredOrderItemPallet(OrderItemPallet orderItemPallet) => PostDataAsync(SignalRTags.AddOrUpdateMeasuredOrderItemPallet, orderItemPallet); public Task StartMeasuring(int orderId, int userId) => GetByIdAsync(SignalRTags.StartMeasuring, [orderId, userId]); public Task SetOrderStatusToComplete(int orderId, int revisorId) => GetByIdAsync(SignalRTags.SetOrderStatusToComplete, [orderId, revisorId]); public Task?> GetAllOrderDtoByProductId(int productId) => GetAllAsync>(SignalRTags.GetAllOrderDtoByProductId, [productId]); public Task GetOrderItemDtoById(int orderItemId) => GetByIdAsync(SignalRTags.GetOrderItemDtoById, [orderItemId]); public Task?> GetAllOrderItemDtoByOrderId(int orderId) => GetAllAsync>(SignalRTags.GetAllOrderItemDtoByOrderId, [orderId]); public Task?> GetAllOrderItemDtoByProductId(int productId) => GetAllAsync>(SignalRTags.GetAllOrderItemDtoByProductId, [productId]); public Task?> GetAllOrderItemPallets() => GetAllAsync>(SignalRTags.GetAllOrderItemPallets); public Task GetOrderItemPalletById(int orderItemPalletId) => GetByIdAsync(SignalRTags.GetOrderItemPalletById, [orderItemPalletId]); public Task?> GetAllOrderItemPalletByOrderItemId(int orderItemId) => GetAllAsync>(SignalRTags.GetAllOrderItemPalletByOrderItemId, [orderItemId]); public Task?> GetAllOrderItemPalletByOrderId(int orderId) => GetAllAsync>(SignalRTags.GetAllOrderItemPalletByOrderId, [orderId]); public Task?> GetAllOrderItemPalletByProductId(int productId) => GetAllAsync>(SignalRTags.GetAllOrderItemPalletByProductId, [productId]); public Task?> GetStockQuantityHistoryDtos() => GetAllAsync>(SignalRTags.GetStockQuantityHistoryDtos); public Task?> GetStockQuantityHistoryDtosByProductId(int productId) => GetAllAsync>(SignalRTags.GetStockQuantityHistoryDtosByProductId, [productId]); #endregion Orders public async Task?> GetGenericAttributeDtosByEntityIdAndKeyGroup(int productId, string keyGroup, int storeId) { throw new NotImplementedException(); } public async Task AddGenericAttributeDto(GenericAttributeDto genericAttributeDto) { throw new NotImplementedException(); } public async Task UpdateGenericAttributeDto(GenericAttributeDto genericAttributeDto) { throw new NotImplementedException(); } public Task?> GetStockTakings() => GetAllAsync>(SignalRTags.GetStockTakings); public async Task?> GetStockTakingsByProductId(int productId) { throw new NotImplementedException(); } public Task AddStockTaking(StockTaking stockTaking) => PostDataAsync(SignalRTags.AddStockTaking, stockTaking); public async Task UpdateStockTaking(StockTaking stockTaking) { throw new NotImplementedException(); } public Task?> GetStockTakingItems() => GetAllAsync>(SignalRTags.GetStockTakingItems); public Task GetStockTakingItemsById(int stockTakingItemId) => GetByIdAsync(SignalRTags.GetStockTakingItemsById, [stockTakingItemId]); public async Task?> GetStockTakingItemsByProductId(int productId) { throw new NotImplementedException(); } public async Task?> GetStockTakingItemsByStockTakingId(int stockTakingId) { throw new NotImplementedException(); } public async Task AddStockTakingItem(StockTakingItem stockTakingItem) { throw new NotImplementedException(); } public async Task UpdateStockTakingItem(StockTakingItem stockTakingItem) { throw new NotImplementedException(); } public async Task?> GetStockTakingItemPallets() { throw new NotImplementedException(); } public async Task?> GetStockTakingItemPalletsByProductId(int productId) { throw new NotImplementedException(); } public async Task AddStockTakingItemPallet(StockTakingItemPallet stockTakingItemPallet) { throw new NotImplementedException(); } public async Task UpdateStockTakingItemPallet(StockTakingItemPallet stockTakingItemPallet) { throw new NotImplementedException(); } } }