%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/cospend/lib/Db/ |
Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/cospend/lib/Db/MemberMapper.php |
<?php /** * Nextcloud - cospend * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Julien Veyssier <julien-nc@posteo.net> * @copyright Julien Veyssier 2024 */ namespace OCA\Cospend\Db; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\MultipleObjectsReturnedException; use OCP\AppFramework\Db\QBMapper; use OCP\DB\Exception; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; /** * @extends QBMapper<Member> */ class MemberMapper extends QBMapper { public const TABLE_NAME = 'cospend_members'; public function __construct( IDBConnection $db, ) { parent::__construct($db, self::TABLE_NAME, Member::class); } /** * @param string $projectId * @param string $name * @return Member|null */ public function getMemberByName(string $projectId, string $name): ?Member { $qb = $this->db->getQueryBuilder(); $qb->select('*') ->from(self::TABLE_NAME) ->where( $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ) ->andWhere( $qb->expr()->eq('name', $qb->createNamedParameter($name, IQueryBuilder::PARAM_STR)) ); try { return $this->findEntity($qb); } catch (DoesNotExistException | MultipleObjectsReturnedException | Exception $e) { return null; } } /** * @param string $projectId * @param string $userId * @return Member|null */ public function getMemberByUserid(string $projectId, string $userId): ?Member { $qb = $this->db->getQueryBuilder(); $qb->select('*') ->from(self::TABLE_NAME) ->where( $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ) ->andWhere( $qb->expr()->eq('userid', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) ); try { return $this->findEntity($qb); } catch (DoesNotExistException | MultipleObjectsReturnedException | Exception $e) { return null; } } /** * @param string $projectId * @param int $memberId * @return Member|null */ public function getMemberById(string $projectId, int $memberId): ?Member { $qb = $this->db->getQueryBuilder(); $qb->select('*') ->from(self::TABLE_NAME) ->where( $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ) ->andWhere( $qb->expr()->eq('id', $qb->createNamedParameter($memberId, IQueryBuilder::PARAM_INT)) ); try { return $this->findEntity($qb); } catch (DoesNotExistException | MultipleObjectsReturnedException | Exception $e) { return null; } } /** * @param string $projectId * @param string|null $order * @param int|null $lastchanged * @return array */ public function getMembers(string $projectId, ?string $order = null, ?int $lastchanged = null): array { $qb = $this->db->getQueryBuilder(); $sqlOrder = 'name'; if ($order !== null) { if ($order === 'lowername') { $sqlOrder = $qb->func()->lower('name'); } else { $sqlOrder = $order; } } $qb->select('*') ->from(self::TABLE_NAME) ->where( $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); if ($lastchanged !== null) { $qb->andWhere( $qb->expr()->gt('lastchanged', $qb->createNamedParameter($lastchanged, IQueryBuilder::PARAM_INT)) ); } $qb->orderBy($sqlOrder, 'ASC'); try { return $this->findEntities($qb); } catch (Exception $e) { return []; } } /** * Get bills involving a member (as a payer or an ower) * * @param int $memberId * @param int|null $deleted * @return array * @throws Exception */ public function getBillIdsOfMember(int $memberId, ?int $deleted = 0): array { $qb = $this->db->getQueryBuilder(); $qb->select('bi.id') ->from('cospend_bill_owers', 'bo') ->innerJoin('bo', 'cospend_bills', 'bi', $qb->expr()->eq('bo.billid', 'bi.id')) ->innerJoin('bo', self::TABLE_NAME, 'm', $qb->expr()->eq('bo.memberid', 'm.id')); $or = $qb->expr()->orx(); $or->add($qb->expr()->eq('bi.payerid', $qb->createNamedParameter($memberId, IQueryBuilder::PARAM_INT))); $or->add($qb->expr()->eq('bo.memberid', $qb->createNamedParameter($memberId, IQueryBuilder::PARAM_INT))); $qb->where($or); if ($deleted !== null) { $qb->andWhere( $qb->expr()->eq('bi.deleted', $qb->createNamedParameter($deleted, IQueryBuilder::PARAM_INT)) ); } $req = $qb->executeQuery(); $billIds = []; while ($row = $req->fetch()) { $billIds[] = $row['id']; } return $billIds; } }