3 namespace BookStack\Entities\Queries;
5 use BookStack\Entities\Models\Bookshelf;
6 use BookStack\Exceptions\NotFoundException;
7 use Illuminate\Database\Eloquent\Builder;
9 class BookshelfQueries implements ProvidesEntityQueries
11 public function start(): Builder
13 return Bookshelf::query();
16 public function findVisibleById(int $id): ?Bookshelf
18 return $this->start()->scopes('visible')->find($id);
21 public function findVisibleBySlugOrFail(string $slug): Bookshelf
23 /** @var ?Bookshelf $shelf */
24 $shelf = $this->start()
26 ->where('slug', '=', $slug)
29 if ($shelf === null) {
30 throw new NotFoundException(trans('errors.bookshelf_not_found'));
36 public function visibleForList(): Builder
38 return $this->start()->scopes('visible');
41 public function visibleForListWithCover(): Builder
43 return $this->visibleForList()->with('cover');
46 public function recentlyViewedForCurrentUser(): Builder
48 return $this->visibleForList()
49 ->scopes('withLastView')
50 ->having('last_viewed_at', '>', 0)
51 ->orderBy('last_viewed_at', 'desc');
54 public function popularForList(): Builder
56 return $this->visibleForList()
57 ->scopes('withViewCount')
58 ->having('view_count', '>', 0)
59 ->orderBy('view_count', 'desc');