<?php
namespace Harmonizely\Repository\Common;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\ORMException;
use Doctrine\Persistence\ManagerRegistry;
use Harmonizely\Entity\Common\CompanyEntity;
use Harmonizely\Repository\Common\Contract\ICompanyRepository;
use Harmonizely\Types\Common\CompanyStatus;
class CompanyRepository extends ServiceEntityRepository implements ICompanyRepository
{
/**
* @param ManagerRegistry $registry
*/
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, CompanyEntity::class);
}
/**
* @param CompanyEntity $entity
* @return CompanyEntity
* @throws ORMException
* @throws OptimisticLockException
*/
public function save(CompanyEntity $entity): CompanyEntity
{
$this->getEntityManager()->persist($entity);
$this->getEntityManager()->flush();
return $entity;
}
/**
* @param string $login
* @return CompanyEntity|null
*/
public function getCompanyByLogin(string $login): ?CompanyEntity
{
return $this->findOneBy(['login' => $login]);
}
/**
* @return array|string[]
*/
public function getActiveCompanyLogins(): array
{
$qb = $this->createQueryBuilder('company');
$qb
->select('company.login')
->where('company.status = :status')
->setParameter('status', CompanyStatus::STATUS_ACTIVE);
$rows = $qb->getQuery()->getScalarResult();
$res = [];
foreach ($rows as $row) {
$res[] = $row['login'];
}
return $res;
}
/**
* @return array|string[]
*/
public function getAllCompanyLogins(): array
{
$qb = $this->createQueryBuilder('company');
$qb
->select('company.login')
->orderBy('company.id', 'DESC');
$rows = $qb->getQuery()->getScalarResult();
$res = [];
foreach ($rows as $row) {
$res[] = $row['login'];
}
return $res;
}
}