using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; using PoweredSoft.DynamicQuery; using PoweredSoft.DynamicQuery.Core; namespace Svrnty.CQRS.DynamicQuery; public class DynamicQueryFilter { public List Filters { get; set; } public bool? And { get; set; } public string Type { get; set; } public bool? Not { get; set; } public string Path { get; set; } public object Value { get; set; } public string QueryValue { get { return null; } set { Value = value; } } public bool? CaseInsensitive { get; set; } public IFilter ToFilter() { var type = Enum.Parse(Type); if (type == FilterType.Composite) { var compositeFilter = new CompositeFilter { And = And, Type = FilterType.Composite, Filters = Filters?.Select(t => t.ToFilter())?.ToList() ?? new List() }; return compositeFilter; } object value = Value; if (Value is JsonElement jsonElement) { switch (jsonElement.ValueKind) { case JsonValueKind.String: value = jsonElement.ToString(); break; case JsonValueKind.Number: if (jsonElement.ToString().Contains('.')) value = jsonElement.GetDecimal(); else if (jsonElement.TryGetInt64(out var convertedValue)) value = convertedValue; break; case JsonValueKind.True: value = true; break; case JsonValueKind.False: value = false; break; // TODO: Array support default: value = null; break; } } var simpleFilter = new SimpleFilter { And = And, Type = type, Not = Not, Path = Path, Value = value, CaseInsensitive = CaseInsensitive, }; return simpleFilter; } }