<?php
namespace App\Controller;
use App\Service\EmailService;
use App\Service\ExamRegistrationsService;
use App\Service\SchoolSessionsService;
use App\Service\TestSessionsService;
use App\Util\ParameterUtil;
use Doctrine\ORM\Query\Expr\Base;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class TestSessionController extends BaseController
{
/**
* @var TestSessionsService
*/
private $sessionsService;
private ExamRegistrationsService $examRegistrationsService;
private EmailService $emailService;
private SchoolSessionsService $schoolSessionsService;
public function __construct(TestSessionsService $sessionsService,
ExamRegistrationsService $examRegistrationsService,
SchoolSessionsService $schoolSessionsService,
EmailService $emailService)
{
$this->sessionsService = $sessionsService;
$this->examRegistrationsService = $examRegistrationsService;
$this->emailService = $emailService;
$this->schoolSessionsService = $schoolSessionsService;
}
/**
* @Route("/api/getOpenedSessions")
*/
public function getOpenedSessions(Request $request)
{
$studentId = parent::getStudentId($request);
$response = $this->sessionsService->getOpenedSessions($studentId);
return new Response(json_encode($response));
}
/**
* @Route("/api/getSession")
*/
public function getSession(Request $request)
{
$sessionId = $request->query->get('sessionId');
$response = $this->sessionsService->getSession($sessionId);
return $this->json($response);
}
/**
* @Route("/api/getOotSessionInfo")
*/
public function getOotSessionInfo(Request $request)
{
$sessionId = $request->query->get('sessionId');
$response = $this->sessionsService->getOotSessionInfo($sessionId);
return $this->json($response);
}
/**
* @Route("/api/admin/getAllSessions")
*/
public function getAllSessions(Request $request){
try {
$content = $this->getContent($request);
$startDate = ParameterUtil::getRequired($content->get('startDate'));
$endDate = $content->get('endDate')?:null;
$response = $this->sessionsService->getAllSessions($startDate, $endDate);
}
catch (\Exception $e){
return new Response($e->getMessage(), 500);
}
return $this->json($response);
}
/**
* @Route("/api/getSchoolSessions")
*/
public function getSchoolSessions(Request $request)
{
$schoolId = $request->query->get('schoolId');
$response = $this->sessionsService->getSchoolSessions($schoolId);
return $this->json($response);
}
/**
* @Route("/api/getSessionsByStudentId")
*/
public function getSessionsByStudentId(Request $request)
{
$studentId = parent::getStudentId($request);
$response = $this->sessionsService->getSessionsByStudentId($studentId);
return new Response(json_encode($response));
}
/**
* @Route("/api/admin/createSchoolSession")
*/
public function createSchoolSession(Request $request)
{
$content = $this->getContent($request);
$response = $this->sessionsService->createSchoolSession(
ParameterUtil::getRequired($content->get('schoolId')),
ParameterUtil::getRequired($content->get('gender')),
ParameterUtil::getRequired($content->get('testDate')),
ParameterUtil::getRequired($content->get('startTime')),
ParameterUtil::getRequired($content->get('closingDate')),
ParameterUtil::getRequired($content->get('returnDate')),
$content->get('testSessionId')
);
return $this->json($response);
}
/**
* @Route("/api/admin/addEditTestSession")
*/
public function addEditTestSession(Request $request)
{
$content = $this->getContent($request);
$response = $this->sessionsService->AddEditTestSession(
$content->get('schoolId'),
$content->get('locationId'),
ParameterUtil::getRequired($content->get('sessionType')),
ParameterUtil::getRequired($content->get('gender')),
ParameterUtil::getRequired($content->get('testDate')),
ParameterUtil::getRequired($content->get('startTime')),
ParameterUtil::getRequired($content->get('closingDate')),
ParameterUtil::getRequired($content->get('closingTime')), // fixed
ParameterUtil::getRequired($content->get('openingDate')), // fixed
ParameterUtil::getRequired($content->get('returnDate')), // fixed
$content->get('session_last_date'),
$content->get('seats'),
$content->get('proctors'),
$content->get('testSessionId')
);
return $this->json($response);
}
/**
* @Route("/api/admin/deleteSession")
*/
public function deleteSession(Request $request)
{
$content = $this->getContent($request);
try{
$response = $this->sessionsService->deleteSession( ParameterUtil::getRequired($content->get('sessionId')));
}
catch (\Exception $e){
return new Response($e->getMessage(), 500);
}
return $this->json($response);
}
/**
* @Route("/api/admin/getStudentsPerSession")
*/
public function getStudentsPerSession(Request $request)
{
$content = $this->getContent($request);
$response = $this->sessionsService->getStudentsPerSession(ParameterUtil::getRequired($content->get('sessionId')));
return $this->json($response);
}
/**
* @Route("/api/admin/getStudentsBySessionPerSchool")
*/
public function getStudentsBySessionPerSchool(Request $request)
{
$content = $this->getContent($request);
$response = $this->sessionsService->getStudentsAndExamsBySessionPerSchool(ParameterUtil::getRequired($content->get('schoolId')));
return $this->json($response);
}
/**
* @Route("/api/cron/sendNextDaySchoolSessionsList")
*/
public function doSchoolSessionDailyProcesses(Request $request)
{
$auth = $request->headers->get('token-auth');
if ($auth == $_ENV['TTI_REQUEST_AUTH']) {
$error = '';
try{
$this->schoolSessionsService->sendCopeSchoolSessionReport();
} catch (\Throwable $ex) {
$this->emailService->sendSchoolSessionReportError($ex->getMessage());
$error = $ex->getMessage();
}
try {
$response = $this->sessionsService->sendNextDaysSchoolSessionsList();
} catch (\Exception $ex) {
$error = $error.' '.$ex->getMessage();
}
try {
$response =$response.'--'.$this->sessionsService->sendYesterdayNonSchoolSessionsReport();
} catch (\Exception $ex) {
return new Response($error.' '.$ex->getMessage(), 500);
}
} else {
return new Response('false authentication', 401);
}
return new Response($error.' '.$response);
}
/**
* @Route("/api/runSchoolSessionDailyProcesses")
*/
public function runSchoolSessionDailyProcesses(Request $request)
{
$auth = $request->headers->get('token-auth');
if ($auth == $_ENV['TTI_REQUEST_AUTH']) {
$error = '';
try{
$content = $this->getContent($request);
$date = $content->get('date')?:null;
$this->schoolSessionsService->sendCopeSchoolSessionReport($date);
}catch (\Throwable $ex) {
$this->emailService->sendSchoolSessionReportError($ex->getMessage());
$error = $ex->getMessage();
}
try {
$response = $this->sessionsService->sendNextDaysSchoolSessionsList();
} catch (Exception $ex) {
return new Response($error.' '.$ex->getMessage(), 500);
}
} else {
return new Response('false authentication', 401);
}
return new Response($error.' '.$response);
}
/**
* @Route("/api/cancelUntakenRegistrationsBySessionId")
*/
public function cancelUntakenRegistrationsBySessionId(Request $request){
$auth = $request->headers->get('token-auth');
if ($auth == $_ENV['TTI_REQUEST_AUTH']) {
$error = '';
try{
$content = $this->getContent($request);
$sessionId = ParameterUtil::getRequired($content->get('sessionId'));
$this->schoolSessionsService->cancelUntakenRegistrationsBySessionId($sessionId);
}catch (\Throwable $ex) {
$error = $ex->getMessage();
}
} else {
return new Response('false authentication', 401);
}
return new Response($error.' ');
}
/**
* @Route("/api/admin/getSessionLogs")
*/
public function getSessionLogs(Request $request): Response
{
try {
$content = $this->getContent($request);
$sessionId = ParameterUtil::getRequired($content->get('testSessionId'));
$logs = $this->sessionsService->getLogsForSession($sessionId);
return $this->json($logs);
} catch (\Exception $e) {
return new Response($e->getMessage(), 500);
}
}
}