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 <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)); }