using System.Collections.Generic; using System.Threading; using LCU.Api.Internal.Dispatcher.Configurations; using LCU.Api.Internal.MaidBotLib.Models; using LCU.Library.Internal.DispatcherModels.Enums; using LCU.Library.Internal.DispatcherModels.Models.Requests; using MassTransit; using Newtonsoft.Json; using ApiResponse = LCU.Library.Internal.ApiResponse.Models; namespace LCU.Api.Internal.Dispatcher.Services.QueueServices { public class QueueDetermineOperationService : IQueueDetermineOperationService { private readonly ISendEndpoint _sendEndpoint; private readonly ReceiveEndpointConfigurations _queueReceiveEndpointsConfiguration; public QueueDetermineOperationService(IBusControl busControl, ReceiveEndpointConfigurations queueReceiveEndpointsConfiguration) { _queueReceiveEndpointsConfiguration = queueReceiveEndpointsConfiguration; _sendEndpoint = busControl.GetSendEndpoint(_queueReceiveEndpointsConfiguration.DetermineOperationReceiveEndpoint.ReceiveEndpointUri).Result; } public async Task QueueDetermineOperation(Job job, WorkItem workItem, DetermineOperationType type) { try { var request = new DetermineOperationRequest { CurrentJob = job, CurrentWorkItem = workItem, DetermineOperationType = type }; var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30)); await _sendEndpoint.Send(request, cancellationTokenSource.Token); } catch (Exception exception) { Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) .Fatal(exception, $"Failed to queue determine operation request. JobName: {job.Name} WorkItemId: {workItem.WorkItemId}"); throw new ServiceException($"Failed to queue determine operation request. JobName: {job.Name} WorkItemId: {workItem.WorkItemId}"); } } } }