public async Task <IActionResult> Trend(string id, bool allWords)
        {
            if (string.IsNullOrWhiteSpace(id))
            {
                return(BadRequest("Trend search term must have a value."));
            }

            var originalTerm = id;

            id = SearchTermHelper.MakeSafeWordSearch(id, allWords);

            var resultData = await trendService.GetTrendDataForTermAsync(id);

            resultData.Term = originalTerm;

            return(View(new TrendViewModel
            {
                Term = originalTerm,
                Data = JsonConvert.SerializeObject(resultData),
                To = resultData.End,
                From = resultData.Start,
                MaxCount = resultData.CountMax,
                AllWords = allWords
            }));
        }
Exemple #2
0
        public async Task <ActionResult> GetDataFull(string term, [FromQuery] bool allWords)
        {
            term = WebUtility.UrlDecode(term);

            term = SearchTermHelper.MakeSafeWordSearch(term, allWords);

            var full = await trendService.GetFullResultsForTermAsync(term);

            return(Ok(full));
        }
Exemple #3
0
        public async Task <ActionResult> GetSingleDataPointByGrouping(string grouping, string date, string term, [FromQuery] bool allWords)
        {
            term = WebUtility.UrlDecode(term);

            term = SearchTermHelper.MakeSafeWordSearch(term, allWords);

            if (!DateTime.TryParse(date, out var dateActual))
            {
                return(BadRequest($"unrecognized date value: {date}."));
            }

            var results = await trendService.GetResultsForTermInPeriodTypeBeginning(term, ParseGrouping(grouping), dateActual);

            return(Ok(results));
        }
        public IHttpActionResult Get([FromUri] SearchTermRequest request)
        {
            var searchTerm = SearchTermHelper.ConvertToSearchTerm(request.SearchTerm);

            if (string.IsNullOrWhiteSpace(searchTerm))
            {
                throw new InvalidOperationException("invalid search term");
            }

            request.SearchTerm = searchTerm;

            var result = _searchByNameProcessor.Process(request);

            return(Ok(result));
        }
Exemple #5
0
        public async Task <ActionResult> GetPlotAggregateData(string term, [FromQuery] bool allWords)
        {
            term = WebUtility.UrlDecode(term);

            var originalTerm = term;

            term = SearchTermHelper.MakeSafeWordSearch(term, allWords);

            var results = await trendService.GetTrendDataForTermAsync(term);

            return(Ok(new PlotAggregateDataViewModel
            {
                Counts = results.Counts,
                Term = originalTerm,
                AllWords = allWords,
                Scores = results.Scores
            }));
        }
Exemple #6
0
        public async Task <ActionResult> GetPlotAggregateData(string term, [FromQuery] bool allWords)
        {
            var originalTerm = term;

            if (allWords)
            {
                term = SearchTermHelper.MakeAllWordSearch(term);
            }

            var results = await trendService.GetTrendDataForTermAsync(term);

            return(Ok(new PlotAggregateDataViewModel
            {
                Counts = results.Counts,
                Term = originalTerm,
                AllWords = allWords
            }));
        }
        public void Can_Generate_SelectSql_ForCustomer()
        {
            const string expectedSql = @"
                SELECT
                    c.[Id] ,
                    c.[OrganizationId] ,
                    c.[CustomerTypeId] ,
                    c.[IsProspect] ,
                    c.[Code] ,
                    c.[Phone] ,
                    c.[Email] ,
                    c.[FirstName] ,
                    c.[LastName] ,
                    c.[OtherName] ,
                    c.[MobilePhone] ,
                    c.[Version] ,
                    c.[Dob] ,
                    c.[Uid] ,
                    c.[UtcCreated] ,
                    c.[UtcUpdated]
                    ,[TotalCount]
                FROM
                    [dbo].[Customer] c
                    CROSS APPLY(
                        SELECT COUNT(*) TotalCount
                        FROM
                            [dbo].[Customer] c
                        WHERE
                            (c.[OrganizationId] = 1000)
AND (CONTAINS((c.[Code],c.[Email]), @searchterm) OR CONTAINS((c.[SearchName]), @searchterm))
                    )[Count]
                WHERE
                    (c.[OrganizationId] = 1000)
AND (CONTAINS((c.[Code],c.[Email]), @searchterm) OR CONTAINS((c.[SearchName]), @searchterm))
                ORDER BY 9 DESC
                OFFSET @offset ROWS FETCH NEXT @pageSize ROWS ONLY  ";

            var sqlTemplate = $@"
                SELECT
                    {SqlPatterns.Columns}
                    ,[TotalCount]
                FROM
                    {SqlPatterns.FromTable}
                    CROSS APPLY(
                        SELECT COUNT(*) TotalCount
                        FROM
                            {SqlPatterns.FromTable}
                        WHERE
                            {SqlPatterns.Where}
                    )[Count]
                WHERE
                    {SqlPatterns.Where}
                ORDER BY {SqlPatterns.OrderBy}
                OFFSET @offset ROWS FETCH NEXT @pageSize ROWS ONLY  ";

            var builder = new SelectSqlBuilder();

            const int orgId = 1000;

            var searchTerm = SearchTermHelper.ConvertToSearchTerm("test");

            builder.AddTemplate(sqlTemplate);
            builder.AddColumns <Customer>();
            builder.AddConditions <Customer>(i => i.OrganizationId == orgId);
            builder.AddOrderBy <Customer>("lastName", true);
            builder.AddContains <Customer>(searchTerm);

            var sql = builder.GetSql();

            Assert.Equal(TestUtility.NeutralizeString(sql), TestUtility.NeutralizeString(expectedSql));
        }