using System; using System.Collections.Generic; using Newtonsoft.Json; using LCU.Library.Internal.ApiResponse.Models; using LCU.Library.Internal.DispatcherModels.Enums; using LCU.Library.Internal.DispatcherModels.Entities; using LCU.Library.Internal.DispatcherModels.Models; namespace LCU.Api.Internal.DispatcherSharedLib.BuilderServices; public class ActionService : IActionService where TRequest : ReturnResponse { private readonly string Url; private readonly HttpMethodType HttpMethodType; private readonly ActionType ActionType; public ActionService(string url, HttpMethodType httpMethodType, ActionType actionType) { Url = url; HttpMethodType = httpMethodType; ActionType = actionType; } /// /// NOTE: This will only work if the proper configuration has been setup. /// /// /// public WorkItem AddUrlAndHttpMethod(WorkItem workItem) { if (Url is null) { throw new ArgumentNullException("Url has not been set by configuration."); } workItem.Url = Url; workItem.HttpMethod = HttpMethodType; return workItem; } public WorkItem CreateNewWorkitem(object request, WorkItemDetails workItemDetails) { var workItemRequest = (TRequest)request; return new WorkItem { WorkItemId = workItemDetails.WorkItemId, JobId = workItemDetails.JobId, Name = workItemDetails.Name, Description = workItemDetails.Description, Order = workItemDetails.Order, Url = "", HttpMethod = HttpMethodType.Unknown, SerializedPayload = JsonConvert.SerializeObject(workItemRequest), ActionType = ActionType, CancelJobOnFailure = workItemDetails.CancelJobOnFailure, CancelJobLimit = workItemDetails.CancelJobLimit, CanceledJobCounter = 0 }; } public Type GetActionType() { return typeof(TRequest); } public WorkItem AddWorkItemReturnResponse(WorkItem workItem, ResponseItem responseItem) { var deserilizedObject = JsonConvert.DeserializeObject(workItem.SerializedPayload); deserilizedObject.ResponseItems = RemoveDispatcherReturnResponse(deserilizedObject.ResponseItems); deserilizedObject.ResponseItems.Add(responseItem); workItem.SerializedPayload = JsonConvert.SerializeObject(deserilizedObject); return workItem; } private List RemoveDispatcherReturnResponse(List responseItems) { var toRemove = new List(); if (responseItems == null) { return toRemove; } foreach (var responseItem in responseItems) { try { var existingReturnResponse = JsonConvert.DeserializeObject(responseItem.ResponsePayload); toRemove.Add(responseItem); } catch { continue; } } foreach (var responseItem in toRemove) { responseItems.Remove(responseItem); } return responseItems; } }