dotnet-cqrs/Svrnty.CQRS.DynamicQuery/DynamicQueryFilter.cs
Svrnty 5f3602d071 fix: resolve nullability warnings, add CI/CD and security workflows, harden .gitignore
- Add nullable annotations across discovery interfaces, dynamic query
  models, and filter/aggregate types to eliminate CS8600-series warnings
- Replace unsafe cast in DynamicQueryHandlerBase with pattern match
- Add CI workflow (build --warnaserror + test on JP branch)
- Add weekly security vulnerability scan workflow
- Extend .gitignore with secret/credential patterns (.env, *.key, secrets/, credentials.json)

Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-27 19:28:24 -05:00

87 lines
2.3 KiB
C#

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<DynamicQueryFilter>? 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<FilterType>(Type!);
if (type == FilterType.Composite)
{
var compositeFilter = new CompositeFilter
{
And = And,
Type = FilterType.Composite,
Filters = Filters?.Select(t => t.ToFilter())?.ToList() ?? new List<IFilter>()
};
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;
}
}