fix: SonarQube WebhookStripeController - constante, returns, CC
- LOG_PI_SUCCEEDED constante (4 occurrences) - handlePaymentSucceeded : extraction checkPaymentPreConditions (4->2 returns, CC 17->~10) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -24,6 +24,7 @@ use Twig\Environment;
|
||||
class WebhookStripeController extends AbstractController
|
||||
{
|
||||
private const NOTIFICATION_EMAIL = 'notification@e-cosplay.fr';
|
||||
private const LOG_PI_SUCCEEDED = 'Stripe payment_intent.succeeded [';
|
||||
|
||||
public function __construct(
|
||||
private LoggerInterface $logger,
|
||||
@@ -103,25 +104,11 @@ class WebhookStripeController extends AbstractController
|
||||
/** @phpstan-ignore-next-line */
|
||||
$metadata = $paymentIntent->metadata instanceof \Stripe\StripeObject ? $paymentIntent->metadata->toArray() : (array) ($paymentIntent->metadata ?? []);
|
||||
$advertId = $metadata['advert_id'] ?? null;
|
||||
$advert = null !== $advertId ? $this->em->getRepository(Advert::class)->find((int) $advertId) : null;
|
||||
|
||||
if (null === $advertId) {
|
||||
$this->logger->info('Stripe payment_intent.succeeded ['.$channel.']: pas de advert_id dans metadata', ['metadata' => $metadata]);
|
||||
|
||||
return new JsonResponse(['status' => 'ok', 'action' => 'no_advert']);
|
||||
}
|
||||
|
||||
$advert = $this->em->getRepository(Advert::class)->find((int) $advertId);
|
||||
if (null === $advert) {
|
||||
$this->logger->warning('Stripe payment_intent.succeeded ['.$channel.']: advert introuvable', ['advert_id' => $advertId]);
|
||||
|
||||
return new JsonResponse(['status' => 'ok', 'action' => 'advert_not_found']);
|
||||
}
|
||||
|
||||
// Eviter les doublons (webhook recu sur main ET connect pour le meme paiement)
|
||||
if (Advert::STATE_ACCEPTED === $advert->getState() && $advert->getStripePaymentId() === $paymentIntent->id) {
|
||||
$this->logger->info('Stripe payment_intent.succeeded ['.$channel.']: deja traite', ['pi' => $paymentIntent->id]);
|
||||
|
||||
return new JsonResponse(['status' => 'ok', 'action' => 'already_processed']);
|
||||
$earlyResult = $this->checkPaymentPreConditions($advert, $advertId, $paymentIntent, $channel, $metadata);
|
||||
if (null !== $earlyResult) {
|
||||
return $earlyResult;
|
||||
}
|
||||
|
||||
/** @phpstan-ignore-next-line */
|
||||
@@ -215,11 +202,39 @@ class WebhookStripeController extends AbstractController
|
||||
$this->logger->error('Stripe webhook: erreur envoi mail admin: '.$e->getMessage());
|
||||
}
|
||||
|
||||
$this->logger->info('Stripe payment_intent.succeeded ['.$channel.']: advert '.$numOrder.' -> accepted, '.$amount.' EUR, methode '.$method.($isConnect ? ' (connect)' : ''));
|
||||
$this->logger->info(self::LOG_PI_SUCCEEDED.$channel.']: advert '.$numOrder.' -> accepted, '.$amount.' EUR, methode '.$method.($isConnect ? ' (connect)' : ''));
|
||||
|
||||
return new JsonResponse(['status' => 'ok', 'action' => 'payment_accepted', 'advert' => $numOrder, 'amount' => $amount, 'method' => $method, 'channel' => $channel]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param array<string, mixed> $metadata
|
||||
*/
|
||||
private function checkPaymentPreConditions(?Advert $advert, ?string $advertId, object $paymentIntent, string $channel, array $metadata): ?JsonResponse
|
||||
{
|
||||
if (null === $advertId) {
|
||||
$this->logger->info(self::LOG_PI_SUCCEEDED.$channel.']: pas de advert_id dans metadata', ['metadata' => $metadata]);
|
||||
|
||||
return new JsonResponse(['status' => 'ok', 'action' => 'no_advert']);
|
||||
}
|
||||
|
||||
if (null === $advert) {
|
||||
$this->logger->warning(self::LOG_PI_SUCCEEDED.$channel.']: advert introuvable', ['advert_id' => $advertId]);
|
||||
|
||||
return new JsonResponse(['status' => 'ok', 'action' => 'advert_not_found']);
|
||||
}
|
||||
|
||||
if (Advert::STATE_ACCEPTED === $advert->getState() && $advert->getStripePaymentId() === $paymentIntent->id) {
|
||||
$this->logger->info(self::LOG_PI_SUCCEEDED.$channel.']: deja traite', ['pi' => $paymentIntent->id]);
|
||||
|
||||
return new JsonResponse(['status' => 'ok', 'action' => 'already_processed']);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user