public PagedQueryResult <ProgrammeNameModel> Search(ProgrammeSearchQueryModel searchQuery)
        {
            lock (_session)
            {
                var where = new List <Expression <Func <Programmes_ByIdAndSalesAreaStartDateTime.IndexedFields, bool> > >();

                if (searchQuery.SalesArea != null && searchQuery.SalesArea.Any())
                {
                    where.Add(p => p.SalesArea.In(searchQuery.SalesArea));
                }

                if (searchQuery.FromDateInclusive != default(DateTime))
                {
                    where.Add(p => p.StartDateTime >= searchQuery.FromDateInclusive);
                }

                if (searchQuery.ToDateInclusive != default(DateTime))
                {
                    where.Add(p => p.StartDateTime <= searchQuery.ToDateInclusive);
                }

                if (!string.IsNullOrWhiteSpace(searchQuery.NameOrRef))
                {
                    var termsList = searchQuery.NameOrRef.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                    where.AddRange(termsList.Select(
                                       term => (Expression <Func <Programmes_ByIdAndSalesAreaStartDateTime.IndexedFields, bool> >)(p => p
                                                                                                                                   .TokenizedProgramme
                                                                                                                                   .StartsWith(term))));
                }

                string sortBy;
                switch (searchQuery.OrderBy)
                {
                case ProgrammeOrder.LocalDate:
                    sortBy = "StartDateTime";
                    break;

                case null:
                    sortBy = null;
                    break;

                default:
                    sortBy = searchQuery.OrderBy.ToString();
                    break;
                }

                var items = DocumentSessionExtensions
                            .GetAll <Programmes_ByIdAndSalesAreaStartDateTime.IndexedFields, Programmes_ByIdAndSalesAreaStartDateTime,
                                     ProgrammeTransformer_BySearch, ProgrammeNameModel>(_session,
                                                                                        where.Any() ? where.AggregateAnd() : null,
                                                                                        out int totalResult, sortBy, searchQuery.OrderByDirection?.ToString() ?? "asc",
                                                                                        searchQuery.Skip,
                                                                                        searchQuery.Top);

                return(new PagedQueryResult <ProgrammeNameModel>(totalResult, items));
            }
        }
Beispiel #2
0
        public PagedQueryResult <ProgrammeNameModel> Search(ProgrammeSearchQueryModel searchQuery)
        {
            if (searchQuery == null)
            {
                throw new ArgumentNullException(nameof(searchQuery));
            }

            var query = _dbContext.Query <Entities.Tenant.Programmes.Programme>();

            if (searchQuery.SalesArea != null && searchQuery.SalesArea.Any())
            {
                query = query.Where(e => searchQuery.SalesArea.Contains(e.SalesArea.Name));
            }

            if (searchQuery.FromDateInclusive != default)
            {
                query = query.Where(p => p.StartDateTime >= searchQuery.FromDateInclusive);
            }

            if (searchQuery.ToDateInclusive != default)
            {
                query = query.Where(p => p.StartDateTime <= searchQuery.ToDateInclusive);
            }

            if (!string.IsNullOrWhiteSpace(searchQuery.NameOrRef))
            {
                var searchCondition = _searchConditionBuilder
                                      .StartAllWith(searchQuery.NameOrRef.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries))
                                      .Build();

                query = query
                        .Where(p => EF.Functions.Contains(
                                   EF.Property <string>(p.ProgrammeDictionary, Entities.Tenant.ProgrammeDictionary.SearchField), searchCondition));
            }

            if (searchQuery.OrderBy != null)
            {
                var sortBy = searchQuery.OrderBy == ProgrammeOrder.LocalDate
                    ? nameof(Programme.StartDateTime)
                    : searchQuery.OrderBy.ToString();

                query = query.OrderBySingleItem(sortBy,
                                                searchQuery.OrderByDirection ?? OrderDirection.Asc);
            }

            var pQuery = query.Select(x => new ProgrammeNameModel
            {
                ExternalReference = x.ProgrammeDictionary.ExternalReference,
                ProgrammeName     = x.ProgrammeDictionary.Name
            }).Distinct();

            return(new PagedQueryResult <ProgrammeNameModel>(pQuery.Count(),
                                                             pQuery.ApplyPaging(searchQuery.Skip, searchQuery.Top).ToList()));
        }
Beispiel #3
0
        public IHttpActionResult Get([FromUri] ProgrammeSearchQueryModel queryModel)
        {
            if (!ModelState.IsValid)
            {
                return(this.Error().InvalidParameters("One or more of the required query parameters are missing."));
            }
            if (queryModel == null)
            {
                queryModel = new ProgrammeSearchQueryModel();
            }
            var programmes = _programmeRepository.Search(queryModel);

            var searchModel = new SearchResultModel <ProgrammeNameModel>()
            {
                Items      = programmes.Items.ToList(),
                TotalCount = programmes.TotalCount
            };

            return(Ok(searchModel));
        }
 public PagedQueryResult <ProgrammeNameModel> Search(ProgrammeSearchQueryModel searchQuery)
 {
     throw new NotImplementedException();
 }