From cb76cbb9b1bb67c9b5f13e6989d31d69b9df54fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=91cze=20Bence?= Date: Tue, 2 May 2023 02:56:16 +0200 Subject: [PATCH] RVRNEXT-28 add further checks before manupulating db --- src/Controller/CommunityController.php | 22 ++++++++++++++++++++++ src/Repository/TransactionRepository.php | 17 +++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/Controller/CommunityController.php b/src/Controller/CommunityController.php index 6873e4a..39ffa82 100644 --- a/src/Controller/CommunityController.php +++ b/src/Controller/CommunityController.php @@ -199,7 +199,19 @@ class CommunityController implements IAuthenticationRequired ]); } } else { + if ($this->transactionRepository->isAnyCommon()) { + return new JsonContent([ + 'error' => ['errorText' => 'There are transactions with common payee!'] + ]); + } + $user = $this->userRepository->getById(\Container::$request->post('user_id')); + if ($this->communityMemberRepository->getByCommunityAndUser($community, $user) !== null) { + return new JsonContent([ + 'error' => ['errorText' => 'This user is already a member of this community.'] + ]); + } + $communityMember = new CommunityMember(); $communityMember->setCommunity($community); $communityMember->setUser($user); @@ -295,6 +307,16 @@ class CommunityController implements IAuthenticationRequired return null; } + if ($this->transactionRepository->isAnyForCurrency($currency)) { + return new JsonContent([ + 'error' => ['errorText' => 'There are transactions with this currency!'] + ]); + } + + foreach ($this->currencyExchangeRatesRepository->getAllByCurrency($currency) as $currencyExchangeRate) { + \Container::$persistentDataManager->deleteFromDb($currencyExchangeRate); + } + \Container::$persistentDataManager->deleteFromDb($currency); return new JsonContent(['success' => true]); diff --git a/src/Repository/TransactionRepository.php b/src/Repository/TransactionRepository.php index 6ab3f78..4535e74 100644 --- a/src/Repository/TransactionRepository.php +++ b/src/Repository/TransactionRepository.php @@ -3,6 +3,7 @@ use Container; use Generator; use RVR\PersistentData\Model\Community; +use RVR\PersistentData\Model\Currency; use RVR\PersistentData\Model\Transaction; use RVR\PersistentData\Model\User; use SokoWeb\Database\Query\Select; @@ -36,6 +37,22 @@ class TransactionRepository return $select->count() > 0; } + public function isAnyCommon(): bool + { + $select = new Select(Container::$dbConnection, Transaction::getTable()); + $select->where('payee_user_id', '=', null); + + return $select->count() > 0; + } + + public function isAnyForCurrency(Currency $currency): bool + { + $select = new Select(Container::$dbConnection, Transaction::getTable()); + $select->where('currency_id', '=', $currency->getId()); + + return $select->count() > 0; + } + public function getPagedByCommunity(Community $community, int $start, int $limit, bool $useRelations = false, array $withRelations = []): Generator { $select = new Select(Container::$dbConnection);