Migrate CardMapper to query builder
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
@@ -23,7 +23,9 @@
|
|||||||
|
|
||||||
namespace OCA\Deck\Db;
|
namespace OCA\Deck\Db;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
use OCP\AppFramework\Db\Entity;
|
use OCP\AppFramework\Db\Entity;
|
||||||
|
|
||||||
use OCP\AppFramework\Db\QBMapper;
|
use OCP\AppFramework\Db\QBMapper;
|
||||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||||
use OCP\IDBConnection;
|
use OCP\IDBConnection;
|
||||||
@@ -81,16 +83,20 @@ class CardMapper extends QBMapper implements IPermissionMapper {
|
|||||||
|
|
||||||
// make sure we only reset the notification flag if the duedate changes
|
// make sure we only reset the notification flag if the duedate changes
|
||||||
if (in_array('duedate', $entity->getUpdatedFields(), true)) {
|
if (in_array('duedate', $entity->getUpdatedFields(), true)) {
|
||||||
$existing = $this->find($entity->getId());
|
/** @var Card $existing */
|
||||||
if ($existing->getDuedate() !== $entity->getDuedate()) {
|
try {
|
||||||
$entity->setNotified(false);
|
$existing = $this->find($entity->getId());
|
||||||
|
if ($existing && $entity->getDuedate() !== $existing->getDuedate()) {
|
||||||
|
$entity->setNotified(false);
|
||||||
|
}
|
||||||
|
// remove pending notifications
|
||||||
|
$notification = $this->notificationManager->createNotification();
|
||||||
|
$notification
|
||||||
|
->setApp('deck')
|
||||||
|
->setObject('card', $entity->getId());
|
||||||
|
$this->notificationManager->markProcessed($notification);
|
||||||
|
} catch (Exception $e) {
|
||||||
}
|
}
|
||||||
// remove pending notifications
|
|
||||||
$notification = $this->notificationManager->createNotification();
|
|
||||||
$notification
|
|
||||||
->setApp('deck')
|
|
||||||
->setObject('card', $entity->getId());
|
|
||||||
$this->notificationManager->markProcessed($notification);
|
|
||||||
}
|
}
|
||||||
return parent::update($entity);
|
return parent::update($entity);
|
||||||
}
|
}
|
||||||
@@ -102,19 +108,13 @@ class CardMapper extends QBMapper implements IPermissionMapper {
|
|||||||
return parent::update($cardUpdate);
|
return parent::update($cardUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function find($id): Card {
|
||||||
* @param $id
|
|
||||||
* @return RelationalEntity if not found
|
|
||||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
|
|
||||||
* @throws \OCP\AppFramework\Db\DoesNotExistException
|
|
||||||
*/
|
|
||||||
public function find($id): Entity {
|
|
||||||
$qb = $this->db->getQueryBuilder();
|
$qb = $this->db->getQueryBuilder();
|
||||||
$qb->select('*')->from('deck_cards')
|
$qb->select('*')
|
||||||
|
->from('deck_cards')
|
||||||
->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)))
|
->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)))
|
||||||
->orderBy('order')
|
->orderBy('order')
|
||||||
->addOrderBy('id');
|
->addOrderBy('id');
|
||||||
|
|
||||||
/** @var Card $card */
|
/** @var Card $card */
|
||||||
$card = $this->findEntity($qb);
|
$card = $this->findEntity($qb);
|
||||||
$labels = $this->labelMapper->findAssignedLabelsForCard($card->id);
|
$labels = $this->labelMapper->findAssignedLabelsForCard($card->id);
|
||||||
@@ -131,10 +131,9 @@ class CardMapper extends QBMapper implements IPermissionMapper {
|
|||||||
->andWhere($qb->expr()->eq('archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)))
|
->andWhere($qb->expr()->eq('archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)))
|
||||||
->andWhere($qb->expr()->eq('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
|
->andWhere($qb->expr()->eq('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
|
||||||
->andWhere($qb->expr()->gt('last_modified', $qb->createNamedParameter($since, IQueryBuilder::PARAM_INT)))
|
->andWhere($qb->expr()->gt('last_modified', $qb->createNamedParameter($since, IQueryBuilder::PARAM_INT)))
|
||||||
|
->orderBy('order', 'id')
|
||||||
->setMaxResults($limit)
|
->setMaxResults($limit)
|
||||||
->setFirstResult($offset)
|
->setFirstResult($offset);
|
||||||
->orderBy('order')
|
|
||||||
->addOrderBy('id');
|
|
||||||
return $this->findEntities($qb);
|
return $this->findEntities($qb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,17 +152,35 @@ class CardMapper extends QBMapper implements IPermissionMapper {
|
|||||||
->from('deck_cards', 'c')
|
->from('deck_cards', 'c')
|
||||||
->innerJoin('c', 'deck_stacks', 's', $qb->expr()->eq('s.id', 'c.stack_id'))
|
->innerJoin('c', 'deck_stacks', 's', $qb->expr()->eq('s.id', 'c.stack_id'))
|
||||||
->andWhere($qb->expr()->in('s.board_id', $qb->createNamedParameter($boardIds, IQueryBuilder::PARAM_INT_ARRAY)));
|
->andWhere($qb->expr()->in('s.board_id', $qb->createNamedParameter($boardIds, IQueryBuilder::PARAM_INT_ARRAY)));
|
||||||
|
|
||||||
return $qb;
|
return $qb;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findDeleted($boardId, $limit = null, $offset = null) {
|
public function findDeleted($boardId, $limit = null, $offset = null) {
|
||||||
$qb = $this->queryCardsByBoard($boardId);
|
$qb = $this->db->getQueryBuilder();
|
||||||
$qb->andWhere($qb->expr()->neq('c.deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
|
$qb->select('*')
|
||||||
|
->from('deck_cards', 'c')
|
||||||
|
->join('c', 'deck_stacks', 's', $qb->expr()->eq('s.id', 'c.stack_id'))
|
||||||
|
->where($qb->expr()->eq('s.board_id', $qb->createNamedParameter($boardId)))
|
||||||
|
->andWhere($qb->expr()->neq('c.archived', $qb->createNamedParameter(true)))
|
||||||
|
->andWhere($qb->expr()->neq('c.deleted_at', $qb->createNamedParameter(0)))
|
||||||
|
->orderBy('c.order')
|
||||||
->setMaxResults($limit)
|
->setMaxResults($limit)
|
||||||
->setFirstResult($offset)
|
->setFirstResult($offset);
|
||||||
->orderBy('order')
|
return $this->findEntities($qb);
|
||||||
->addOrderBy('id');
|
}
|
||||||
|
|
||||||
|
public function findCalendarEntries($boardId, $limit = null, $offset = null) {
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
$qb->select('c.*')
|
||||||
|
->from('deck_cards', 'c')
|
||||||
|
->join('c', 'deck_stacks', 's', 's.id = c.stack_id')
|
||||||
|
->where($qb->expr()->eq('s.board_id', $qb->createNamedParameter($boardId)))
|
||||||
|
->andWhere($qb->expr()->neq('c.archived', $qb->createNamedParameter(true)))
|
||||||
|
->andWhere($qb->expr()->eq('c.deleted_at', $qb->createNamedParameter('0')))
|
||||||
|
->andWhere($qb->expr()->isNotNull('c.duedate'))
|
||||||
|
->orderBy('c.duedate')
|
||||||
|
->setMaxResults($limit)
|
||||||
|
->setFirstResult($offset);
|
||||||
return $this->findEntities($qb);
|
return $this->findEntities($qb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,19 +295,21 @@ class CardMapper extends QBMapper implements IPermissionMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function assignLabel($card, $label) {
|
public function assignLabel($card, $label) {
|
||||||
$sql = 'INSERT INTO `*PREFIX*deck_assigned_labels` (`label_id`,`card_id`) VALUES (?,?)';
|
$qb = $this->db->getQueryBuilder();
|
||||||
$stmt = $this->db->prepare($sql);
|
$qb->insert('deck_assigned_labels')
|
||||||
$stmt->bindParam(1, $label, \PDO::PARAM_INT);
|
->values([
|
||||||
$stmt->bindParam(2, $card, \PDO::PARAM_INT);
|
'label_id' => $qb->createNamedParameter($label, IQueryBuilder::PARAM_INT),
|
||||||
$stmt->execute();
|
'card_id' => $qb->createNamedParameter($card, IQueryBuilder::PARAM_INT),
|
||||||
|
]);
|
||||||
|
$qb->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function removeLabel($card, $label) {
|
public function removeLabel($card, $label) {
|
||||||
$sql = 'DELETE FROM `*PREFIX*deck_assigned_labels` WHERE card_id = ? AND label_id = ?';
|
$qb = $this->db->getQueryBuilder();
|
||||||
$stmt = $this->db->prepare($sql);
|
$qb->delete('deck_assigned_labels')
|
||||||
$stmt->bindParam(1, $card, \PDO::PARAM_INT);
|
->where($qb->expr()->eq('card_id', $qb->createNamedParameter($card)))
|
||||||
$stmt->bindParam(2, $label, \PDO::PARAM_INT);
|
->andWhere($qb->expr()->eq('label_id', $qb->createNamedParameter($label)));
|
||||||
$stmt->execute();
|
$qb->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isOwner($userId, $cardId) {
|
public function isOwner($userId, $cardId) {
|
||||||
|
|||||||
@@ -29,10 +29,11 @@ use OCP\AppFramework\Db\Mapper;
|
|||||||
* Class DeckMapper
|
* Class DeckMapper
|
||||||
*
|
*
|
||||||
* @package OCA\Deck\Db
|
* @package OCA\Deck\Db
|
||||||
|
* @deprecated use QBMapper
|
||||||
*
|
*
|
||||||
* TODO: Move to QBMapper once Nextcloud 14 is a minimum requirement
|
* TODO: Move to QBMapper once Nextcloud 14 is a minimum requirement
|
||||||
*/
|
*/
|
||||||
abstract class DeckMapper extends Mapper {
|
class DeckMapper extends Mapper {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $id
|
* @param $id
|
||||||
|
|||||||
@@ -144,6 +144,12 @@ class CardService {
|
|||||||
return $card;
|
return $card;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function findCalendarEntries($boardId) {
|
||||||
|
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ);
|
||||||
|
|
||||||
|
return $this->cardMapper->findCalendarEntries($boardId);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $title
|
* @param $title
|
||||||
* @param $stackId
|
* @param $stackId
|
||||||
|
|||||||
Reference in New Issue
Block a user