private void GetAuthorRecommendations()
        {
            List <Guid> authorIds = new List <Guid>();

            var                     allBookAuthors    = _bookAuthorService.AsQueryable().ToList();
            List <Author>           authors           = new List <Author>();
            List <GroupingByAuthor> groupingByAuthors = new List <GroupingByAuthor>();

            foreach (var bookId in _bookIds)
            {
                var bookAuthorId = allBookAuthors.Where(x => x.BookId == bookId).First().AuthorId;
                var author       = _authorService.AsQueryable().Where(x => x.Id == bookAuthorId).FirstOrDefault();

                if (!authors.Contains(author))
                {
                    authors.Add(author);
                    groupingByAuthors.Add(
                        new GroupingByAuthor
                    {
                        Id         = author.Id,
                        AuthorName = author.FirstName + " " + author.LastName,
                        NumOfBooks = 1
                    });
                }
                else
                {
                    groupingByAuthors.Where(x => x.Id == author.Id).FirstOrDefault().NumOfBooks++;
                }
            }

            var mostReadOrViewedAuthorId = groupingByAuthors.OrderByDescending(x => x.NumOfBooks).First().Id;

            var booksFromFavAuthor = _bookAuthorService
                                     .AsQueryable()
                                     .Include(x => x.Book)
                                     .Where(x => x.AuthorId == mostReadOrViewedAuthorId)
                                     .ToList();

            foreach (var book in booksFromFavAuthor)
            {
                _booksFromFavAuthorUserHasNotYetRead.Add(book.Book);
            }

            foreach (var bookUserRead in _booksUserRead)
            {
                if (_booksFromFavAuthorUserHasNotYetRead.Contains(bookUserRead.Book))
                {
                    _booksFromFavAuthorUserHasNotYetRead.Remove(bookUserRead.Book);
                }
            }
        }
예제 #2
0
        public ActionResult <IEnumerable <BookDto> > GetFiveBooksFromSameAuthor(Guid bookId)
        {
            var result = new List <BookDto>();

            var openedBook = _bookService
                             .AsQueryable()
                             .Include(x => x.BookAuthors)
                             .FirstOrDefault();

            if (openedBook is null)
            {
                return(BadRequest($"Book with id : {bookId} does not exist!"));
            }

            var authorId = openedBook.BookAuthors.FirstOrDefault().AuthorId;

            var idsOfAuthorsBooks = _bookAuthorService
                                    .AsQueryable()
                                    .Where(x => x.AuthorId == authorId)
                                    .Select(x => x.BookId)
                                    .ToList();

            idsOfAuthorsBooks.Shuffle();

            foreach (var id in idsOfAuthorsBooks.Take(5))
            {
                var book = _bookService
                           .AsQueryable()
                           .Include(x => x.BookAuthors)
                           .Include(x => x.Publisher)
                           .Include(x => x.Genre)
                           .FirstOrDefault(x => x.Id == id);

                result.Add(MapToBookDto(book));
            }

            return(Ok(result));
        }
        public ActionResult <BookAuthor> Get(Guid id)
        {
            var item = _bookAuthorService.AsQueryable()
                       .Where(x => x.Id == id)
                       .FirstOrDefault();

            if (item is null)
            {
                return(NoContent());
            }

            return(Ok(item));
        }