Normalize NextPageData & CurrentPageData formatting

This commit is contained in:
Behzad Alizadeh
2025-12-10 12:38:09 +03:30
parent 9b5412f33e
commit df027b61ca
5 changed files with 78 additions and 27 deletions
@@ -1,9 +1,10 @@
using System; using JetBrains.Annotations;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations;
namespace Caspian.WorkflowFramework.Models namespace Caspian.WorkflowFramework.Models
{ {
@@ -33,7 +34,7 @@ namespace Caspian.WorkflowFramework.Models
/// <summary> /// <summary>
/// داده صفحه جاری /// داده صفحه جاری
/// </summary> /// </summary>
public string? CurrentPageData { get; set; } public JsonElement? CurrentPageData { get; set; }
/// <summary> /// <summary>
/// داده صفحه بعد /// داده صفحه بعد
@@ -41,7 +42,7 @@ namespace Caspian.WorkflowFramework.Models
/// فعلا استفاده ای نداریم /// فعلا استفاده ای نداریم
/// </remark> /// </remark>
/// </summary> /// </summary>
public string? NextPageData { get; set; } public JsonElement? NextPageData { get; set; }
/// <summary> /// <summary>
/// آدرس صفحه بعدی /// آدرس صفحه بعدی
@@ -1,9 +1,11 @@
using System; using Caspian.WorkflowFramework.Models;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Threading.Tasks; using System.Threading.Tasks;
using Caspian.WorkflowFramework.Models;
namespace Caspian.WorkflowFramework.Utility namespace Caspian.WorkflowFramework.Utility
{ {
@@ -33,21 +35,67 @@ namespace Caspian.WorkflowFramework.Utility
? long.TryParse(dictionary[nameof(workflowModel.UserId)]?.ToString(), out var userId) ? userId : (long?)null ? long.TryParse(dictionary[nameof(workflowModel.UserId)]?.ToString(), out var userId) ? userId : (long?)null
: null; : null;
//workflowModel.CurrentPageData = dictionary.ContainsKey(nameof(workflowModel.CurrentPageData)) //CurrentPageData
// ? (object?)dictionary[nameof(workflowModel.CurrentPageData)] if (dictionary.TryGetValue(nameof(workflowModel.CurrentPageData), out var currentPageDataObj) &&
// : null; currentPageDataObj is not null)
{
switch (currentPageDataObj)
{
case JsonElement je:
workflowModel.CurrentPageData = je;
break;
workflowModel.CurrentPageData = dictionary.ContainsKey(nameof(workflowModel.CurrentPageData)) case JsonNode node:
? dictionary[nameof(workflowModel.CurrentPageData)]?.ToString() // .NET 6+
: null; workflowModel.CurrentPageData = JsonSerializer.SerializeToElement(node);
break;
//workflowModel.NextPageData = dictionary.ContainsKey(nameof(workflowModel.NextPageData)) case string s:
// ? (object?)dictionary[nameof(workflowModel.NextPageData)] // اگر به صورت string JSON ذخیره شده
// : null; workflowModel.CurrentPageData = JsonSerializer.Deserialize<JsonElement>(s);
break;
workflowModel.NextPageData = dictionary.ContainsKey(nameof(workflowModel.NextPageData))
? dictionary[nameof(workflowModel.NextPageData)]?.ToString() default:
: null; // هر نوع دیگری: 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)) workflowModel.NextPageUrl = dictionary.ContainsKey(nameof(workflowModel.NextPageUrl))
? dictionary[nameof(workflowModel.NextPageUrl)]?.ToString() ? dictionary[nameof(workflowModel.NextPageUrl)]?.ToString()
@@ -114,7 +114,7 @@ public class HomeController : Controller, ILoggable
{ {
EventName = input.PageEventName, EventName = input.PageEventName,
WorkflowInstanceId = input.WorkflowId, WorkflowInstanceId = input.WorkflowId,
EventData = JsonConvert.SerializeObject(input) EventData = System.Text.Json.JsonSerializer.SerializeToElement(input)
}; };
var response = await _workflowService.PublishEventAsync(publishModel); var response = await _workflowService.PublishEventAsync(publishModel);
@@ -173,7 +173,7 @@ public class HomeController : Controller, ILoggable
{ {
EventName = input.PageEventName, EventName = input.PageEventName,
WorkflowInstanceId = input.WorkflowId, WorkflowInstanceId = input.WorkflowId,
EventData = JsonConvert.SerializeObject(input) EventData = System.Text.Json.JsonSerializer.SerializeToElement(input)
}; };
var response = await _workflowService.PublishEventAsync(publishEventModel); var response = await _workflowService.PublishEventAsync(publishEventModel);
@@ -98,7 +98,7 @@ namespace SampleWorkflowWeb.Controllers
{ {
EventName = input.PageEventName, EventName = input.PageEventName,
WorkflowInstanceId = input.WorkflowId, WorkflowInstanceId = input.WorkflowId,
EventData = JsonConvert.SerializeObject(input) EventData = System.Text.Json.JsonSerializer.SerializeToElement(input)
}; };
var response = await _workflowService.PublishEventAsync(publishModel); var response = await _workflowService.PublishEventAsync(publishModel);
@@ -189,7 +189,7 @@ namespace SampleWorkflowWeb.Controllers
{ {
EventName = input.PageEventName, EventName = input.PageEventName,
WorkflowInstanceId = input.WorkflowId, WorkflowInstanceId = input.WorkflowId,
EventData = JsonConvert.SerializeObject(input) EventData = System.Text.Json.JsonSerializer.SerializeToElement(input)
}; };
var response = await _workflowService.PublishEventAsync(publishModel); var response = await _workflowService.PublishEventAsync(publishModel);
@@ -258,7 +258,7 @@ namespace SampleWorkflowWeb.Controllers
{ {
EventName = input.PageEventName, EventName = input.PageEventName,
WorkflowInstanceId = input.WorkflowId, WorkflowInstanceId = input.WorkflowId,
EventData = JsonConvert.SerializeObject(input) EventData = System.Text.Json.JsonSerializer.SerializeToElement(input)
}; };
var response = await _workflowService.PublishEventAsync(publishModel); var response = await _workflowService.PublishEventAsync(publishModel);
@@ -1,4 +1,6 @@
namespace SampleWorkflowWeb.Models using System.Text.Json;
namespace SampleWorkflowWeb.Models
{ {
public class WorkflowModel public class WorkflowModel
{ {
@@ -28,7 +30,7 @@
/// <summary> /// <summary>
/// داده صفحه جاری /// داده صفحه جاری
/// </summary> /// </summary>
public string? CurrentPageData { get; set; } public JsonElement? CurrentPageData { get; set; }
/// <summary> /// <summary>
/// داده صفحه بعد /// داده صفحه بعد
@@ -36,7 +38,7 @@
/// فعلا استفاده ای نداریم /// فعلا استفاده ای نداریم
/// </remark> /// </remark>
/// </summary> /// </summary>
public string? NextPageData { get; set; } public JsonElement? NextPageData { get; set; }
/// <summary> /// <summary>
/// آدرس صفحه بعدی /// آدرس صفحه بعدی