unique key violation exception is thrown as \Exception thus we need to check the reason

This commit is contained in:
thrillfall 2021-07-11 22:52:30 +02:00
parent bb38c41b2f
commit b09210655e
2 changed files with 16 additions and 12 deletions

View File

@ -4,7 +4,6 @@ declare(strict_types=1);
namespace OCA\GPodderSync\Controller; namespace OCA\GPodderSync\Controller;
use DateTime; use DateTime;
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
use GuzzleHttp\Psr7\Response; use GuzzleHttp\Psr7\Response;
use OCA\GPodderSync\Core\EpisodeAction\EpisodeActionReader; use OCA\GPodderSync\Core\EpisodeAction\EpisodeActionReader;
use OCA\GPodderSync\Db\EpisodeAction\EpisodeActionEntity; use OCA\GPodderSync\Db\EpisodeAction\EpisodeActionEntity;
@ -12,6 +11,7 @@ use OCA\GPodderSync\Db\EpisodeAction\EpisodeActionRepository;
use OCA\GPodderSync\Db\EpisodeAction\EpisodeActionWriter; use OCA\GPodderSync\Db\EpisodeAction\EpisodeActionWriter;
use OCP\AppFramework\Controller; use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\JSONResponse;
use OCP\DB\Exception;
use OCP\IRequest; use OCP\IRequest;
class EpisodeActionController extends Controller { class EpisodeActionController extends Controller {
@ -66,10 +66,12 @@ class EpisodeActionController extends Controller {
try { try {
return $this->episodeActionWriter->save($episodeActionEntity); return $this->episodeActionWriter->save($episodeActionEntity);
} catch (UniqueConstraintViolationException $ex) { } catch (\Exception $exception) {
$IdEpisodeActionEntityToUpdate = $this->episodeActionRepository->findByEpisode($episodeAction->getEpisode(), $this->userId)->getId(); if ($exception->getReason() === Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) {
$episodeActionEntity->setId($IdEpisodeActionEntityToUpdate); $idEpisodeActionEntityToUpdate = $this->episodeActionRepository->findByEpisode($episodeAction->getEpisode(), $this->userId)->getId();
return $this->episodeActionWriter->update($episodeActionEntity); $episodeActionEntity->setId($idEpisodeActionEntityToUpdate);
return $this->episodeActionWriter->update($episodeActionEntity);
}
} }
} }
@ -81,7 +83,7 @@ class EpisodeActionController extends Controller {
* @param int $since * @param int $since
* @return JSONResponse * @return JSONResponse
*/ */
public function list(int $since): JSONResponse { public function list(int $since): JSONResponse {
$sinceDatetime = $this->createDateTimeFromTimestamp($since); $sinceDatetime = $this->createDateTimeFromTimestamp($since);
return new JSONResponse([ return new JSONResponse([
"actions" => $this->episodeActionRepository->findAll($sinceDatetime, $this->userId), "actions" => $this->episodeActionRepository->findAll($sinceDatetime, $this->userId),

View File

@ -3,10 +3,10 @@ declare(strict_types=1);
namespace OCA\GPodderSync\Core\SubscriptionChange; namespace OCA\GPodderSync\Core\SubscriptionChange;
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
use OCA\GPodderSync\Db\SubscriptionChange\SubscriptionChangeEntity; use OCA\GPodderSync\Db\SubscriptionChange\SubscriptionChangeEntity;
use OCA\GPodderSync\Db\SubscriptionChange\SubscriptionChangeRepository; use OCA\GPodderSync\Db\SubscriptionChange\SubscriptionChangeRepository;
use OCA\GPodderSync\Db\SubscriptionChange\SubscriptionChangeWriter; use OCA\GPodderSync\Db\SubscriptionChange\SubscriptionChangeWriter;
use OCP\DB\Exception;
class SubscriptionChangeSaver { class SubscriptionChangeSaver {
@ -37,7 +37,7 @@ class SubscriptionChangeSaver {
$this->subscriptionChangeRequestParser = $subscriptionChangeRequestParser; $this->subscriptionChangeRequestParser = $subscriptionChangeRequestParser;
} }
public function saveSubscriptionChanges(string $urlsSubscribed, string $urlsUnsubscribed, string $userId) : void { public function saveSubscriptionChanges(string $urlsSubscribed, string $urlsUnsubscribed, string $userId): void {
$subscriptionChanges = $this->subscriptionChangeRequestParser->createSubscriptionChangeList($urlsSubscribed, $urlsUnsubscribed); $subscriptionChanges = $this->subscriptionChangeRequestParser->createSubscriptionChangeList($urlsSubscribed, $urlsUnsubscribed);
foreach ($subscriptionChanges as $urlChangedSubscriptionStatus) { foreach ($subscriptionChanges as $urlChangedSubscriptionStatus) {
$subscriptionChangeEntity = new SubscriptionChangeEntity(); $subscriptionChangeEntity = new SubscriptionChangeEntity();
@ -48,10 +48,12 @@ class SubscriptionChangeSaver {
try { try {
$this->subscriptionChangeWriter->create($subscriptionChangeEntity); $this->subscriptionChangeWriter->create($subscriptionChangeEntity);
} catch (UniqueConstraintViolationException $ex) { } catch (\Exception $exception) {
$idEpisodeActionEntityToUpdate = $this->subscriptionChangeRepository->findByUrl($subscriptionChangeEntity->getUrl(), $userId)->getId(); if ($exception->getReason() === Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) {
$subscriptionChangeEntity->setId($idEpisodeActionEntityToUpdate); $idEpisodeActionEntityToUpdate = $this->subscriptionChangeRepository->findByUrl($subscriptionChangeEntity->getUrl(), $userId)->getId();
$this->subscriptionChangeWriter->update($subscriptionChangeEntity); $subscriptionChangeEntity->setId($idEpisodeActionEntityToUpdate);
$this->subscriptionChangeWriter->update($subscriptionChangeEntity);
}
} }
} }
} }