Files
Caspian.WorkflowFramework/Caspian.WorkflowFramework.Package/Utility/ConversionExtensions.cs
T
Behzad Alizadeh 83738f809b Consider sessionId in publish event +
Upgrade package to 1.1.0-preview.21
2026-07-22 10:52:25 +03:30

169 lines
6.8 KiB
C#

using Caspian.WorkflowFramework.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Threading.Tasks;
namespace Caspian.WorkflowFramework.Utility
{
public static class ConversionExtensions
{
public static WorkflowModel ConvertToWorkflowModel(this Dictionary<string, object?> dictionary)
{
var workflowModel = new WorkflowModel();
if (dictionary == null || dictionary.Count == 0)
return workflowModel;
// قبل از تبدیل به مدل خروجی، sessionId حذف می‌شود.
dictionary.RemoveSessionId();
//Map dictionary values to WorkflowModel properties
workflowModel.InstanceId = dictionary.ContainsKey(nameof(workflowModel.InstanceId))
? dictionary[nameof(workflowModel.InstanceId)]?.ToString()
: null;
workflowModel.InstanceMode = dictionary.ContainsKey(nameof(workflowModel.InstanceMode))
? dictionary[nameof(workflowModel.InstanceMode)]?.ToString()
: null;
workflowModel.Name = dictionary.ContainsKey(nameof(workflowModel.Name))
? dictionary[nameof(workflowModel.Name)]?.ToString()
: null;
workflowModel.Title = dictionary.ContainsKey(nameof(workflowModel.Title))
? dictionary[nameof(workflowModel.Title)]?.ToString()
: null;
workflowModel.IsComplete = dictionary.ContainsKey(nameof(workflowModel.IsComplete))
? bool.TryParse(dictionary[nameof(workflowModel.IsComplete)]?.ToString(), out var isComplete) && isComplete
: false;
workflowModel.UserId = dictionary.ContainsKey(nameof(workflowModel.UserId))
? long.TryParse(dictionary[nameof(workflowModel.UserId)]?.ToString(), out var userId) ? userId : (long?)null
: null;
//CurrentPageData
if (dictionary.TryGetValue(nameof(workflowModel.CurrentPageData), out var currentPageDataObj) &&
currentPageDataObj is not null)
{
switch (currentPageDataObj)
{
case JsonElement je:
workflowModel.CurrentPageData = je;
break;
case JsonNode node:
// .NET 6+
workflowModel.CurrentPageData = JsonSerializer.SerializeToElement(node);
break;
case string s:
// اگر به صورت string JSON ذخیره شده
workflowModel.CurrentPageData = JsonSerializer.Deserialize<JsonElement>(s);
break;
default:
// هر نوع دیگری: serialize و تبدیل به JsonElement
workflowModel.CurrentPageData = JsonSerializer.SerializeToElement(currentPageDataObj);
break;
}
}
else
{
workflowModel.CurrentPageData = null;
}
//NextPageData
if (dictionary.TryGetValue(nameof(workflowModel.NextPageData), out var nextPageDataObj) &&
nextPageDataObj is not null)
{
switch (nextPageDataObj)
{
case JsonElement je:
workflowModel.NextPageData = je;
break;
case JsonNode node:
// .NET 6+
workflowModel.NextPageData = JsonSerializer.SerializeToElement(node);
break;
case string s:
// اگر به صورت string JSON ذخیره شده
workflowModel.NextPageData = JsonSerializer.Deserialize<JsonElement>(s);
break;
default:
// هر نوع دیگری: serialize و تبدیل به JsonElement
workflowModel.NextPageData = JsonSerializer.SerializeToElement(nextPageDataObj);
break;
}
}
else
{
workflowModel.NextPageData = null;
}
workflowModel.NextPageUrl = dictionary.ContainsKey(nameof(workflowModel.NextPageUrl))
? dictionary[nameof(workflowModel.NextPageUrl)]?.ToString()
: null;
workflowModel.PageNumber = dictionary.ContainsKey(nameof(workflowModel.PageNumber))
? int.TryParse(dictionary[nameof(workflowModel.PageNumber)]?.ToString(), out var pageNumber) ? pageNumber : (int?)null
: null;
workflowModel.TotalPage = dictionary.ContainsKey(nameof(workflowModel.TotalPage))
? int.TryParse(dictionary[nameof(workflowModel.TotalPage)]?.ToString(), out var totalPage) ? totalPage : (int?)null
: null;
workflowModel.NextPageEventName = dictionary.ContainsKey(nameof(workflowModel.NextPageEventName))
? dictionary[nameof(workflowModel.NextPageEventName)]?.ToString()
: null;
//WorkflowStash
if (dictionary.TryGetValue(nameof(workflowModel.WorkflowStash), out var workflowStashObj) &&
workflowStashObj is not null)
{
switch (workflowStashObj)
{
case JsonElement je:
workflowModel.WorkflowStash = je;
break;
case JsonNode node:
// .NET 6+
workflowModel.WorkflowStash = JsonSerializer.SerializeToElement(node);
break;
case string s:
// اگر به صورت string JSON ذخیره شده
workflowModel.WorkflowStash = JsonSerializer.Deserialize<JsonElement>(s);
break;
default:
// هر نوع دیگری: serialize و تبدیل به JsonElement
workflowModel.WorkflowStash = JsonSerializer.SerializeToElement(workflowStashObj);
break;
}
}
else
{
workflowModel.WorkflowStash = null;
}
workflowModel.WorkflowPhase =
dictionary.TryGetValue(nameof(workflowModel.WorkflowPhase), out var phaseObj) &&
phaseObj != null &&
Enum.TryParse(typeof(WorkflowPhase), phaseObj.ToString(), out var phase)
? (WorkflowPhase)phase
: WorkflowPhase.Client;
return workflowModel;
}
}
}