ldc-gen-game-web/app/Repositories/Fo/CrmRepository.php

57 lines
2.3 KiB
PHP

<?php
namespace App\Repositories\Fo;
use App\Models\Customer;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Support\Facades\Log;
use LDC\LDCCRM\Enums\ApiError;
use LDC\LDCCRM\Exceptions\ApiErrorException;
use LDC\LDCCRM\Exceptions\CrmException;
class CrmRepository
{
/**
* Fetch Crm Customer
*
* @param \App\Models\Customer $customer
* @return \LDC\LDCCRM\Models\Customer|\Illuminate\Http\RedirectResponse
* @throws \Illuminate\Http\Exceptions\HttpResponseException In case of failure or customer not activated.
*/
public function fetchCrmCustomer(Customer $customer): \LDC\LDCCRM\Models\Customer|\Illuminate\Http\RedirectResponse
{
try {
$crmUser = $customer->api_data;
// ? Le compte du joueur est vérifié ?
if (!$crmUser->status) {
// * Le joueur doit avoir un compte vérifié pour participer.
response()->redirectToRoute('fo.verification.notice')
->with('error', trans('Pour participer votre compte doit être activé'))
->throwResponse();
}
return $crmUser;
} catch (ApiErrorException $e) {
// * Customer is not found.
if ($e->getApiError()->equals(ApiError::modelNotFound)) {
// * Déconnexion immédiate et retour maison.
auth('frontend')->logout();
response()->redirectToRoute('fo.homepage')
->with('error', trans('Une erreur est survenue, compte introuvable.'))
->throwResponse();
}
report($e);
Log::error('Unhandled response ' . $e->getApiError()->label());
// * Retenter ?
back()->with('error', trans('Une erreur est survenue, veuillez réssayer.'))->throwResponse();
} catch (HttpResponseException $e) {
// * continue this
throw $e;
} catch (CrmException | \Exception $e) {
report($e);
// * Retenter ?
back()->with('error', trans('Une erreur est survenue, veuillez réssayer.'))->throwResponse();
} //end try
return back()->withErrors(trans('Une erreur est survenue, merci de réessayer ultérieurement.'));
}
}