101 lines
3.5 KiB
PHP
101 lines
3.5 KiB
PHP
<?php namespace RVR\Repository;
|
|
|
|
use Container;
|
|
use Generator;
|
|
use RVR\PersistentData\Model\Community;
|
|
use RVR\PersistentData\Model\Currency;
|
|
use RVR\PersistentData\Model\Event;
|
|
use RVR\PersistentData\Model\Transaction;
|
|
use RVR\PersistentData\Model\User;
|
|
use SokoWeb\Database\Query\Select;
|
|
|
|
class TransactionRepository
|
|
{
|
|
public function getById(int $id): ?Transaction
|
|
{
|
|
return Container::$persistentDataManager->selectFromDbById($id, Transaction::class);
|
|
}
|
|
|
|
public function getAllByCommunity(Community $community, bool $useRelations = false, array $withRelations = []): Generator
|
|
{
|
|
$select = $this->selectAllByCommunity($community);
|
|
|
|
yield from Container::$persistentDataManager->selectMultipleFromDb($select, Transaction::class, $useRelations, $withRelations);
|
|
}
|
|
|
|
public function getAllByEvent(Event $event, bool $useRelations = false, array $withRelations = []): Generator
|
|
{
|
|
$select = $this->selectAllByEvent($event);
|
|
|
|
yield from Container::$persistentDataManager->selectMultipleFromDb($select, Transaction::class, $useRelations, $withRelations);
|
|
}
|
|
|
|
public function countAllByCommunity(Community $community): int
|
|
{
|
|
return $this->selectAllByCommunity($community)->count();
|
|
}
|
|
|
|
public function countAllByEvent(Event $event): int
|
|
{
|
|
return $this->selectAllByEvent($event)->count();
|
|
}
|
|
|
|
public function isAnyForUser(User $user): bool
|
|
{
|
|
$select = new Select(Container::$dbConnection, Transaction::getTable());
|
|
$select->where('payer_user_id', '=', $user->getId());
|
|
$select->orWhere('payee_user_id', '=', $user->getId());
|
|
$select->orWhere('payee_user_id', '=', null);
|
|
|
|
return $select->count() > 0;
|
|
}
|
|
|
|
public function isAnyCommon(): bool
|
|
{
|
|
$select = new Select(Container::$dbConnection, Transaction::getTable());
|
|
$select->where('payee_user_id', '=', null);
|
|
|
|
return $select->count() > 0;
|
|
}
|
|
|
|
public function isAnyForCurrency(Currency $currency): bool
|
|
{
|
|
$select = new Select(Container::$dbConnection, Transaction::getTable());
|
|
$select->where('currency_id', '=', $currency->getId());
|
|
|
|
return $select->count() > 0;
|
|
}
|
|
|
|
public function getPagedByCommunity(Community $community, int $page, int $itemsPerPage, bool $useRelations = false, array $withRelations = []): Generator
|
|
{
|
|
$select = $this->selectAllByCommunity($community);
|
|
$select->orderBy('time', 'DESC');
|
|
$select->paginate($page, $itemsPerPage);
|
|
|
|
yield from Container::$persistentDataManager->selectMultipleFromDb($select, Transaction::class, $useRelations, $withRelations);
|
|
}
|
|
|
|
public function getPagedByEvent(Event $event, int $page, int $itemsPerPage, bool $useRelations = false, array $withRelations = []): Generator
|
|
{
|
|
$select = $this->selectAllByEvent($event);
|
|
$select->orderBy('time', 'DESC');
|
|
$select->paginate($page, $itemsPerPage);
|
|
|
|
yield from Container::$persistentDataManager->selectMultipleFromDb($select, Transaction::class, $useRelations, $withRelations);
|
|
}
|
|
|
|
private function selectAllByCommunity(Community $community)
|
|
{
|
|
$select = new Select(Container::$dbConnection, Transaction::getTable());
|
|
$select->where('community_id', '=', $community->getId());
|
|
return $select;
|
|
}
|
|
|
|
private function selectAllByEvent(Event $event)
|
|
{
|
|
$select = new Select(Container::$dbConnection, Transaction::getTable());
|
|
$select->where('event_id', '=', $event->getId());
|
|
return $select;
|
|
}
|
|
}
|