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();
        }
示例#3
0
        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();
            }
        }
示例#6
0
        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()
                        })