Prevent violate constraint

Signed-off-by: Vitor Mattos <vitor@php.rio>
This commit is contained in:
Vitor Mattos 2022-01-09 19:10:20 -03:00
parent 1dda03e1b5
commit a7c0868a4c
No known key found for this signature in database
GPG key ID: B7AB4B76A7CA7318

View file

@ -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());
}