Completed
Pull Request — master (#794)
by René
04:12
created

VoteMapper   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 118
Duplicated Lines 0 %

Test Coverage

Coverage 5.77%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 44
c 2
b 0
f 0
dl 0
loc 118
ccs 3
cts 52
cp 0.0577
rs 10
wmc 7

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 2 1
A findByPoll() 0 10 1
A findSingleVote() 0 15 1
A findParticipantsByPoll() 0 10 1
A deleteByPollAndUser() 0 12 1
A findParticipantsVotes() 0 13 1
A deleteByPoll() 0 9 1
1
<?php
2
/**
3
 * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <[email protected]>
4
 *
5
 * @author Vinzenz Rosenkranz <[email protected]>
6
 * @author René Gieling <[email protected]>
7
*
8
 * @license GNU AGPL version 3 or any later version
9
 *
10
 *  This program is free software: you can redistribute it and/or modify
11
 *  it under the terms of the GNU Affero General Public License as
12
 *  published by the Free Software Foundation, either version 3 of the
13
 *  License, or (at your option) any later version.
14
 *
15
 *  This program is distributed in the hope that it will be useful,
16
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 *  GNU Affero General Public License for more details.
19
 *
20
 *  You should have received a copy of the GNU Affero General Public License
21
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
 *
23
 */
24
25
namespace OCA\Polls\Db;
26
27
use OCP\DB\QueryBuilder\IQueryBuilder;
28
use OCP\IDBConnection;
29
use OCP\AppFramework\Db\QBMapper;
30
31
class VoteMapper extends QBMapper {
32
33
	/**
34
	 * VoteMapper constructor.
35
	 * @param IDBConnection $db
36
	 */
37 1
	public function __construct(IDBConnection $db) {
38 1
		parent::__construct($db, 'polls_votes', '\OCA\Polls\Db\Vote');
39 1
	}
40
41
	/**
42
	 * @param int $pollId
43
	 * @throws \OCP\AppFramework\Db\DoesNotExistException if not found
44
	 * @return array
45
	 */
46
47
	public function findByPoll($pollId) {
48
		$qb = $this->db->getQueryBuilder();
49
50
		$qb->select('*')
51
		   ->from($this->getTableName())
52
		   ->where(
53
			   $qb->expr()->eq('poll_id', $qb->createNamedParameter($pollId, IQueryBuilder::PARAM_INT))
54
		   );
55
56
		return $this->findEntities($qb);
57
	}
58
59
	/**
60
	 * @param int $pollId
61
	 * @throws \OCP\AppFramework\Db\DoesNotExistException if not found
62
	 * @return Vote
63
	 */
64
65
	public function findSingleVote($pollId, $optionText, $userId) {
66
		$qb = $this->db->getQueryBuilder();
67
68
		$qb->select('*')
69
		   ->from($this->getTableName())
70
		   ->where(
71
			   $qb->expr()->eq('poll_id', $qb->createNamedParameter($pollId, IQueryBuilder::PARAM_INT))
72
		   )
73
		   ->andWhere(
74
			   $qb->expr()->eq('vote_option_text', $qb->createNamedParameter($optionText, IQueryBuilder::PARAM_STR))
75
		   )
76
		   ->andWhere(
77
			   $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR))
78
		   );
79
		return $this->findEntity($qb);
80
	}
81
82
	/**
83
	 * @param int $pollId
84
	 * @throws \OCP\AppFramework\Db\DoesNotExistException if not found
85
	 * @return array
86
	 */
87
	public function findParticipantsByPoll($pollId) {
88
		$qb = $this->db->getQueryBuilder();
89
90
		$qb->selectDistinct('user_id')
91
		   ->from($this->getTableName())
92
		   ->where(
93
			   $qb->expr()->eq('poll_id', $qb->createNamedParameter($pollId, IQueryBuilder::PARAM_INT))
94
		   );
95
96
		return $this->findEntities($qb);
97
	}
98
99
	/**
100
	 * @param int $pollId
101
	 * @throws \OCP\AppFramework\Db\DoesNotExistException if not found
102
	 * @return array
103
	 */
104
	public function findParticipantsVotes($pollId, $userId) {
105
		$qb = $this->db->getQueryBuilder();
106
107
		$qb->select('*')
108
		   ->from($this->getTableName())
109
		   ->where(
110
			   $qb->expr()->eq('poll_id', $qb->createNamedParameter($pollId, IQueryBuilder::PARAM_INT))
111
		   )
112
		   ->andWhere(
113
			   $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR))
114
		   );
115
116
		return $this->findEntities($qb);
117
	}
118
119
	/**
120
	 * @param int $pollId
121
	 * @param string $userId
122
	 */
123
	 public function deleteByPollAndUser($pollId, $userId) {
124
		$qb = $this->db->getQueryBuilder();
125
126
		$qb->delete($this->getTableName())
127
		   ->where(
128
			   $qb->expr()->eq('poll_id', $qb->createNamedParameter($pollId, IQueryBuilder::PARAM_INT))
129
		   )
130
		   ->andWhere(
131
			   $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR))
132
		   );
133
134
	   $qb->execute();
135
	}
136
137
	/**
138
	 * @param int $pollId
139
	 */
140
	public function deleteByPoll($pollId) {
141
		$qb = $this->db->getQueryBuilder();
142
143
		$qb->delete($this->getTableName())
144
		->where(
145
			$qb->expr()->eq('poll_id', $qb->createNamedParameter($pollId, IQueryBuilder::PARAM_INT))
146
		);
147
148
		$qb->execute();
149
	}
150
}
151