public async Task <List <DiaryRecord> > GetRecordsList(RecordsTextFilter filter) { if (filter == null) { throw new ArgumentNullException(nameof(filter)); } if (string.IsNullOrWhiteSpace(filter.SearchText)) { return(Enumerable.Empty <DiaryRecord>().ToList()); } var list = (await SearchRecords(filter.SearchText).ConfigureAwait(false)) .OrderByDescending(r => r.Date) .Skip(filter.PageNo * filter.PageSize) .Take(filter.PageSize) .ToList(); var placeholder = _appSettingsService.GetHostAndPortPlaceholder(); var currentHostAndPort = await _appSettingsService.GetHostAndPort(); foreach (var rec in list) { rec.Text = rec.Text?.Replace(placeholder, currentHostAndPort, StringComparison.OrdinalIgnoreCase) ?? ""; rec.Name = rec.Name?.Replace(placeholder, currentHostAndPort, StringComparison.OrdinalIgnoreCase) ?? ""; foreach (var cog in rec.Cogitations) { cog.Text = cog.Text?.Replace(placeholder, currentHostAndPort, StringComparison.OrdinalIgnoreCase) ?? ""; } } return(list); }
public async Task GetRecordsListByText_WithoutMatches_ShouldReturnEmptyList() { var context = CreateContext(); Create_20Records(context, GetNumberList(20, "SearchText_"), GetDatesList(20)); await Add3CogitationsForEachRecord(context, "CogitationText_"); var recSearchByTextSvc = GetRecordsSearchTextService(context); var filter = new RecordsTextFilter { SearchText = "UniqueString" }; var list = await recSearchByTextSvc.GetRecordsList(filter); list.Should().NotBeNull(); list.Should().BeEmpty(); }
public async Task <ActionResult <RecordsPageDto> > GetRecordsList( [FromQuery] string?searchText, [FromQuery] int?pageSize, [FromQuery] int?pageNo) { try { pageSize ??= 20; pageSize = pageSize > 100 ? 100 : pageSize; pageNo ??= 0; var filters = new RecordsTextFilter { SearchText = searchText, PageNo = pageNo.Value, PageSize = pageSize.Value }; var records = await _recordsSearchService.GetRecordsList(filters); int allCount = await _recordsSearchService.GetRecordsCount(filters.SearchText); var pagesInfo = PagesInfo.GetPagesInfo(allCount, pageNo.Value, pageSize.Value); var dto = new RecordsPageDto { PagesInfo = pagesInfo, Records = records.Select(r => new RecordListItemDto { Date = r.Date, CreatedDate = r.CreateDate, ModifiedDate = r.ModifyDate, DisplayedName = r.GetRecordNameDisplay(), DisplayedText = r.GetRecordTextShort(), RecordId = r.Id }).ToList() }; return(Ok(dto)); } catch (ArgumentException exc) { return(BadRequest(exc.Message)); } }
public async Task GetRecordsListByText_SeveralMatches_ShouldReturnDistinctRecords() { var context = CreateContext(); Create_20Records(context, GetNamesList(), GetDatesList(20), GetNamesList().ToList()); await Add3CogitationsForEachRecord(context, "CogitationText_"); var recSearchByTextSvc = GetRecordsSearchTextService(context); var filter = new RecordsTextFilter { SearchText = SearchSubstring4 }; var list = await recSearchByTextSvc.GetRecordsList(filter); list.Should().NotBeNull(); list.Should().HaveCount(4); list.Should().SatisfyRespectively( r1 => r1.Text.Should().Be(SearchResult4.ElementAt(0)), r2 => r2.Text.Should().Be(SearchResult4.ElementAt(1)), r3 => r3.Text.Should().Be(SearchResult4.ElementAt(2)), r4 => r4.Text.Should().Be(SearchResult4.ElementAt(3))); }
public async Task GetRecordsListByText_MatchesInCogitationText_ShouldReturn4Records() { var context = CreateContext(); Create_20Records(context, GetNumberList(20, "SearchText_"), GetDatesList(20)); await Add3CogitationsForEachRecord(context, "CogitationText_", GetNamesList()); var recSearchByTextSvc = GetRecordsSearchTextService(context); var filter = new RecordsTextFilter { SearchText = SearchSubstring4 }; var list = await recSearchByTextSvc.GetRecordsList(filter); list.Should().NotBeNull(); list.Should().HaveCount(4); foreach (var r in list) { r.Cogitations.Should().NotBeEmpty(); r.Cogitations.Any(c => c.Text.ToUpper().Contains(SearchSubstring4.ToUpper())).Should().BeTrue(); } }
public async Task <ActionResult <RecordsDetailPageDto> > GetRecordsListExpanded( [FromQuery] string?searchText, [FromQuery] int?pageSize, [FromQuery] int?pageNo) { try { pageSize ??= 20; pageSize = pageSize > 100 ? 100 : pageSize; pageNo ??= 0; pageSize ??= 20; pageSize = pageSize > 100 ? 100 : pageSize; pageNo ??= 0; var filters = new RecordsTextFilter { SearchText = searchText, PageNo = pageNo.Value, PageSize = pageSize.Value }; var records = await _recordsSearchService.GetRecordsList(filters); int allCount = await _recordsSearchService.GetRecordsCount(filters.SearchText); var pagesInfo = PagesInfo.GetPagesInfo(allCount, pageNo.Value, pageSize.Value); var dto = new RecordsDetailPageDto { PagesInfo = pagesInfo, Records = records.Select(record => new RecordDto { Id = record.Id, Date = record.Date, CreatedDate = record.CreateDate, ModifiedDate = record.ModifyDate, Name = record.Name, Text = record.Text, Cogitations = record.Cogitations .Select(c => new CogitationDto { Id = c.Id, CreateDate = c.Date, Text = c.Text }) .ToArray(), Themes = record.ThemesRefs .Select(rt => rt.Theme) .Select(t => new ThemeDto { ThemeId = t !.Id, ThemeName = t.ThemeName, Actual = t.Actual }) .ToArray(), Images = record.ImagesRefs .Select(ri => ri.Image) .Select(i => new ImageListItemDto { Id = i !.Id, Name = i.Name, Width = i.Width, Height = i.Height, SizeKb = i.GetSizeKbString(), Base64Thumbnail = i.GetBase64Thumbnail() })