using GerstITS.Common; using GerstITS.Data; using GerstITS.Examples.Data.Entities; using GerstITS.Search; namespace GerstITS.Examples.Logic.Customers.Search; internal sealed class CustomerSearchQueryBuilderRule : SearchQueryBuilderRuleBase { #region Fields private readonly IReadOnlyRepository _repository; #endregion #region Constructors public CustomerSearchQueryBuilderRule(IReadOnlyRepository repository) { _repository = repository; } #endregion #region Methods protected override IQueryable CreateQuery(CustomerSearchFilter filter) { var query = _repository.Query(); if (filter.Name.IsNotNullOrWhiteSpace()) query = query.Where(i => i.FirstName.Contains(filter.Name) || i.LastName.Contains(filter.Name)); if (filter.EMail.IsNotNullOrWhiteSpace()) query = query.Where(i => i.EMail == filter.EMail); return query.Project(x => new Customer { Id = x.Id, FirstName = x.FirstName, LastName = x.LastName, EMail = x.EMail, IsActive = x.IsActive }); } #endregion }