Example #1
0
        public async Task <IActionResult> Index([FromForm] string search, [FromForm] int page = 1, [FromForm] int albumId = 0, [FromForm] int userId = 0)
        {
            _logger.Information("Performing search...");

            List <Album> albums    = default;
            int          pageCount = default;
            List <Post>  blog      = default;

            await Task.WhenAll(
                Task.Run(async() => (albums, pageCount) = await _searchService.SearchAsync(search, page, _pageSize)),
                Task.Run(async() => blog = userId != default ? await _userRepository.GetBlogAsync(userId) : new List <Post>()));

            var model = new SearchViewModel
            {
                SearchValue = search,
                Page        = page,
                PageCount   = pageCount,
                Albums      = (
                    from a in albums
                    let suite = a.User.Address.Suite
                                let cityZip = $"{a.User.Address.City}, {a.User.Address.ZipCode}"
                                              select new AlbumViewModel
                {
                    AlbumId = a.AlbumId,
                    UserId = a.User.UserId,
                    AlbumSelected = a.AlbumId == albumId && userId == default,
                    BlogSelected = a.AlbumId == albumId && userId != default,
                    Title = a.Title,
                    Thumbnail = a.Thumbnail,
                    Photos = (
                        from p in a.Photos
                        select new PhotoViewModel
                    {
                        Title = p.Title,
                        Thumbnail = p.Url
                    }).ToList(),
                    UserName = a.User.Name,
                    Email = a.User.Email,
                    Phone = a.User.Phone,
                    AddressLine1 = a.User.Address.Street,
                    AddressLine2 = !String.IsNullOrWhiteSpace(suite) ? suite : cityZip,
                    AddressLine3 = !String.IsNullOrWhiteSpace(suite) ? cityZip : String.Empty,
                    GeoLocation = a.User.Address.GeoLocation,
                    Blog = (
                        from post in blog
                        select new PostViewModel
                    {
                        Title = post.Title,
                        Body = post.Body,
                        Comments = (
                            from c in post.Comments
                            select new CommentViewModel
                        {
                            Name = c.Name,
                            Email = c.Email,
                            Body = c.Body
                        }).ToList()
                    }).ToList()
                }).ToList()