Adding
This commit is contained in:
+102
@@ -0,0 +1,102 @@
|
||||
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<TRequest> : 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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// NOTE: This will only work if the proper configuration has been setup.
|
||||
/// </summary>
|
||||
/// <param name="workItem"></param>
|
||||
/// <returns></returns>
|
||||
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<TRequest>(workItem.SerializedPayload);
|
||||
deserilizedObject.ResponseItems = RemoveDispatcherReturnResponse(deserilizedObject.ResponseItems);
|
||||
deserilizedObject.ResponseItems.Add(responseItem);
|
||||
workItem.SerializedPayload = JsonConvert.SerializeObject(deserilizedObject);
|
||||
return workItem;
|
||||
}
|
||||
|
||||
private List<ResponseItem> RemoveDispatcherReturnResponse(List<ResponseItem> responseItems)
|
||||
{
|
||||
var toRemove = new List<ResponseItem>();
|
||||
if (responseItems == null)
|
||||
{
|
||||
return toRemove;
|
||||
}
|
||||
|
||||
foreach (var responseItem in responseItems)
|
||||
{
|
||||
try
|
||||
{
|
||||
var existingReturnResponse = JsonConvert.DeserializeObject<DispatcherReturnResponse>(responseItem.ResponsePayload);
|
||||
toRemove.Add(responseItem);
|
||||
}
|
||||
catch
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var responseItem in toRemove)
|
||||
{
|
||||
responseItems.Remove(responseItem);
|
||||
}
|
||||
|
||||
return responseItems;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user