mirror of
				https://github.com/Biarity/Sieve.git
				synced 2025-11-03 18:29:02 +01:00 
			
		
		
		
	Configuration effective, added ISieveModel, better DSL
This commit is contained in:
		@@ -7,6 +7,7 @@ namespace Sieve.Models
 | 
			
		||||
    public enum FilterOperator
 | 
			
		||||
    {
 | 
			
		||||
        Equals,
 | 
			
		||||
        NotEquals,
 | 
			
		||||
        GreaterThan,
 | 
			
		||||
        LessThan,
 | 
			
		||||
        GreaterThanOrEqualTo,
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,15 @@ namespace Sieve.Models
 | 
			
		||||
    public class FilterTerm
 | 
			
		||||
    {
 | 
			
		||||
        private string _filter;
 | 
			
		||||
        private string[] operators = new string[] {
 | 
			
		||||
                    "==",
 | 
			
		||||
                    "!=",
 | 
			
		||||
                    ">",
 | 
			
		||||
                    "<",
 | 
			
		||||
                    ">=",
 | 
			
		||||
                    "<=",
 | 
			
		||||
                    "@=",
 | 
			
		||||
                    "_=" };
 | 
			
		||||
 | 
			
		||||
        public FilterTerm(string filter)
 | 
			
		||||
        {
 | 
			
		||||
@@ -18,7 +27,8 @@ namespace Sieve.Models
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return _filter.Split(' ')[0];
 | 
			
		||||
                return _filter.Split(operators, StringSplitOptions.RemoveEmptyEntries)[0].Trim();
 | 
			
		||||
                
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -26,7 +36,15 @@ namespace Sieve.Models
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return _filter.Split(' ')[1];
 | 
			
		||||
                foreach (var op in operators)
 | 
			
		||||
                {
 | 
			
		||||
                    if (_filter.IndexOf(op) != -1)
 | 
			
		||||
                    {
 | 
			
		||||
                        return op;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return "";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -34,7 +52,8 @@ namespace Sieve.Models
 | 
			
		||||
        public string Value {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return _filter.Split(' ')[2];
 | 
			
		||||
                var tokens = _filter.Split(operators, StringSplitOptions.RemoveEmptyEntries);
 | 
			
		||||
                return tokens.Length > 1 ? tokens[1].Trim() : null;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -47,6 +66,10 @@ namespace Sieve.Models
 | 
			
		||||
                    case "eq":
 | 
			
		||||
                    case "==":
 | 
			
		||||
                        return FilterOperator.Equals;
 | 
			
		||||
                    case "notequals":
 | 
			
		||||
                    case "nq":
 | 
			
		||||
                    case "!=":
 | 
			
		||||
                        return FilterOperator.NotEquals;
 | 
			
		||||
                    case "lessthan":
 | 
			
		||||
                    case "lt":
 | 
			
		||||
                    case "<":
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								Sieve/Models/ISieveModel.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								Sieve/Models/ISieveModel.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace Sieve.Models
 | 
			
		||||
{
 | 
			
		||||
    public interface ISieveModel
 | 
			
		||||
    {
 | 
			
		||||
        string Filters { get; set; }
 | 
			
		||||
 | 
			
		||||
        string Sorts { get; set; }
 | 
			
		||||
        
 | 
			
		||||
        int? Page { get; set; }
 | 
			
		||||
        
 | 
			
		||||
        int? PageSize { get; set; }
 | 
			
		||||
 | 
			
		||||
        List<FilterTerm> FilterParsed { get; }
 | 
			
		||||
 | 
			
		||||
        List<SortTerm> SortParsed { get; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -5,7 +5,7 @@ using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace Sieve.Models
 | 
			
		||||
{
 | 
			
		||||
    public class SieveModel
 | 
			
		||||
    public class SieveModel : ISieveModel
 | 
			
		||||
    {
 | 
			
		||||
        public string Filters { get; set; }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,5 +6,8 @@ namespace Sieve.Models
 | 
			
		||||
{
 | 
			
		||||
    public class SieveOptions
 | 
			
		||||
    {
 | 
			
		||||
        public bool CaseSensitive { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
        public int DefaultPageSize { get; set; } = 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -57,6 +57,27 @@ namespace Sieve.Services
 | 
			
		||||
            _customFilterMethods = customFilterMethods;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //public SieveProcessor(ISieveCustomSortMethods<TEntity> customSortMethods,
 | 
			
		||||
        //    ISieveCustomFilterMethods<TEntity> customFilterMethods)
 | 
			
		||||
        //{
 | 
			
		||||
        //    _options = new SieveOptions();
 | 
			
		||||
        //    _customSortMethods = customSortMethods;
 | 
			
		||||
        //    _customFilterMethods = customFilterMethods;
 | 
			
		||||
        //}
 | 
			
		||||
        //
 | 
			
		||||
        //public SieveProcessor(ISieveCustomSortMethods<TEntity> customSortMethods)
 | 
			
		||||
        //{
 | 
			
		||||
        //    _options = options;
 | 
			
		||||
        //    _customSortMethods = customSortMethods;
 | 
			
		||||
        //}
 | 
			
		||||
        //
 | 
			
		||||
        //public SieveProcessor(ISieveCustomFilterMethods<TEntity> customFilterMethods)
 | 
			
		||||
        //{
 | 
			
		||||
        //    _options = options;
 | 
			
		||||
        //    _customFilterMethods = customFilterMethods;
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public SieveProcessor(IOptions<SieveOptions> options)
 | 
			
		||||
        {
 | 
			
		||||
            _options = options;
 | 
			
		||||
@@ -180,6 +201,9 @@ namespace Sieve.Services
 | 
			
		||||
        public IQueryable<TEntity> ApplyPagination(SieveModel model, IQueryable<TEntity> result)
 | 
			
		||||
        {
 | 
			
		||||
            if (model?.Page == null || model?.PageSize == null)
 | 
			
		||||
                if (_options.Value.DefaultPageSize > 0)
 | 
			
		||||
                    return result.Take(_options.Value.DefaultPageSize);
 | 
			
		||||
                else
 | 
			
		||||
                return result;
 | 
			
		||||
 | 
			
		||||
            result = result.Skip((model.Page.Value - 1) * model.PageSize.Value)
 | 
			
		||||
@@ -194,7 +218,8 @@ namespace Sieve.Services
 | 
			
		||||
                if (p.GetCustomAttribute(typeof(SieveAttribute)) is SieveAttribute sieveAttribute)
 | 
			
		||||
                    if ((canSortRequired ? sieveAttribute.CanSort : true) &&
 | 
			
		||||
                        (canFilterRequired ? sieveAttribute.CanFilter : true) &&
 | 
			
		||||
                        ((sieveAttribute.Name ?? p.Name) == name))
 | 
			
		||||
                        ((sieveAttribute.Name ?? p.Name).Equals(name, 
 | 
			
		||||
                            _options.Value.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase)))
 | 
			
		||||
                        return true;
 | 
			
		||||
                return false;
 | 
			
		||||
            });
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,9 @@
 | 
			
		||||
  "ConnectionStrings": {
 | 
			
		||||
    "TestSqlServer": "Server=(localdb)\\MSSQLLocalDB; Database=SieveTests;"
 | 
			
		||||
  },
 | 
			
		||||
  "SieveConfig": {
 | 
			
		||||
 | 
			
		||||
  "Sieve": {
 | 
			
		||||
    "CaseSensitive": false,
 | 
			
		||||
    "DefaultPageSize": 10
 | 
			
		||||
  },
 | 
			
		||||
  "Logging": {
 | 
			
		||||
    "IncludeScopes": false,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user