Add fileds 'InstanceMode' & 'PageNumber' in workflow response
This commit is contained in:
@@ -15,6 +15,14 @@ public class WorkflowModel
|
||||
/// </summary>
|
||||
public string? InstanceId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نوع نمونه
|
||||
/// <remark>
|
||||
/// exist, new, ...
|
||||
/// </remark>
|
||||
/// </summary>
|
||||
public string? InstanceMode { get; set; } = "exist";
|
||||
|
||||
/// <summary>
|
||||
/// نام گردش کار
|
||||
/// </summary>
|
||||
@@ -25,6 +33,7 @@ public class WorkflowModel
|
||||
/// </summary>
|
||||
public bool IsComplete { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// برای کدام کاربر؟
|
||||
/// </summary>
|
||||
@@ -48,6 +57,11 @@ public class WorkflowModel
|
||||
/// </summary>
|
||||
public string? NextPageUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// شماره صفحه
|
||||
/// </summary>
|
||||
public int? PageNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// رویدادی که باید پس از سابمیت صفحه بعدی منتشر شود
|
||||
/// </summary>
|
||||
|
||||
@@ -102,6 +102,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
var workflowModel = dictionary.ConvertToWorkflowModel();
|
||||
workflowModel.InstanceId = workflowClient.WorkflowInstanceId;
|
||||
workflowModel.UserId = input.UserId;
|
||||
workflowModel.InstanceMode = "exist";
|
||||
|
||||
response = new WorkflowResponse<WorkflowModel>()
|
||||
{
|
||||
@@ -194,6 +195,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
if (runningWorkflowInstance != null)
|
||||
{
|
||||
workflowInstanceId = runningWorkflowInstance.Id;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -220,6 +222,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
var workflowModel = dictionary.ConvertToWorkflowModel();
|
||||
workflowModel.InstanceId = workflowInstanceId;
|
||||
workflowModel.UserId = input.UserId;
|
||||
workflowModel.InstanceId = runningWorkflowInstance != null ? "exist" : "new";
|
||||
|
||||
response = new WorkflowResponse<WorkflowModel>()
|
||||
{
|
||||
@@ -309,6 +312,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
var workflowModel = dictionary.ConvertToWorkflowModel();
|
||||
workflowModel.InstanceId = instance.Id;
|
||||
workflowModel.UserId = instance.ExternalUserId;
|
||||
workflowModel.InstanceMode = "exist";
|
||||
|
||||
response = new WorkflowResponse<WorkflowModel>()
|
||||
{
|
||||
@@ -379,6 +383,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
var workflowModel = dictionary.ConvertToWorkflowModel();
|
||||
workflowModel.InstanceId = instance.Id;
|
||||
workflowModel.UserId = instance.ExternalUserId;
|
||||
workflowModel.InstanceMode = "exist";
|
||||
|
||||
response = new WorkflowResponse<WorkflowModel>()
|
||||
{
|
||||
@@ -436,6 +441,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
var model = dict.ConvertToWorkflowModel();
|
||||
model.InstanceId = instance.Id;
|
||||
model.UserId = instance.ExternalUserId;
|
||||
model.InstanceMode = "exist";
|
||||
|
||||
result.Add(model);
|
||||
}
|
||||
@@ -466,7 +472,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region GetActiveInstanceIdsAsync
|
||||
public async Task<WorkflowResponse<List<string>>> GetActiveInstanceIdsAsync(GetActiveInstancesModel input)
|
||||
{
|
||||
@@ -560,6 +566,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
var model = dict.ConvertToWorkflowModel();
|
||||
model.InstanceId = latest.Id;
|
||||
model.UserId = latest.ExternalUserId;
|
||||
model.InstanceMode = "exist";
|
||||
|
||||
var response = new WorkflowResponse<WorkflowModel>
|
||||
{
|
||||
@@ -587,7 +594,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region GetLatestActiveInstanceIdAsync
|
||||
public async Task<WorkflowResponse<dynamic>> GetLatestActiveInstanceIdAsync(GetLatestActiveInstanceModel input)
|
||||
{
|
||||
@@ -714,7 +721,7 @@ public class WorkflowService : IWorkflowService, ILoggable
|
||||
_logger.Log("Exception in CancelInstanceAsync", WFInstanceId: input.WorkflowInstanceId, response, sw.ElapsedMilliseconds, ex);
|
||||
return response;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
//#region EvictDefFromCacheAsync
|
||||
|
||||
@@ -1,149 +1,119 @@
|
||||
using System;
|
||||
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;
|
||||
using Caspian.WorkflowFramework.Models;
|
||||
|
||||
namespace Caspian.WorkflowFramework.Utility;
|
||||
public static class ConversionExtensions
|
||||
namespace Caspian.WorkflowFramework.Utility
|
||||
{
|
||||
public static WorkflowModel ConvertToWorkflowModel(this Dictionary<string, object?> dictionary)
|
||||
public static class ConversionExtensions
|
||||
{
|
||||
var workflowModel = new WorkflowModel();
|
||||
public static WorkflowModel ConvertToWorkflowModel(this Dictionary<string, object?> dictionary)
|
||||
{
|
||||
var workflowModel = new WorkflowModel();
|
||||
|
||||
if (dictionary == null || dictionary.Count == 0)
|
||||
return workflowModel;
|
||||
|
||||
//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.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.NextPageEventName = dictionary.ContainsKey(nameof(workflowModel.NextPageEventName))
|
||||
? dictionary[nameof(workflowModel.NextPageEventName)]?.ToString()
|
||||
: null;
|
||||
|
||||
if (dictionary == null || dictionary.Count == 0)
|
||||
return workflowModel;
|
||||
|
||||
//Map dictionary values to WorkflowModel properties
|
||||
workflowModel.InstanceId = dictionary.ContainsKey(nameof(workflowModel.InstanceId))
|
||||
? dictionary[nameof(workflowModel.InstanceId)]?.ToString()
|
||||
: null;
|
||||
|
||||
workflowModel.Name = dictionary.ContainsKey(nameof(workflowModel.Name))
|
||||
? dictionary[nameof(workflowModel.Name)]?.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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
//workflowModel.CurrentPageData = dictionary.ContainsKey(nameof(workflowModel.CurrentPageData))
|
||||
// ? dictionary[nameof(workflowModel.CurrentPageData)]?.ToString()
|
||||
// : null;
|
||||
|
||||
//workflowModel.NextPageData = dictionary.ContainsKey(nameof(workflowModel.NextPageData))
|
||||
// ? (object?)dictionary[nameof(workflowModel.NextPageData)]
|
||||
// : null;
|
||||
|
||||
//workflowModel.NextPageData = dictionary.ContainsKey(nameof(workflowModel.NextPageData))
|
||||
// ? dictionary[nameof(workflowModel.NextPageData)]?.ToString()
|
||||
// : null;
|
||||
|
||||
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.NextPageEventName = dictionary.ContainsKey(nameof(workflowModel.NextPageEventName))
|
||||
? dictionary[nameof(workflowModel.NextPageEventName)]?.ToString()
|
||||
: null;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
return workflowModel;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user