55 lines
1.4 KiB
PHP
55 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace Modules\Api\Http\Controllers;
|
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
|
use Modules\Api\Http\Resources\ContentResource;
|
|
use Modules\Blog\Models\Blog;
|
|
use Modules\News\Models\News;
|
|
use Modules\Pages\Models\Page;
|
|
|
|
final class ContentController
|
|
{
|
|
public function pages(): AnonymousResourceCollection
|
|
{
|
|
return $this->many(Page::query()->where('status', 'published'));
|
|
}
|
|
|
|
public function blog(): AnonymousResourceCollection
|
|
{
|
|
return $this->many(Blog::query()->published());
|
|
}
|
|
|
|
public function news(): AnonymousResourceCollection
|
|
{
|
|
return $this->many(News::query()->published());
|
|
}
|
|
|
|
public function page(Page $page): ContentResource
|
|
{
|
|
abort_unless($page->status === 'published', 404);
|
|
|
|
return new ContentResource($page);
|
|
}
|
|
|
|
public function blogPost(Blog $blog): ContentResource
|
|
{
|
|
abort_unless(Blog::query()->published()->whereKey($blog)->exists(), 404);
|
|
|
|
return new ContentResource($blog);
|
|
}
|
|
|
|
public function newsArticle(News $news): ContentResource
|
|
{
|
|
abort_unless(News::query()->published()->whereKey($news)->exists(), 404);
|
|
|
|
return new ContentResource($news);
|
|
}
|
|
|
|
private function many(Builder $q): AnonymousResourceCollection
|
|
{
|
|
return ContentResource::collection($q->latest('updated_at')->paginate((int) config('api.pagination', 20)));
|
|
}
|
|
}
|