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 })); }
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)); }
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)); }
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 })); }
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)); }