Skip to content
Snippets Groups Projects
Select Git revision
  • 1de77bfadc3eaa18806157a59e81f22b0c842b97
  • master default protected
2 results

PortfolioController.php

Blame
  • 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', [