Select Git revision
PortfolioController.php
PortfolioController.php 2.62 KiB
<?php
namespace App\Http\Controllers\Public;
use App\Http\Controllers\Controller;
use App\Models\Category;
use App\Models\Creation;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Cache;
use Illuminate\View\View;
class PortfolioController extends Controller
{
public function index(): View
{
$creations = $this->getCachedCreations();
return view('public.portfolio', [
'creations' => $creations,
]);
}
public function api(): JsonResponse
{
$categories = Cache::rememberForever(Category::class, function () {
return Category::with([
'nameTranslationKey',
'nameTranslationKey.translations',
])->get();
});
$creations = $this->getCachedCreations();
$categoriesJson = $categories->map(function ($category) {
return [
'id' => $category->id,
'name' => $category->nameTranslationKey->getTranslation(),
'color' => $category->color,
];
});
$creationsJson = $creations->map(function (Creation $creation) {
return [
'id' => $creation->id,
'slug' => $creation->slug,
'name' => $creation->nameTranslationKey->getTranslation(),
'description' => $creation->shortDescriptionTranslationKey->getTranslation(),
'cover' => $creation->coverUploadedPicture->getMediumSizeUrl(),
'ratio' => ! empty($creation->coverUploadedPicture->ratio) ? $creation->coverUploadedPicture->ratio : '1:1',
'category' => [
'id' => $creation->category_id,
'name' => $creation->category->nameTranslationKey->getTranslation(),
'color' => $creation->category->color,
],
];
});
return response()->json([
'categories' => $categoriesJson,
'creations' => $creationsJson,
]);
}
public function show(string $slug): View
{
$creation = Creation::where('slug', $slug)
->withAllRelations()->firstOrFail();
return view('public.portfolio-show', [