From 3b5ae86ce50adfd51151e1de1d35e1cd4f8a1fad Mon Sep 17 00:00:00 2001 From: Roland Fieger Date: Sat, 28 Aug 2021 15:40:03 +0200 Subject: [PATCH] First idea of ResultModel --- BusinessLogic/SearchLogic/ISearchLogic.cs | 2 +- BusinessLogic/SearchLogic/SearchLogic.cs | 37 ++--------- BusinessLogic/SearchLogic/SearchLogic.csproj | 4 ++ Datamodels/BusinessModels/ResultModel.cs | 1 + Datamodels/Enums/FieldTypes.cs | 17 ++++++ Datamodels/Enums/JoinTypes.cs | 12 ++++ Datamodels/Enums/PhraseOperators.cs | 19 ++++++ Datamodels/Enums/SearchTypes.cs | 13 ++++ Datamodels/SearchModels/FieldModel.cs | 14 ++--- Datamodels/SearchModels/FilterModel.cs | 3 +- Datamodels/SearchModels/ResultDataModel.cs | 11 ++++ Datamodels/SearchModels/ResultFieldModel.cs | 18 ++++++ Datamodels/SearchModels/ResultModel.cs | 13 ++++ Datamodels/SearchModels/ResultRowModel.cs | 11 ++++ Datamodels/SearchModels/SearchDescription.cs | 10 +-- Datamodels/SearchModels/SearchObject.cs | 23 +------ Datamodels/SearchModels/TableModel.cs | 1 + Repositories/FwMariaSearchRepo.cs | 61 +------------------ .../Controllers/WeatherForecastController.cs | 39 ------------ SearchWebApi/WeatherForecast.cs | 15 ----- SearchWebApi/appsettings.Development.json | 2 +- 21 files changed, 139 insertions(+), 187 deletions(-) create mode 100644 Datamodels/Enums/FieldTypes.cs create mode 100644 Datamodels/Enums/JoinTypes.cs create mode 100644 Datamodels/Enums/PhraseOperators.cs create mode 100644 Datamodels/Enums/SearchTypes.cs create mode 100644 Datamodels/SearchModels/ResultDataModel.cs create mode 100644 Datamodels/SearchModels/ResultFieldModel.cs create mode 100644 Datamodels/SearchModels/ResultModel.cs create mode 100644 Datamodels/SearchModels/ResultRowModel.cs delete mode 100644 SearchWebApi/Controllers/WeatherForecastController.cs delete mode 100644 SearchWebApi/WeatherForecast.cs diff --git a/BusinessLogic/SearchLogic/ISearchLogic.cs b/BusinessLogic/SearchLogic/ISearchLogic.cs index 0c08979..ae14b15 100644 --- a/BusinessLogic/SearchLogic/ISearchLogic.cs +++ b/BusinessLogic/SearchLogic/ISearchLogic.cs @@ -11,6 +11,6 @@ namespace SearchLogic public interface ISearchLogic { Task>> GetAllAddresses(); - Task>> GetFilteredData(FilterModel filter, long skip = 0, long take = -1); + Task> GetFilteredData(FilterModel filter, long skip = 0, long take = -1); } } diff --git a/BusinessLogic/SearchLogic/SearchLogic.cs b/BusinessLogic/SearchLogic/SearchLogic.cs index 4c82091..942d922 100644 --- a/BusinessLogic/SearchLogic/SearchLogic.cs +++ b/BusinessLogic/SearchLogic/SearchLogic.cs @@ -6,6 +6,7 @@ using Microsoft.Extensions.Logging; using Repositories.Interfaces; using Datamodels.BusinessModels; using Datamodels.SearchModels; +using Newtonsoft.Json; using System.Linq; using System.Linq.Expressions; @@ -28,41 +29,13 @@ namespace SearchLogic return result; } - public async Task>> GetFilteredData(FilterModel filter, long skip = 0, long take = -1) + public async Task> GetFilteredData(FilterModel filter, long skip = 0, long take = -1) { - List expList = new List(); - - foreach (SearchDescription filterModel in filter.SearchDescriptions) - { - var exp = GetFilterCondition
(filterModel); - if (exp != null) - { - expList.Add(exp); - } + var result = new DataResult(); + result.Data = new ResultModel(); + result.Data.SearchModel = filter; - } - var result = await _searchRepo.GetFilteredData
(expList, 0, -1); return result; } - - private Expression GetFilterCondition(SearchDescription searchDescription) where T : IEntityClass - { - Expression> predicate; - ParameterExpression pe = Expression.Parameter(typeof(T), typeof(T).Name); - if (typeof(T).GetProperty(searchDescription.SearchData.FieldName) != null) - { - //var exp = Expression.Parameter(typeof(T), "x"); - var exp = Expression.Parameter(typeof(T), typeof(T).Name); - Expression left = Expression.Property(pe, searchDescription.SearchData.FieldName); - Expression right = Expression.Constant(searchDescription.SearchData.Values[0]); - Expression e1 = Expression.Equal(left, right); - - //predicate = Expression.Lambda>(e1, new ParameterExpression[] { pe }); - - return e1; - } - - return null; - } } } diff --git a/BusinessLogic/SearchLogic/SearchLogic.csproj b/BusinessLogic/SearchLogic/SearchLogic.csproj index ac2fa79..a27aa5e 100644 --- a/BusinessLogic/SearchLogic/SearchLogic.csproj +++ b/BusinessLogic/SearchLogic/SearchLogic.csproj @@ -4,6 +4,10 @@ netstandard2.1 + + + + diff --git a/Datamodels/BusinessModels/ResultModel.cs b/Datamodels/BusinessModels/ResultModel.cs index 71e61a2..d4a9540 100644 --- a/Datamodels/BusinessModels/ResultModel.cs +++ b/Datamodels/BusinessModels/ResultModel.cs @@ -29,5 +29,6 @@ namespace Datamodels.BusinessModels public long TotalCount { get; set; } public long Skip { get; set; } public long Take { get; set; } + public TimeSpan Duration { get; set; } } } \ No newline at end of file diff --git a/Datamodels/Enums/FieldTypes.cs b/Datamodels/Enums/FieldTypes.cs new file mode 100644 index 0000000..7f6fa81 --- /dev/null +++ b/Datamodels/Enums/FieldTypes.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Datamodels.Enums +{ + public enum FieldTypes + { + String, + Integer, + Double, + Boolean, + DateTime, + Currency, + Blob + } +} diff --git a/Datamodels/Enums/JoinTypes.cs b/Datamodels/Enums/JoinTypes.cs new file mode 100644 index 0000000..e99fc15 --- /dev/null +++ b/Datamodels/Enums/JoinTypes.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Datamodels.Enums +{ + public enum JoinTypes + { + And, + Or + } +} diff --git a/Datamodels/Enums/PhraseOperators.cs b/Datamodels/Enums/PhraseOperators.cs new file mode 100644 index 0000000..3f2a12d --- /dev/null +++ b/Datamodels/Enums/PhraseOperators.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Datamodels.Enums +{ + public enum PhraseOperators + { + Equal, + NotEqual, + LowerThan, + LowerThanOrEqual, + GreaterThan, + GreaterThanOrEqual, + StartsWith, + Contains, + EndsWith + } +} diff --git a/Datamodels/Enums/SearchTypes.cs b/Datamodels/Enums/SearchTypes.cs new file mode 100644 index 0000000..a1bca7a --- /dev/null +++ b/Datamodels/Enums/SearchTypes.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Datamodels.Enums +{ + public enum SearchTypes + { + Phrase, + Range, + Terms + } +} diff --git a/Datamodels/SearchModels/FieldModel.cs b/Datamodels/SearchModels/FieldModel.cs index 62a727d..ec4c4cd 100644 --- a/Datamodels/SearchModels/FieldModel.cs +++ b/Datamodels/SearchModels/FieldModel.cs @@ -1,21 +1,15 @@ +using Datamodels.Enums; using System; +using System.Collections.Generic; namespace Datamodels.SearchModels { - public enum FieldTypes - { - String, - Integer, - Double, - Boolean, - DateTime, - Currency, - Blob - } public sealed class FieldModel { public string FieldName { get; set; } + public string FieldAlias { get; set; } public FieldTypes FieldType { get; set; } + public List SearchDescriptions { get; set; } } } \ No newline at end of file diff --git a/Datamodels/SearchModels/FilterModel.cs b/Datamodels/SearchModels/FilterModel.cs index 16bf6bc..9e02d2e 100644 --- a/Datamodels/SearchModels/FilterModel.cs +++ b/Datamodels/SearchModels/FilterModel.cs @@ -6,8 +6,7 @@ namespace Datamodels.SearchModels { public class FilterModel { - public TableModel TableName { get; set; } - public List SearchDescriptions { get; set; } + public List TableDescriptions { get; set; } public long Skip { get; set; } public long Take { get; set; } } diff --git a/Datamodels/SearchModels/ResultDataModel.cs b/Datamodels/SearchModels/ResultDataModel.cs new file mode 100644 index 0000000..0ec8b0b --- /dev/null +++ b/Datamodels/SearchModels/ResultDataModel.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Datamodels.SearchModels +{ + public class ResultDataModel + { + public List ResultRows { get; set; } + } +} diff --git a/Datamodels/SearchModels/ResultFieldModel.cs b/Datamodels/SearchModels/ResultFieldModel.cs new file mode 100644 index 0000000..35987d4 --- /dev/null +++ b/Datamodels/SearchModels/ResultFieldModel.cs @@ -0,0 +1,18 @@ +using Datamodels.Enums; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Datamodels.SearchModels +{ + public class ResultFieldModel + { + public FieldTypes FieldType { get; set; } + public string FieldContent { get; set; + public int FieldContentInt { get; set; } + public DateTime FieldContentDate { get; set; } + public Decimal FieldContentDecimal { get; set; } + public float FieldContentFloat { get; set; } + public string FieldContentString { get; set; } + } +} diff --git a/Datamodels/SearchModels/ResultModel.cs b/Datamodels/SearchModels/ResultModel.cs new file mode 100644 index 0000000..79948f7 --- /dev/null +++ b/Datamodels/SearchModels/ResultModel.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Datamodels.SearchModels +{ + public class ResultModel + { + public FilterModel SearchModel { get; set; } + public ResultDataModel ResultData { get; set; } + + } +} diff --git a/Datamodels/SearchModels/ResultRowModel.cs b/Datamodels/SearchModels/ResultRowModel.cs new file mode 100644 index 0000000..ac18f84 --- /dev/null +++ b/Datamodels/SearchModels/ResultRowModel.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Datamodels.SearchModels +{ + public class ResultRowModel + { + public List RowFields { get; set; } + } +} diff --git a/Datamodels/SearchModels/SearchDescription.cs b/Datamodels/SearchModels/SearchDescription.cs index a3db4cd..0493b74 100644 --- a/Datamodels/SearchModels/SearchDescription.cs +++ b/Datamodels/SearchModels/SearchDescription.cs @@ -1,17 +1,13 @@ -using System; +using Datamodels.Enums; +using System; using System.Collections.Generic; using System.Text; namespace Datamodels.SearchModels { - public enum JoinTypes - { - And, - Or - } + public class SearchDescription { - public string TableName { get; set; } public SearchObject SearchData { get; set; } public JoinTypes JoinType { get; set; } diff --git a/Datamodels/SearchModels/SearchObject.cs b/Datamodels/SearchModels/SearchObject.cs index 0af2537..f7b3a43 100644 --- a/Datamodels/SearchModels/SearchObject.cs +++ b/Datamodels/SearchModels/SearchObject.cs @@ -1,33 +1,14 @@ -using System; +using Datamodels.Enums; +using System; using System.Collections.Generic; using System.Text; namespace Datamodels.SearchModels { - public enum SearchTypes - { - Phrase, - Range, - Terms - } - - public enum PhraseOperators - { - Equal, - NotEqual, - LowerThan, - LowerThanOrEqual, - GreaterThan, - GreaterThanOrEqual, - StartsWith, - Contains, - EndsWith - } public class SearchObject { public List Values { get; set; } - public string FieldName { get; set; } public SearchTypes SearchType { get; set; } public PhraseOperators PhraseOperator { get; set; } diff --git a/Datamodels/SearchModels/TableModel.cs b/Datamodels/SearchModels/TableModel.cs index 28644f5..3598d53 100644 --- a/Datamodels/SearchModels/TableModel.cs +++ b/Datamodels/SearchModels/TableModel.cs @@ -6,6 +6,7 @@ namespace Datamodels.SearchModels public sealed class TableModel { public string TableName { get; set; } + public string TableAlias { get; set; } public List Fields { get; set; } = new List(); } } \ No newline at end of file diff --git a/Repositories/FwMariaSearchRepo.cs b/Repositories/FwMariaSearchRepo.cs index 2cecb75..38cd248 100644 --- a/Repositories/FwMariaSearchRepo.cs +++ b/Repositories/FwMariaSearchRepo.cs @@ -80,32 +80,7 @@ namespace Repositories public async Task>> GetFilteredData(List expressions, long skip = 0, long take = -1) where T : IEntityClass { - var where = FilterLinq.GetWherePredicate(wherefield, wherefieldvalue).Compile(); - items = await _dbContext.Address.Where((Expression>)where).ToListAsync(); - var result = new DataResult>(); - if (typeof(T).Equals(typeof(Address))) - { - Expression combined = null; - foreach (var exp in expressions) - { - if (combined == null) - { - combined = exp; - } - else - { - combined = Expression.Or(combined, exp); - } - } - ParameterExpression pe = Expression.Parameter(typeof(T), typeof(T).Name); - combined = Expression.Lambda>(combined, new ParameterExpression[] { pe }); - //var addressFound = await _dbContext.Address.Where((Expression>)combined).ToListAsync(); - var addressFound = await _dbContext.Address.Where(a => a.City == "Augsburg" | a.City == "München").ToListAsync(); - result.Data = new List(addressFound.Cast()); - - } - - return result; + throw new NotImplementedException(); } } @@ -113,39 +88,7 @@ namespace Repositories { public static Expression> GetWherePredicate(string whereFieldList, string whereFieldValues) { - //the 'IN' parameter for expression ie T=> condition - ParameterExpression pe = Expression.Parameter(typeof(T), typeof(T).Name); - - //combine them with and 1=1 Like no expression - Expression combined = null; - if (whereFieldList != null) - { - string[] field = whereFieldList.Split(';'); - string[] fieldValue = whereFieldValues.Split(';'); - for (int i = 0; i < field.Count(); i++) - { - //Expression for accessing Fields name property - Expression columnNameProperty = Expression.Property(pe, field[i]); - - //the name constant to match - Expression columnValue = Expression.Constant(fieldValue[i]); - - //the first expression: PatientantLastName = ? - Expression e1 = Expression.Equal(columnNameProperty, columnValue); - - if (combined == null) - { - combined = e1; - } - else - { - combined = Expression.And(combined, e1); - } - } - } - - //create and return the predicate - return Expression.Lambda>(combined, new ParameterExpression[] { pe }); + throw new NotImplementedException(); } } } diff --git a/SearchWebApi/Controllers/WeatherForecastController.cs b/SearchWebApi/Controllers/WeatherForecastController.cs deleted file mode 100644 index 3e27f77..0000000 --- a/SearchWebApi/Controllers/WeatherForecastController.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace FeatureWerkAPIs.Controllers -{ - [ApiController] - [Route("[controller]")] - public class WeatherForecastController : ControllerBase - { - private static readonly string[] Summaries = new[] - { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - private readonly ILogger _logger; - - public WeatherForecastController(ILogger logger) - { - _logger = logger; - } - - [HttpGet] - public IEnumerable Get() - { - var rng = new Random(); - return Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = DateTime.Now.AddDays(index), - TemperatureC = rng.Next(-20, 55), - Summary = Summaries[rng.Next(Summaries.Length)] - }) - .ToArray(); - } - } -} diff --git a/SearchWebApi/WeatherForecast.cs b/SearchWebApi/WeatherForecast.cs deleted file mode 100644 index 00689b1..0000000 --- a/SearchWebApi/WeatherForecast.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; - -namespace FeatureWerkAPIs -{ - public class WeatherForecast - { - public DateTime Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string Summary { get; set; } - } -} diff --git a/SearchWebApi/appsettings.Development.json b/SearchWebApi/appsettings.Development.json index 0553900..38e9150 100644 --- a/SearchWebApi/appsettings.Development.json +++ b/SearchWebApi/appsettings.Development.json @@ -7,7 +7,7 @@ } }, "ConnectionStrings": { - "mariadb": "SERVER=127.0.0.1;DATABASE=testdb;PORT=3306;USER=root;PASSWORD=example", + "mariadb": "SERVER=localhost;DATABASE=textor_test;PORT=3333;USER=root;PASSWORD=$64,rf1209", "postgres": "", "sqlserver": "", "oracle": ""