ldc-le-gaulois-pro/app/Http/Controllers/Fo/ExpertiseController.php

130 lines
4.1 KiB
PHP
Raw Permalink Normal View History

2022-10-26 16:53:58 +02:00
<?php
namespace App\Http\Controllers\Fo;
use App\Enums\Advices\AdviceTypeEnum;
use App\Enums\ExpertiseProducts\ExpertiseProductPageEnum;
2023-01-12 11:35:06 +00:00
use App\Enums\Products\ProductSpeciesEnum;
use App\Enums\StaticPageType;
use App\Http\Controllers\Controller;
2023-01-12 11:35:06 +00:00
use App\Models\Advice;
use App\Models\ExpertiseProduct;
2023-01-12 11:35:06 +00:00
use App\Models\Product;
use App\Models\StaticPage;
2024-02-05 09:33:08 +01:00
use Illuminate\Contracts\Database\Eloquent\Builder;
2022-10-26 16:53:58 +02:00
class ExpertiseController extends Controller
{
/**
* Show expertise page (duck).
2022-10-26 16:53:58 +02:00
*
* @return \Illuminate\Contracts\View\View
*
2022-10-26 16:53:58 +02:00
*/
public function canard(): \Illuminate\Contracts\View\View
2022-10-26 16:53:58 +02:00
{
return view('fo.pages.expertise.canard', $this->getExpertiseData(
StaticPageType::expertise_duck,
ExpertiseProductPageEnum::duck,
ProductSpeciesEnum::canard
));
2022-10-26 16:53:58 +02:00
}
/**
* Show expertise page (turkey).
2022-10-26 16:53:58 +02:00
*
* @return \Illuminate\Contracts\View\View
*/
public function dinde(): \Illuminate\Contracts\View\View
2022-10-26 16:53:58 +02:00
{
return view('fo.pages.expertise.dinde', $this->getExpertiseData(
StaticPageType::expertise_turkey,
ExpertiseProductPageEnum::turkey,
ProductSpeciesEnum::dinde
));
2022-10-26 16:53:58 +02:00
}
/**
* Show expertise page (rabbit).
2022-10-26 16:53:58 +02:00
*
* @return \Illuminate\Contracts\View\View
*/
public function lapin(): \Illuminate\Contracts\View\View
2022-10-26 16:53:58 +02:00
{
return view('fo.pages.expertise.lapin', $this->getExpertiseData(
StaticPageType::expertise_rabbit,
ExpertiseProductPageEnum::rabbit,
ProductSpeciesEnum::lapin
));
2022-10-26 16:53:58 +02:00
}
/**
* Show expertise page (guineafowl).
2022-10-26 16:53:58 +02:00
*
* @return \Illuminate\Contracts\View\View
*/
public function pintade(): \Illuminate\Contracts\View\View
2022-10-26 16:53:58 +02:00
{
return view('fo.pages.expertise.pintade', $this->getExpertiseData(
StaticPageType::expertise_guineafowl,
ExpertiseProductPageEnum::guineafowl,
ProductSpeciesEnum::pintade
));
2022-10-26 16:53:58 +02:00
}
/**
* Show expertise page (chicken).
2022-10-26 16:53:58 +02:00
*
* @return \Illuminate\Contracts\View\View
*/
public function poulet(): \Illuminate\Contracts\View\View
2022-10-26 16:53:58 +02:00
{
return view('fo.pages.expertise.poulet', $this->getExpertiseData(
StaticPageType::expertise_chicken,
ExpertiseProductPageEnum::chicken,
ProductSpeciesEnum::poulet
));
}
/**
* Get all expertise data needed.
*
* @param \App\Enums\StaticPageType $enumStaticPageType
* @param \App\Enums\ExpertiseProducts\ExpertiseProductPageEnum $enumExpertiseProductPage
* @param \App\Enums\Products\ProductSpeciesEnum $enumProductSpecies
*
* @return array
*/
public function getExpertiseData(
StaticPageType $enumStaticPageType,
ExpertiseProductPageEnum $enumExpertiseProductPage,
ProductSpeciesEnum $enumProductSpecies
): array {
/** @var \App\Models\StaticPage $staticPageModel */
$staticPageModel = StaticPage::query()->where('type', $enumStaticPageType->value())->first();
/** @var \App\Models\ExpertiseProduct $productVipModels */
$productVipModels = ExpertiseProduct::query()->where('page', $enumExpertiseProductPage->value())->get();
/** @var \App\Models\Product $productModels */
$productModels = Product::query()->where('published', true)
->where('species', $enumProductSpecies->value())
2023-01-12 11:35:06 +00:00
->inRandomOrder()
->limit(3)
->with('subrange.range')
->get();
2024-02-05 11:37:54 +01:00
$recipeModels = Advice::query()->with('tags')
2024-02-05 09:33:08 +01:00
->whereHas('products', function (Builder $q) use ($enumProductSpecies) {
return $q->where('species', $enumProductSpecies->value());
})->where('type', AdviceTypeEnum::recipes)->limit(3)->get();
return [
'staticPageModel' => $staticPageModel,
'productVipModels' => $productVipModels,
'productModels' => $productModels,
'recipeModels' => $recipeModels
];
2022-10-26 16:53:58 +02:00
}
}