You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.2 KiB

  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
  5. * SPDX-License-Identifier: AGPL-3.0-or-later
  6. */
  7. namespace OCA\Talk\Model;
  8. use OCP\AppFramework\Db\DoesNotExistException;
  9. use OCP\AppFramework\Db\MultipleObjectsReturnedException;
  10. use OCP\AppFramework\Db\QBMapper;
  11. use OCP\DB\QueryBuilder\IQueryBuilder;
  12. use OCP\IDBConnection;
  13. /**
  14. * @method Poll findEntity(IQueryBuilder $query)
  15. * @method list<Poll> findEntities(IQueryBuilder $query)
  16. * @template-extends QBMapper<Poll>
  17. */
  18. class PollMapper extends QBMapper {
  19. public function __construct(IDBConnection $db) {
  20. parent::__construct($db, 'talk_polls', Poll::class);
  21. }
  22. /**
  23. * @return list<Poll>
  24. */
  25. public function getDraftsByRoomId(int $roomId): array {
  26. $query = $this->db->getQueryBuilder();
  27. $query->select('*')
  28. ->from($this->getTableName())
  29. ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT)))
  30. ->andWhere($query->expr()->eq('status', $query->createNamedParameter(Poll::STATUS_DRAFT, IQueryBuilder::PARAM_INT)))
  31. ->orderBy('id', 'ASC');
  32. return $this->findEntities($query);
  33. }
  34. /**
  35. * @throws DoesNotExistException
  36. * @throws MultipleObjectsReturnedException
  37. */
  38. public function getPollByRoomIdAndPollId(int $roomId, int $pollId): Poll {
  39. $query = $this->db->getQueryBuilder();
  40. $query->select('*')
  41. ->from($this->getTableName())
  42. ->where($query->expr()->eq('id', $query->createNamedParameter($pollId, IQueryBuilder::PARAM_INT)))
  43. ->andWhere($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT)));
  44. return $this->findEntity($query);
  45. }
  46. public function deleteByRoomId(int $roomId): void {
  47. $query = $this->db->getQueryBuilder();
  48. $query->delete($this->getTableName())
  49. ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT)));
  50. $query->executeStatement();
  51. }
  52. public function deleteByPollId(int $pollId): void {
  53. $query = $this->db->getQueryBuilder();
  54. $query->delete($this->getTableName())
  55. ->where($query->expr()->eq('id', $query->createNamedParameter($pollId, IQueryBuilder::PARAM_INT)));
  56. $query->executeStatement();
  57. }
  58. }