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); } [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.SetOrderStatusToComplete)] public async Task SetOrderStatusToComplete(int orderId) { _logger.Detail($"SetOrderStatusToComplete invoked; orderId: {orderId}"); if (!await ctx.SetOrderStatusToCompleteSafe(orderId)) return null; return await ctx.OrderDtos.GetByIdAsync(orderId); } [SignalR(SignalRTags.AddOrUpdateMeasuredOrderItemPallet)] public async Task AddOrUpdateMeasuredOrderItemPallet(OrderItemPallet orderItemPallet) { ArgumentNullException.ThrowIfNull(orderItemPallet); var customer = await workContext.GetCurrentCustomerAsync(); _logger.Detail($"AddOrUpdateMeasuredOrderItemPallet invoked; {orderItemPallet}; CustomerId: {customer?.Id}"); 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); //} }