aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/private/Comments/Manager.php37
1 files changed, 28 insertions, 9 deletions
diff --git a/lib/private/Comments/Manager.php b/lib/private/Comments/Manager.php
index 599c4e106d7..382ffbb9028 100644
--- a/lib/private/Comments/Manager.php
+++ b/lib/private/Comments/Manager.php
@@ -1123,16 +1123,35 @@ class Manager implements ICommentsManager {
}
private function addReaction(IComment $reaction): void {
+ // Prevent violate constraint
$qb = $this->dbConn->getQueryBuilder();
- $qb->insert('reactions')
- ->values([
- 'parent_id' => $qb->createNamedParameter($reaction->getParentId()),
- 'message_id' => $qb->createNamedParameter($reaction->getId()),
- 'actor_type' => $qb->createNamedParameter($reaction->getActorType()),
- 'actor_id' => $qb->createNamedParameter($reaction->getActorId()),
- 'reaction' => $qb->createNamedParameter($reaction->getMessage()),
- ])
- ->executeStatement();
+ $qb->select($qb->func()->count('*'))
+ ->from('reactions')
+ ->where($qb->expr()->eq('parent_id', $qb->createNamedParameter($reaction->getParentId())))
+ ->andWhere($qb->expr()->eq('actor_type', $qb->createNamedParameter($reaction->getActorType())))
+ ->andWhere($qb->expr()->eq('actor_id', $qb->createNamedParameter($reaction->getActorId())))
+ ->andWhere($qb->expr()->eq('reaction', $qb->createNamedParameter($reaction->getMessage())));
+ $result = $qb->executeQuery();
+ $exists = (int) $result->fetchOne();
+ if (!$exists) {
+ $qb = $this->dbConn->getQueryBuilder();
+ try {
+ $qb->insert('reactions')
+ ->values([
+ 'parent_id' => $qb->createNamedParameter($reaction->getParentId()),
+ 'message_id' => $qb->createNamedParameter($reaction->getId()),
+ 'actor_type' => $qb->createNamedParameter($reaction->getActorType()),
+ 'actor_id' => $qb->createNamedParameter($reaction->getActorId()),
+ 'reaction' => $qb->createNamedParameter($reaction->getMessage()),
+ ])
+ ->executeStatement();
+ } catch (\Exception $e) {
+ $this->logger->error($e->getMessage(), [
+ 'exception' => $e,
+ 'app' => 'core_comments',
+ ]);
+ }
+ }
$this->sumReactions($reaction->getParentId());
}