Files
monorepo/LCU.API.Internal.Dispatcher/LCU.Api.Internal.DispatcherSharedLib/BuilderServices/ActionService.cs
T
2026-03-24 15:26:03 -05:00

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;
}
}