using Datamodels.DatabaseModels; using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Repositories.Interfaces; using Datamodels.BusinessModels; using Datamodels.SearchModels; using Newtonsoft.Json; using System.Linq; using System.Linq.Expressions; using SearchApi.Exceptions; namespace SearchApi.SearchLogic { public class SearchLogic : ISearchLogic { private readonly ILogger _logger; private readonly IFwMariaSearchRepo _searchRepo; private List _tableNames; private List _joinConditions; private List _fieldNames; private List _whereConditions; private List _sortFields; public SearchLogic(ILogger logger, IFwMariaSearchRepo searchRepo) { _logger = logger; _searchRepo = searchRepo; } public async Task>> GetAllAddresses() { var result = await _searchRepo.GetAllAddresses(); return result; } public async Task> GetFilteredData(FilterModel filter, long skip = 0, long take = -1) { var result = new DataResult(); result.Data = new ResultModel(); result.Data.SearchModel = filter; return result; } // Extract Table private void GetTables(FilterModel filter) { bool hasTableList = filter.TableDescriptions.Count > 0; _tableNames = new List(); foreach(var table in filter.TableDescriptions) { if (hasTableList && string.IsNullOrEmpty(table.TableAlias)) { throw new TableAliasMissingException($"No Alias defined for Table {table.TableName}"); } _tableNames.Add($"{table.TableName} {(string.IsNullOrEmpty(table.TableAlias) ? string.Empty : table.TableAlias)}"); } } // Extract Fieldlist private void GetFields(FilterModel filter) { var tables = filter.TableDescriptions; foreach (var table in tables) { bool hasMultipleFields = table.Fields.Count > 0; foreach (var field in table.Fields) { if (hasMultipleFields && string.IsNullOrEmpty(field.FieldAlias)) { throw new FieldAliasMissingException($"No Alias defined for Field {field.FieldName} in Table {table.TableName}"); } _fieldNames.Add($"{table.TableAlias}.{field.FieldName} {field.FieldAlias}"); } } } // Extract Join Path if more than one table private void GetTableJoinConditions(FilterModel filter) { } // Extract Where Conditions private void GetWhereConditions(FilterModel filter) { } // Extract Sort Items private void GetSortFields(FilterModel filter) { } // Assemble SQL Query private string AssembleSqlQuery() { return null; } } }