erp-platform/api/src/Kurs.Platform.Domain/Queries/QueryHelper.cs

90 lines
3.2 KiB
C#
Raw Normal View History

2025-05-06 06:45:49 +00:00
using System;
using System.Data;
using System.Linq;
using System.Text.Json;
namespace Kurs.Platform.Queries;
public class QueryHelper
{
/// <summary> gelen parametrelere gore [Value] yada 'Value' seklinde sonuc dondurur
/// </summary>
/// <param name="fieldDbSource"></param>
/// <param name="value"></param>
/// <returns></returns>
public static object GetFormattedValue(DbType fieldDbSource, object value)
{
object[] values = null;
var isArray = false;
if (value is JsonElement valueJson && valueJson.ValueKind == JsonValueKind.Array)
{
values = valueJson.EnumerateArray().Select(a => (object)a).ToArray();
isArray = true;
}
else if (value is object[] valueArray)
{
values = [.. valueArray];
isArray = true;
}
else
{
values = [value];
}
switch (fieldDbSource)
{
case DbType.Guid:
var guidValues = values.Select(a =>
{
if (a == null)
return (Guid?)null;
var str = a.ToString();
if (string.IsNullOrWhiteSpace(str))
return (Guid?)null;
return Guid.TryParse(str, out var g) ? g : (Guid?)null;
}).ToArray();
2025-05-06 06:45:49 +00:00
value = isArray ? guidValues : guidValues[0];
break;
case DbType.String:
case DbType.AnsiString:
var strValues = values.Select(a => a?.ToString()).ToArray();
value = string.Join(PlatformConsts.MultiValueDelimiter, strValues);
break;
case DbType.Date:
case DbType.DateTime:
case DbType.DateTime2:
case DbType.DateTimeOffset:
//"2025-01-03"
// var dateValues = values.Select(a => DateTimeOffset.ParseExact(a.ToString(), "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToUniversalTime()).ToArray();
// value = isArray ? dateValues : dateValues[0];
// break;
//"2025-01-03T11:58:00+03:00"
var dateTimeValues = values.Select(a => DateTimeOffset.Parse(a.ToString()).ToUniversalTime()).ToArray();
value = isArray ? dateTimeValues : dateTimeValues[0];
break;
case DbType.Int16:
case DbType.Int32:
case DbType.Int64:
case DbType.VarNumeric:
case DbType.Decimal:
case DbType.Double:
case DbType.Single:
case DbType.UInt16:
case DbType.UInt32:
case DbType.UInt64:
var intValues = values.Select(a => double.Parse(a.ToString())).ToArray();
value = isArray ? intValues : intValues[0];
break;
case DbType.Boolean:
var boolValues = values.Select(a => a != null && a.ToString().ToLower() != "false" && a.ToString() != "0").ToArray();
value = isArray ? boolValues : boolValues[0];
break;
}
return value;
}
}