59 lines
2.1 KiB
PHP
59 lines
2.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Repositories\Fo;
|
|
|
|
use App\Models\Customer;
|
|
use Exception;
|
|
use Illuminate\Http\Exceptions\HttpResponseException;
|
|
use Illuminate\Http\RedirectResponse;
|
|
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
|
|
*
|
|
* @throws HttpResponseException In case of failure or customer not activated.
|
|
*/
|
|
public function fetchCrmCustomer(Customer $customer): \LDC\LDCCRM\Models\Customer | 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
|
|
}
|
|
}
|