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);
                }
            }
        }
        public ActionResult RandomlyGenerateBookAuthors()
        {
            var    authors = _authorService.AsQueryable().ToList();
            var    books   = _bookService.AsQueryable().ToList();
            Random rnd     = new Random();

            for (int i = 0; i < books.Count; i++)
            {
                BookAuthor bookAuthor = new BookAuthor
                {
                    AuthorId = authors[rnd.Next(0, authors.Count - 1)].Id,
                    BookId   = books[i].Id
                };
                _bookAuthorService.AddBookAuthor(bookAuthor);
            }

            return(Ok());
        }
예제 #3
0
        public ActionResult <Author> Get(Guid id)
        {
            var item = _authorService.AsQueryable()
                       .Where(x => x.Id == id)
                       .FirstOrDefault();

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

            return(Ok(item));
        }
예제 #4
0
        private BookDto MapToBookDto(Book book)
        {
            var  x  = book.Id.ToString().ToUpper();
            Guid id = new Guid(book.Id.ToString().ToUpper());

            var bookAuthors = _bookAuthorService
                              .AsQueryable()
                              .Where(x => x.BookId == id)
                              .ToList();

            List <AuthorDto> authors = new List <AuthorDto>();

            foreach (var item in bookAuthors)
            {
                var author = _authorService
                             .AsQueryable()
                             .Where(x => x.Id == item.AuthorId)
                             .FirstOrDefault();

                authors.Add(MapToAuthorDto(author));
            }

            var bookDto = new BookDto
            {
                Id            = book.Id,
                ISBN          = book.ISBN,
                Cover         = book.Cover,
                Genre         = book.Genre.Name,
                NumberOfPages = book.NumberOfPages,
                PublishDate   = book.PublishDate,
                Publisher     = book.Publisher.Name,
                Title         = book.Title,
                Authors       = authors
            };

            return(bookDto);
        }