ldc-gen-game-web/app/Repositories/Fo/CrmRepository.php
2026-10-20 12:27:49 +02:00

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
}
}