<?php
namespace App\Resolver;
use Overblog\GraphQLBundle\Definition\Resolver\QueryInterface;
use Doctrine\ORM\EntityManagerInterface;
use App\BackendBundle\Model\DataTransfer\InterestFieldCount;
use App\BackendBundle\Model\GraphQL\InterestField;
use App\Entity\InterestField as InterestFieldBr;
class InterestFieldResolver implements QueryInterface {
private EntityManagerInterface $em;
public function __construct(EntityManagerInterface $em) {
$this->em = $em;
}
public function getFields() {
$interestFields = $this->em->getRepository(InterestFieldBr::class)->findBy(array(), array('interestName' => 'ASC'));
$ifJobMapping = $this->getInterestFieldJobMappings();
$interstFieldCount = $this->getInterestFieldMappings();
$fields = array();
/* @var $interestFieldBr InterestFieldBr */
foreach ($interestFields as $interestFieldBr) {
$interestField = new InterestField();
$interestFieldID = $interestFieldBr->getId();
$interestField->setId($interestFieldID);
$interestField->setInterestName($interestFieldBr->getInterestName());
$interestField->setSubHeading($interestFieldBr->getSubHeading());
if (array_key_exists($interestFieldID, $ifJobMapping)) {
$interestField->setCountJobs($ifJobMapping[$interestFieldID]);
}
$count = $interstFieldCount->getCountByID($interestFieldID);
$interestField->setCountProviders($count);
$fields[] = $interestField;
}
return $fields;
}
private function getInterestFieldJobMappings() {
$connection = $this->em->getConnection();
$sql = "SELECT interest_field_id as id, count(*) as num "
. "FROM job_interest_field_mapping as jifm "
. "GROUP BY interest_field_id";
/* @var $stmt Statement */
$stmt = $connection->prepare($sql);
$stmtResult = $stmt->executeQuery();
$entries = $stmtResult->fetchAllAssociative();
$result = array();
foreach ($entries as $data) {
$id = $data['id'];
$count = $data['num'];
$result[$id] = $count;
}
return $result;
}
private function getInterestFieldMappings() {
$interestFieldCount = new InterestFieldCount();
$this->getInterestFieldCompanyMappings($interestFieldCount);
$this->getInterestFieldSchoolMappings($interestFieldCount);
return $interestFieldCount;
}
private function getInterestFieldCompanyMappings(InterestFieldCount $interstFieldCount) {
$connection = $this->em->getConnection();
$sql = "SELECT interest_field_id as id, count(*) as num "
. "FROM company_profile_interest_field_mapping as cpifm "
. "LEFT JOIN company_profile as cp ON cpifm.company_profile_id=cp.id "
. "WHERE cp.is_visible=1 "
. "GROUP BY interest_field_id";
/* @var $stmt Statement */
$stmt = $connection->prepare($sql);
$stmtResult = $stmt->executeQuery();
$entries = $stmtResult->fetchAllAssociative();
foreach ($entries as $data) {
$id = $data['id'];
$count = $data['num'];
$interstFieldCount->addCount($id, $count);
}
}
private function getInterestFieldSchoolMappings(InterestFieldCount $interstFieldCount) {
$connection = $this->em->getConnection();
$sql = "SELECT interest_field_id as id, count(*) as num "
. "FROM school_interest_field_mapping as sifm "
. "LEFT JOIN school as sch ON sifm.school_id=sch.id "
. "LEFT JOIN school_profile as sp ON sp.school_id=sch.id "
. "WHERE sp.is_visible=1 "
. "GROUP BY interest_field_id";
/* @var $stmt Statement */
$stmt = $connection->prepare($sql);
$stmtResult = $stmt->executeQuery();
$entries = $stmtResult->fetchAllAssociative();
foreach ($entries as $data) {
$id = $data['id'];
$count = $data['num'];
$interstFieldCount->addCount($id, $count);
}
}
}