ldc-legaulois/app/Http/Controllers/Fo/HomeController.php
2024-04-24 16:23:56 +02:00

96 lines
3.9 KiB
PHP

<?php
namespace App\Http\Controllers\Fo;
use App\Enums\Settings\SettingsType;
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\SingleOptinRequest;
use App\Models\DemarcheSlide;
use App\Models\MainSlide;
use App\Models\Product;
use App\Models\GeneralSetting;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Vite;
use LDC\LDCCRM\Enums\ApiError;
use LDC\LDCCRM\Exceptions\ApiErrorException;
use LDC\LDCCRM\Exceptions\CrmException;
use LDC\LDCCRM\Models\SingleOptin;
class HomeController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
{
$mainSlideModels = MainSlide::query()->where('published', true)->orderBy('order', 'ASC')
->with('approach')->get();
$demarcheSlideModels = DemarcheSlide::query()->where('published', true)->orderBy('order', 'ASC')->get();
$productViews = Product::getProductsViewsByRange();
$hotNewsSettings = GeneralSetting::query()->where('type', SettingsType::hotNews)->first();
// FIXME: replace 'for loop' by eloquent orm on news publicated.
for ($i = 0; $i < 5; $i++) {
$newsModels[] = (object)['title' => "lorem ipsum"];
}
$newsModels = collect($newsModels);
// FIXME: replace 'for loop' by eloquent orm on recipes publicated.
for ($i = 0; $i < 5; $i++) {
$recipeModels[] = (object)[
'name' => "lorem ipsum", 'cooking_time' => '1h32', 'preparation_time' => '40min',
'difficulty' => 'ez', 'picture' => Vite::asset('resources/assets/images/tmp/product-picture.png'),
'packaging' => Vite::asset('resources/assets/images/tmp/packaging.png'), 'alt' => "lorem ipsum",
'title' => "lorem ipsum", 'isFavorite' => ($i % 2) ? true : false, 'tags' => (object)[(object)['name' =>
"lorem ipsum"], (object)['name' => "lorem ipsum"]]
];
};
$recipeModels = collect($recipeModels);
return view('fo.pages.home', compact(
'mainSlideModels',
'demarcheSlideModels',
'productViews',
'newsModels',
'recipeModels',
'hotNewsSettings'
));
}
/**
* Call the CRM to add a single optin
*
* @param \App\Http\Requests\Fo\SingleOptinRequest $request
* @return string|array|null|\Illuminate\Contracts\Translation\Translator
* @throws \LDC\LDCCRM\Exceptions\ValidationException ValidationException.
* @throws \Illuminate\Contracts\Container\BindingResolutionException BindingResolutionException.
*/
public function addOptIn(SingleOptinRequest $request)
{
try {
SingleOptin::setStatus($request->email, true);
return \response(trans("Votre inscription à la newsletter a été prise en compte"), 200);
} catch (ApiErrorException $e) {
// Il y a deja un customerInfo avec optin a true pour ce customer.
if ($e->getApiError()->equals(ApiError::singleOptinCustomerExists())) {
return trans('Vous êtes déjà inscrit avec cette adresse email');
}
\report($e);
return \response(trans('Une erreur est survenue, merci de réessayer ultérieurement'), 404);
} catch (CrmException $e) {
\report($e);
return \response(trans('Une erreur est survenue, merci de réessayer ultérieurement'), 404);
}
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\JsonResponse
*/
public function updateHotNewsSatus(): \Illuminate\Http\JsonResponse
{
// Cache::remember("hotNewsIsDisplayed", 60 * 60 * 24, fn() => true);
Cache::put('hotNewsIsDisplayed', true, now()->addHours(24));
return response()->json();
}
}