102 lines
3.3 KiB
C#
102 lines
3.3 KiB
C#
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;
|
|
}
|
|
} |