Optimise queries when preparing card related notifications
Signed-off-by: Raul Ferreira Fuentes <raul@nextcloud.com>
This commit is contained in:
@@ -25,6 +25,13 @@ namespace OCA\Deck\Db;
|
|||||||
|
|
||||||
use Sabre\VObject\Component\VCalendar;
|
use Sabre\VObject\Component\VCalendar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @method int getId()
|
||||||
|
* @method int getBoardId()
|
||||||
|
* @method int getDeletedAt()
|
||||||
|
* @method int getLastModified()
|
||||||
|
* @method int getOrder()
|
||||||
|
*/
|
||||||
class Stack extends RelationalEntity {
|
class Stack extends RelationalEntity {
|
||||||
protected $title;
|
protected $title;
|
||||||
protected $boardId;
|
protected $boardId;
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ namespace OCA\Deck\Db;
|
|||||||
|
|
||||||
use OCP\AppFramework\Db\DoesNotExistException;
|
use OCP\AppFramework\Db\DoesNotExistException;
|
||||||
use OCP\AppFramework\Db\Entity;
|
use OCP\AppFramework\Db\Entity;
|
||||||
|
use OCP\AppFramework\Db\IMapperException;
|
||||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||||
use OCP\IDBConnection;
|
use OCP\IDBConnection;
|
||||||
|
|
||||||
@@ -48,6 +49,24 @@ class StackMapper extends DeckMapper implements IPermissionMapper {
|
|||||||
return $this->findEntity($sql, [$id]);
|
return $this->findEntity($sql, [$id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $cardId
|
||||||
|
* @return Stack|null
|
||||||
|
*/
|
||||||
|
public function findStackFromCardId($cardId): ?Stack {
|
||||||
|
$sql = <<<SQL
|
||||||
|
SELECT s.*
|
||||||
|
FROM `*PREFIX*deck_stacks` as `s`
|
||||||
|
INNER JOIN `*PREFIX*deck_cards` as `c` ON s.id = c.stack_id
|
||||||
|
WHERE c.id = ?
|
||||||
|
SQL;
|
||||||
|
try {
|
||||||
|
return $this->findEntity($sql, [$cardId]);
|
||||||
|
} catch (IMapperException $e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function findAll($boardId, $limit = null, $offset = null) {
|
public function findAll($boardId, $limit = null, $offset = null) {
|
||||||
$sql = 'SELECT * FROM `*PREFIX*deck_stacks` WHERE `board_id` = ? AND deleted_at = 0 ORDER BY `order`, `id`';
|
$sql = 'SELECT * FROM `*PREFIX*deck_stacks` WHERE `board_id` = ? AND deleted_at = 0 ORDER BY `order`, `id`';
|
||||||
|
|||||||
@@ -101,15 +101,12 @@ class Notifier implements INotifier {
|
|||||||
switch ($notification->getSubject()) {
|
switch ($notification->getSubject()) {
|
||||||
case 'card-assigned':
|
case 'card-assigned':
|
||||||
$cardId = $notification->getObjectId();
|
$cardId = $notification->getObjectId();
|
||||||
$boardId = $this->cardMapper->findBoardId($cardId);
|
$stack = $this->stackMapper->findStackFromCardId($cardId);
|
||||||
|
$boardId = $stack ? $stack->getBoardId() : null;
|
||||||
if (!$boardId) {
|
if (!$boardId) {
|
||||||
throw new AlreadyProcessedException();
|
throw new AlreadyProcessedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
$card = $this->cardMapper->find($cardId);
|
|
||||||
$stackId = $card->getStackId();
|
|
||||||
$stack = $this->stackMapper->find($stackId);
|
|
||||||
|
|
||||||
$initiator = $this->userManager->get($params[2]);
|
$initiator = $this->userManager->get($params[2]);
|
||||||
if ($initiator !== null) {
|
if ($initiator !== null) {
|
||||||
$dn = $initiator->getDisplayName();
|
$dn = $initiator->getDisplayName();
|
||||||
@@ -147,15 +144,12 @@ class Notifier implements INotifier {
|
|||||||
break;
|
break;
|
||||||
case 'card-overdue':
|
case 'card-overdue':
|
||||||
$cardId = $notification->getObjectId();
|
$cardId = $notification->getObjectId();
|
||||||
$boardId = $this->cardMapper->findBoardId($cardId);
|
$stack = $this->stackMapper->findStackFromCardId($cardId);
|
||||||
|
$boardId = $stack ? $stack->getBoardId() : null;
|
||||||
if (!$boardId) {
|
if (!$boardId) {
|
||||||
throw new AlreadyProcessedException();
|
throw new AlreadyProcessedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
$card = $this->cardMapper->find($cardId);
|
|
||||||
$stackId = $card->getStackId();
|
|
||||||
$stack = $this->stackMapper->find($stackId);
|
|
||||||
|
|
||||||
$notification->setParsedSubject(
|
$notification->setParsedSubject(
|
||||||
(string) $l->t('The card "%s" on "%s" has reached its due date.', $params)
|
(string) $l->t('The card "%s" on "%s" has reached its due date.', $params)
|
||||||
);
|
);
|
||||||
@@ -182,15 +176,12 @@ class Notifier implements INotifier {
|
|||||||
break;
|
break;
|
||||||
case 'card-comment-mentioned':
|
case 'card-comment-mentioned':
|
||||||
$cardId = $notification->getObjectId();
|
$cardId = $notification->getObjectId();
|
||||||
$boardId = $this->cardMapper->findBoardId($cardId);
|
$stack = $this->stackMapper->findStackFromCardId($cardId);
|
||||||
|
$boardId = $stack ? $stack->getBoardId() : null;
|
||||||
if (!$boardId) {
|
if (!$boardId) {
|
||||||
throw new AlreadyProcessedException();
|
throw new AlreadyProcessedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
$card = $this->cardMapper->find($cardId);
|
|
||||||
$stackId = $card->getStackId();
|
|
||||||
$stack = $this->stackMapper->find($stackId);
|
|
||||||
|
|
||||||
$initiator = $this->userManager->get($params[2]);
|
$initiator = $this->userManager->get($params[2]);
|
||||||
if ($initiator !== null) {
|
if ($initiator !== null) {
|
||||||
$dn = $initiator->getDisplayName();
|
$dn = $initiator->getDisplayName();
|
||||||
|
|||||||
Reference in New Issue
Block a user