app/services/recommend_service.rb

Summary

Maintainability
A
0 mins
Test Coverage
class RecommendService

  def sort_books_by_popularity(books)
    books.group_by { |book| book }.sort_by { |k, v| v.count }.reverse.map { |book, v|
      book.sort_id = v.count
      book
    }
  end


  def get_books_from_users(users)
    books = []
    users.each { |user| books += user.book_instances }
    books.map! { |book| book.sortable_book }
  end


  def sort_users_books_by_popularity(users)
    sort_books_by_popularity get_books_from_users(users)
  end


  def get_similar_users(target_user)
    filtered_user = User.all.select { |user| (user.book_ids & target_user.book_ids).length > 0 }
    filtered_user.delete target_user
    filtered_user.sort_by { |user| (user.book_ids & target_user.book_ids).length }.reverse
  end

  def recommend_books_by_similarity (target_user)
    users = get_similar_users target_user
    sort_users_books_by_popularity users
  end

  def random_books
    books = BookInstance.all.sample(GlobalConstants::RANDOM_BOOKS_COUNT)
    books.map! { |book| book.sortable_book }
    sort_books_by_popularity books
  end

end