<?php
namespace Bgt\ApiBundle\Controller;
use App\Entity\Admission;
use App\Entity\Degree;
use App\Entity\DegreeGroup;
use App\Entity\User;
use App\Entity\UserSession;
use Bgt\ApiBundle\Services\TokenService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\User\UserInterface;
#[Route('/_open/degree')]
class DegreeOpenController extends ApiController
{
#[Route('/', name: 'api_degree_index', methods: ['GET', 'POST'])]
public function login(
Request $request,
EntityManagerInterface $em
): Response
{
$degreeGroupId = 0;
if($request->isMethod(Request::METHOD_POST)) {
$request = $this->transformJsonBody($request);
$degreeGroupId = $request->request->getInt('degreeGroupId',0);
}
/** @var DegreeGroup $degreeGroup */
$degreeGroup = $em->getRepository(DegreeGroup::class)->find($degreeGroupId);
$qb = $em->getRepository(Degree::class)
->createQueryBuilder('degree')
->leftJoin('degree.degreeGroup', 'degreeGroup');
$qb->addSelect('degreeGroup');
if ($degreeGroup) {
$qb
->Where($qb->expr()->eq('degreeGroup.id', ':degreeGroupId'))
->setParameter('degreeGroupId', $degreeGroup->getId())
->andWhere($qb->expr()->neq('degree.isDeleted', ':boolTrue'))
->andWhere($qb->expr()->neq('degree.isTraining', ':boolTrue'))
->setParameter('boolTrue', true);
}
$degrees = $qb
->orderBy('degree.id', "DESC")
->getQuery()
->getArrayResult();
return $this->respond([
'degrees' => $degrees,
]);
}
#[Route('/training', name: 'api_degree_training', methods: ['GET'])]
public function training(
Request $request,
EntityManagerInterface $em
): Response
{
$user = $this->getUser();
$qb = $em->getRepository(Degree::class)
->createQueryBuilder('degree')
;
$qb
->select('degree.id')
->andWhere($qb->expr()->eq('degree.isTraining', ':checkTrue'))
->andWhere($qb->expr()->eq('degree.isDeleted', ':checkFalse'))
->setParameter('checkTrue', true)
->setParameter('checkFalse', false)
;
$degrees = $qb
->getQuery()
->getSingleColumnResult();
$admission = $em->getRepository(Admission::class)
->createQueryBuilder('admission')
->leftJoin('admission.degree', 'degree');
$admission->addSelect('degree');
if ($degrees[0]) {
$admission
->andWhere($admission->expr()->in('degree.id', ':degreeIds'))
->andWhere($qb->expr()->neq('admission.isDeleted', ':boolTrue'))
->setParameter('degreeIds', $degrees)
->setParameter('boolTrue', true)
;
}
$admissions = $admission
->addOrderBy('admission.id', 'DESC')
->getQuery()
->getArrayResult();
return $this->respond([
'admissions' => $admissions,
'degree' => $degrees[0]
]);
}
}