From 85f1d7c89f2a9cdd11488b3c09d9abac8bf7bffb Mon Sep 17 00:00:00 2001 From: Maksym Sadovnychyy Date: Tue, 31 Dec 2024 22:22:23 +0100 Subject: [PATCH] (feature): paged request lower case comparison --- .../Webapi/Models/PagedRequestTests.cs | 2 ++ src/MaksIT.Core/MaksIT.Core.csproj | 2 +- src/MaksIT.Core/Webapi/Models/PagedRequest.cs | 19 +++++++++++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/MaksIT.Core.Tests/Webapi/Models/PagedRequestTests.cs b/src/MaksIT.Core.Tests/Webapi/Models/PagedRequestTests.cs index 42ef44e..20f11b3 100644 --- a/src/MaksIT.Core.Tests/Webapi/Models/PagedRequestTests.cs +++ b/src/MaksIT.Core.Tests/Webapi/Models/PagedRequestTests.cs @@ -2,6 +2,8 @@ using Xunit; using MaksIT.Core.Webapi.Models; // Ensure namespace matches the actual namespace of PagedRequest +namespace MaksIT.Core.Tests.Webapi.Models; + public class PagedRequestTests { public class TestEntity { diff --git a/src/MaksIT.Core/MaksIT.Core.csproj b/src/MaksIT.Core/MaksIT.Core.csproj index 952b136..8fa1c20 100644 --- a/src/MaksIT.Core/MaksIT.Core.csproj +++ b/src/MaksIT.Core/MaksIT.Core.csproj @@ -8,7 +8,7 @@ MaksIT.Core - 1.3.0 + 1.3.1 Maksym Sadovnychyy MAKS-IT MaksIT.Core diff --git a/src/MaksIT.Core/Webapi/Models/PagedRequest.cs b/src/MaksIT.Core/Webapi/Models/PagedRequest.cs index 1c3f500..db01453 100644 --- a/src/MaksIT.Core/Webapi/Models/PagedRequest.cs +++ b/src/MaksIT.Core/Webapi/Models/PagedRequest.cs @@ -1,5 +1,6 @@ using System.Linq.Dynamic.Core; using System.Linq.Expressions; +using System.Text.RegularExpressions; using MaksIT.Core.Abstractions.Webapi; public class PagedRequest : RequestModelBase { @@ -14,12 +15,26 @@ public class PagedRequest : RequestModelBase { if (string.IsNullOrWhiteSpace(Filters)) return x => true; // Returns an expression that doesn't filter anything. - // Parse the filter string into a dynamic lambda expression. + // Adjust Filters to make Contains, StartsWith, EndsWith, ==, and != case-insensitive + string adjustedFilters = Filters + .Replace(".Contains(", ".ToLower().Contains(") + .Replace(".StartsWith(", ".ToLower().StartsWith(") + .Replace(".EndsWith(", ".ToLower().EndsWith(") + .Replace("==", ".ToLower() ==") + .Replace("!=", ".ToLower() !="); + + // Ensure values are also transformed to lowercase + adjustedFilters = Regex.Replace(adjustedFilters, "\"([^\"]+)\"", m => $"\"{m.Groups[1].Value.ToLower()}\""); + + // Parse the adjusted filter string into a dynamic lambda expression var predicate = DynamicExpressionParser.ParseLambda( - new ParsingConfig(), false, Filters); + new ParsingConfig(), false, adjustedFilters); + return predicate; } + + public Func, IOrderedQueryable> BuildSortExpression() { if (string.IsNullOrWhiteSpace(SortBy)) return q => (IOrderedQueryable)q; // Cast to IOrderedQueryable