+ protected $baseRepo;
+ protected $tagRepo;
+ protected $imageRepo;
+
+ /**
+ * BookRepo constructor.
+ * @param $tagRepo
+ */
+ public function __construct(BaseRepo $baseRepo, TagRepo $tagRepo, ImageRepo $imageRepo)
+ {
+ $this->baseRepo = $baseRepo;
+ $this->tagRepo = $tagRepo;
+ $this->imageRepo = $imageRepo;
+ }
+
+ /**
+ * Get all books in a paginated format.
+ */
+ public function getAllPaginated(int $count = 20, string $sort = 'name', string $order = 'asc'): LengthAwarePaginator
+ {
+ return Book::visible()->orderBy($sort, $order)->paginate($count);
+ }
+
+ /**
+ * Get the books that were most recently viewed by this user.
+ */
+ public function getRecentlyViewed(int $count = 20): Collection
+ {
+ return Book::visible()->withLastView()
+ ->having('last_viewed_at', '>', 0)
+ ->orderBy('last_viewed_at', 'desc')
+ ->take($count)->get();
+ }
+
+ /**
+ * Get the most popular books in the system.
+ */
+ public function getPopular(int $count = 20): Collection
+ {
+ return Book::visible()->withViewCount()
+ ->having('view_count', '>', 0)
+ ->orderBy('view_count', 'desc')
+ ->take($count)->get();
+ }
+
+ /**
+ * Get the most recently created books from the system.
+ */
+ public function getRecentlyCreated(int $count = 20): Collection
+ {
+ return Book::visible()->orderBy('created_at', 'desc')
+ ->take($count)->get();
+ }
+