From 1d39b7c532006ee3b6b1e1f02bbb137810da8ae7 Mon Sep 17 00:00:00 2001 From: Peter Burian Date: Fri, 15 Nov 2024 07:45:08 +0000 Subject: [PATCH] Refactor low-level transactions to `DatabaseTransaction/Repository->transaction()` API to handle nested transactions - Important: It is recommended to update transactions to use new `DatabaseTransaction` API to ensure correct transaction handling within nested transactions. - Introduced new `DatabaseTransaction` API usable directly via DI or via `Repository->getTransaction()` remp/crm#3330 --- src/Models/Auth/Sso/SsoUserManager.php | 6 +++--- src/Repositories/AccessTokensRepository.php | 1 - src/Repositories/UserConnectedAccountsRepository.php | 1 - src/Repositories/UsersRepository.php | 1 - src/Tests/Repositories/CountriesRepositoryTest.php | 3 +++ 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Models/Auth/Sso/SsoUserManager.php b/src/Models/Auth/Sso/SsoUserManager.php index 6ced875..a0623b5 100644 --- a/src/Models/Auth/Sso/SsoUserManager.php +++ b/src/Models/Auth/Sso/SsoUserManager.php @@ -37,7 +37,7 @@ public function matchOrCreateUser( ): ActiveRow { // Transaction may cause hermes event handlers to fail occasionally because the data is not committed into db at the time of event handling. // TODO: Return transaction with remp/crm#2218 implementation -// $this->dbContext->beginTransaction(); +// $this->connectedAccountsRepository->getTransaction()->start(); // try { if ($loggedUserId) { $connectedAccount = $this->connectedAccountsRepository->getByExternalId($type, $externalId); @@ -81,10 +81,10 @@ public function matchOrCreateUser( ); } // } catch (\Exception $e) { -// $this->dbContext->rollBack(); +// $this->connectedAccountsRepository->getTransaction()->rollback(); // throw $e; // } -// $this->dbContext->commit(); +// $this->connectedAccountsRepository->getTransaction()->commit(); return $user; } diff --git a/src/Repositories/AccessTokensRepository.php b/src/Repositories/AccessTokensRepository.php index 6fbdc31..5dd500e 100644 --- a/src/Repositories/AccessTokensRepository.php +++ b/src/Repositories/AccessTokensRepository.php @@ -36,7 +36,6 @@ public function __construct( DataProviderManager $dataProviderManager ) { parent::__construct($database); - $this->database = $database; $this->emitter = $emitter; $this->userMetaRepository = $userMetaRepository; $this->dataProviderManager = $dataProviderManager; diff --git a/src/Repositories/UserConnectedAccountsRepository.php b/src/Repositories/UserConnectedAccountsRepository.php index 798cd8c..6fb3cfb 100644 --- a/src/Repositories/UserConnectedAccountsRepository.php +++ b/src/Repositories/UserConnectedAccountsRepository.php @@ -23,7 +23,6 @@ public function __construct( AuditLogRepository $auditLogRepository ) { parent::__construct($database); - $this->database = $database; $this->auditLogRepository = $auditLogRepository; } diff --git a/src/Repositories/UsersRepository.php b/src/Repositories/UsersRepository.php index 92f94f4..38945a3 100644 --- a/src/Repositories/UsersRepository.php +++ b/src/Repositories/UsersRepository.php @@ -53,7 +53,6 @@ public function __construct( Passwords $passwords ) { parent::__construct($database); - $this->database = $database; $this->emitter = $emitter; $this->auditLogRepository = $auditLogRepository; $this->hermesEmitter = $hermesEmmiter; diff --git a/src/Tests/Repositories/CountriesRepositoryTest.php b/src/Tests/Repositories/CountriesRepositoryTest.php index 55736dc..8694514 100644 --- a/src/Tests/Repositories/CountriesRepositoryTest.php +++ b/src/Tests/Repositories/CountriesRepositoryTest.php @@ -2,6 +2,7 @@ namespace Crm\UsersModule\Tests\Repositories; +use Crm\ApplicationModule\Database\DatabaseTransaction; use Crm\ApplicationModule\Seeders\CountriesSeeder; use Crm\ApplicationModule\Tests\DatabaseTestCase; use Crm\UsersModule\Repositories\CountriesRepository; @@ -41,6 +42,7 @@ public function testDefaultCountrySuccess() // default country set while initializing repository $testCountry = 'CZ'; $countriesRepository = new CountriesRepository($testCountry, $this->inject(Explorer::class)); + $countriesRepository->setTransaction($this->inject(DatabaseTransaction::class)); $country = $countriesRepository->defaultCountry(); $this->assertEquals($testCountry, $country->iso_code); } @@ -61,6 +63,7 @@ public function testDefaultCountryCountryIsoUnknownFailure() new \Exception("Unable to load default country from provided ISO code [UNKNOWN].") ); $countriesRepository = new CountriesRepository($testCountry, $this->inject(Explorer::class)); + $countriesRepository->setTransaction($this->inject(DatabaseTransaction::class)); $countriesRepository->defaultCountry(); } }