using AyCode.Core.Loggers; using AyCode.Services.SignalRs; using FruitBank.Common.Dtos; using FruitBank.Common.Entities; using FruitBank.Common.Interfaces; using FruitBank.Common.Server.Interfaces; using FruitBank.Common.SignalRs; using Mango.Nop.Core.Loggers; using Nop.Core; using Nop.Core.Domain.Orders; using Nop.Plugin.Misc.FruitBankPlugin.Controllers; using Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers; public class CustomOrderSignalREndpoint(FruitBankDbContext ctx, IWorkContext workContext, IEnumerable logWriters) : ICustomOrderSignalREndpointServer { private readonly ILogger _logger = new Logger(logWriters.ToArray()); [SignalR(SignalRTags.GetAllOrderDtos)] public async Task> GetAllOrderDtos() { return await ctx.OrderDtos.GetAll(true).ToListAsync(); } [SignalR(SignalRTags.GetOrderDtoById)] public async Task GetOrderDtoById(int orderId) { return await ctx.OrderDtos.GetByIdAsync(orderId, true); } [SignalR(SignalRTags.GetPendingOrderDtos)] public async Task> GetPendingOrderDtos() { return await ctx.OrderDtos.GetAllByOrderStatus(OrderStatus.Pending).ToListAsync(); } [SignalR(SignalRTags.GetAllOrderDtoByIds)] public async Task> GetAllOrderDtoByIds(int[] orderIds) { return await ctx.OrderDtos.GetAllByIds(orderIds).ToListAsync(); } [SignalR(SignalRTags.StartMeasuring)] public async Task StartMeasuring(int orderId, int userId) { _logger.Detail($"StartMeasuring invoked; orderId: {orderId}; userId: {userId}"); if (!await ctx.StartMeasuringSafeAsync(orderId, userId)) return null; return await ctx.OrderDtos.GetByIdAsync(orderId, true); } [SignalR(SignalRTags.SetOrderStatusToComplete)] public async Task SetOrderStatusToComplete(int orderId, int revisorId) { _logger.Detail($"SetOrderStatusToComplete invoked; orderId: {orderId}; revisorId: {revisorId}"); if (!await ctx.SetOrderStatusToCompleteSafeAsync(orderId, revisorId)) return null; return await ctx.OrderDtos.GetByIdAsync(orderId, true); } [SignalR(SignalRTags.AddOrUpdateMeasuredOrderItemPallet)] public async Task AddOrUpdateMeasuredOrderItemPallet(OrderItemPallet orderItemPallet) { ArgumentNullException.ThrowIfNull(orderItemPallet); _logger.Detail($"AddOrUpdateMeasuredOrderItemPallet invoked; {orderItemPallet}"); if (!await ctx.AddOrUpdateOrderItemPalletSafeAsync(orderItemPallet)) return null; return await ctx.OrderItemPallets.GetByIdAsync(orderItemPallet.Id, false); } //[SignalR(SignalRTags.AddOrderItemPallet)] //public async Task AddOrderItemPallet(OrderItemPallet orderItemPallet) //{ // ArgumentNullException.ThrowIfNull(orderItemPallet); // _logger.Detail($"AddOrderItemPallet invoked; {orderItemPallet}"); // if (!await ctx.AddOrderItemPalletSafeAsync(orderItemPallet)) return null; // return await ctx.OrderItemPallets.GetByIdAsync(orderItemPallet.Id, false); //} //[SignalR(SignalRTags.UpdateOrderItemPallet)] //public async Task UpdateOrderItemPallet(OrderItemPallet orderItemPallet) //{ // ArgumentNullException.ThrowIfNull(orderItemPallet); // _logger.Detail($"UpdateOrderItemPallet invoked; {orderItemPallet}"); // if (!await ctx.UpdateOrderItemPalletSafeAsync(orderItemPallet)) return null; // return await ctx.OrderItemPallets.GetByIdAsync(orderItemPallet.Id, false); //} //[SignalR(SignalRTags.AddOrUpdateMeasuredOrderItemPallets)] //public async Task AddOrUpdateMeasuredOrderItemPallets(List orderItemPallets) //{ // // ArgumentNullException.ThrowIfNull(orderItemPallets); // // _logger.Detail($"AddOrUpdateMeasuredOrderItemPallets invoked; count: {orderItemPallets.Count}"); // // if (orderItemPallets.Count == 0) return null; // // var shippingItemId = orderItemPallets.FirstOrDefault()!.ShippingItemId; // // if (shippingItemId <= 0 || orderItemPallets.Any(x => x.ShippingItemId != shippingItemId)) return null; // // var shippingItem = await ctx.ShippingItems.GetByIdAsync(shippingItemId, false); // // shippingItem.orderItemPallets = orderItemPallets.Where(sip => sip.IsValidMeasuringValues(shippingItem.IsMeasurable)).ToList(); // // return await UpdateMeasuredShippingItem(shippingItem); // return null; //} //[SignalR(SignalRTags.AddOrUpdateMeasuredOrderItemPallet)] //public async Task AddOrUpdateMeasuredOrderItemPallet(OrderItemPallet orderItemPallet) //{ // ArgumentNullException.ThrowIfNull(orderItemPallet); // _logger.Detail($"AddOrUpdateMeasuredOrderItemPallet invoked; {orderItemPallet}"); // if (!await ctx.AddOrUpdateOrderItemPalletSafeAsync(orderItemPallet)) return null; // return await ctx.OrderItemPallets.GetByIdAsync(orderItemPallet.Id, false); //} }