<?php
namespace OCA\Chores\Db;
use OCP\IDBConnection;
use OCP\AppFramework\Db\QBMapper;
class MemberMapper extends QBMapper {
public function __construct(IDBConnection $db) {
parent::__construct($db, 'chores_team_members', Member::class);
}
public function teamHasMember(int $teamId, string $userId): bool {
$qb = $this->db->getQueryBuilder();
$qb->select('m.team_id')
->from($this->tableName, 'm')
->where(
$qb->expr()->eq('m.member_user_id', $qb->createNamedParameter($userId))
)
->andWhere(
$qb->expr()->eq('m.team_id', $qb->createNamedParameter($teamId))
)
;
$found = $this->findEntities($qb);
return count($found) > 0;
}
public function findByTeam(int $teamId) {
$qb = $this->db->getQueryBuilder();
$qb->select('m.*')
->from($this->tableName, 'm')
->where(
$qb->expr()->eq('m.team_id', $qb->createNamedParameter($teamId))
)
;
return $this->findEntities($qb);
}
public function addPoints(string $memberUid, int $points) {
$qb = $this->db->getQueryBuilder();
$affectedRows =
$qb->update($this->tableName)
->where(
$qb->expr()->eq('member_user_id', $qb->createNamedParameter($memberUid))
)
->set('points',
$qb->func()->add('points', $qb->createNamedParameter($points))
)
->execute();
assert(is_int($affectedRows));
if ($affectedRows != 1) {
throw new \Exception("could not add points to user");
}
}
public function addTeamMember(int $teamId, string $userId) {
$qb = $this->db->getQueryBuilder();
$affectedRows =
$qb->insert($this->tableName)
->values([
"team_id" => $qb->createNamedParameter($teamId),
"member_user_id" => $qb->createNamedParameter($userId),
"points" => $qb->createNamedParameter(0),
])
->execute();
assert(is_int($affectedRows));
if ($affectedRows != 1) {
throw new \Exception("could not add user to team");
}
}
}