From 44cd3692564399dd8cd0d582cf617f5e126852c1 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sun, 27 Nov 2022 17:15:16 +1100 Subject: [PATCH] Fixes for client number race conditions when importing stripe clients --- app/PaymentDrivers/Stripe/ImportCustomers.php | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/app/PaymentDrivers/Stripe/ImportCustomers.php b/app/PaymentDrivers/Stripe/ImportCustomers.php index 377d2d53d386..a6aacdcc0fe6 100644 --- a/app/PaymentDrivers/Stripe/ImportCustomers.php +++ b/app/PaymentDrivers/Stripe/ImportCustomers.php @@ -26,6 +26,7 @@ use App\PaymentDrivers\StripePaymentDriver; use App\Utils\Ninja; use App\Utils\Traits\GeneratesCounter; use App\Utils\Traits\MakesHash; +use Illuminate\Database\QueryException; use Stripe\Customer; use Stripe\PaymentMethod; @@ -37,6 +38,8 @@ class ImportCustomers /** @var StripePaymentDriver */ public $stripe; + private bool $completed = true; + public $update_payment_methods; public function __construct(StripePaymentDriver $stripe) @@ -132,10 +135,30 @@ class ImportCustomers $client->name = $customer->name ? $customer->name : $customer->email; if (! isset($client->number) || empty($client->number)) { - $client->number = $this->getNextClientNumber($client); - } - $client->save(); + $x = 1; + + do { + try { + $client->number = $this->getNextClientNumber($client); + $client->saveQuietly(); + + $this->completed = false; + } catch (QueryException $e) { + $x++; + + if ($x > 10) { + $this->completed = false; + } + } + } while ($this->completed); + + + + } + else{ + $client->save(); + } $contact = ClientContactFactory::create($client->company_id, $client->user_id); $contact->client_id = $client->id;