Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 10 |
CRAP | |
0.00% |
0 / 234 |
GradeService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 10 |
2550.00 | |
0.00% |
0 / 234 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
saveGrade | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 23 |
|||
saveGrades | |
0.00% |
0 / 1 |
132.00 | |
0.00% |
0 / 35 |
|||
validateSaveGradeRequest | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 10 |
|||
insertGrade | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 19 |
|||
insertGrades | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 28 |
|||
updateGrade | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 22 |
|||
deleteGrade | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 21 |
|||
searchGrade | |
0.00% |
0 / 1 |
90.00 | |
0.00% |
0 / 48 |
|||
getGradeDetails | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 25 |
<?php | |
namespace com\linways\ec\core\service; | |
use com\linways\ec\core\logging\Events; | |
use com\linways\core\ams\professional\logging\AMSLogger; | |
use com\linways\base\util\SecurityUtils; | |
use com\linways\base\util\MakeSingletonTrait; | |
use com\linways\ec\core\exception\ECCoreException; | |
use com\linways\ec\core\request\SearchGradeRequest; | |
use com\linways\ec\core\mapper\GradeServiceMapper; | |
use com\linways\ec\core\constant\FilterModeConstants; | |
use com\linways\ec\core\constant\StatusConstants; | |
use com\linways\ec\core\service\GradeService; | |
use com\linways\ec\core\dto\Grade; | |
use com\linways\cbe\core\logging\entities\GradeEntity; | |
class GradeService extends BaseService | |
{ | |
use MakeSingletonTrait; | |
private function __construct() { | |
$this->mapper = GradeServiceMapper::getInstance()->getMapper(); | |
$this->logger = AMSLogger::getLogger('exam-controller-log'); | |
} | |
/** | |
* Save grade | |
* @param Grade $grades | |
* @return String $id | |
*/ | |
public function saveGrade(Grade $grade) | |
{ | |
$grade = $this->realEscapeObject($grade); | |
$grade->createdBy = $GLOBALS['userId'] ?? $grade->createdBy; | |
$grade->updatedBy = $GLOBALS['userId'] ?? $grade->updatedBy; | |
$this->validateSaveGradeRequest($grade); | |
try{ | |
if(!empty($grade->id)) { | |
$grade->id = $this->updateGrade($grade); | |
} | |
else { | |
$grade->id = $this->insertGrade($grade); | |
} | |
}catch(\Exception $e) { | |
if($e->getCode() !== ECCoreException::INVALID_PARAMETERS && $e->getCode() !== ECCoreException::EMPTY_PARAMETERS && $e->getCode() !== ECCoreException::DUPLICATE_ENTRY) { | |
throw new ECCoreException(ECCoreException::ERROR_SAVING_GRADE, "Failed to save grade! Please try again"); | |
} else if ($e->getCode() === ECCoreException::DUPLICATE_ENTRY) { | |
throw new ECCoreException (ECCoreException::DUPLICATE_ENTRY, "Cannot create grade.".$grade->name." already exists!"); | |
} else { | |
throw new ECCoreException ($e->getCode(), $e->getMessage()); | |
} | |
} | |
return $grade->id; | |
} | |
/** | |
* Save grades | |
* @param Grade Array $grades | |
* @param String $gradeSchemeId | |
* @return Grade Array $grades | |
*/ | |
public function saveGrades(Grade $grades, $gradeSchemeId) | |
{ | |
$grades = $this->realEscapeArray($grades); | |
$gradeSchemeId = $this->realEscapeString($gradeSchemeId); | |
foreach ($grades as $grade) { | |
$grade->createdBy = $GLOBALS['userId'] ?? $grade->createdBy; | |
$grade->updatedBy = $GLOBALS['userId'] ?? $grade->updatedBy; | |
$grade->gradeSchemeId = $gradeSchemeId; | |
$this->validateSaveGradeRequest($grade); | |
} | |
try{ | |
$isSaveAll = count(array_unique(array_column($grades, "id"))) < 2 && reset(array_unique(array_column($grades, "id"))) == null; | |
if ($isSaveAll) { | |
$grades = $this->insertGrades($grade); | |
} | |
else { | |
foreach ($grades as $grade) { | |
if(!empty($grade->id)) { | |
$grade->id = $this->updateGrade($grade); | |
} | |
else { | |
$grade->id = $this->insertGrade($grade); | |
} | |
} | |
} | |
}catch(\Exception $e) { | |
if($e->getCode() !== ECCoreException::INVALID_PARAMETERS && $e->getCode() !== ECCoreException::EMPTY_PARAMETERS && $e->getCode() !== ECCoreException::DUPLICATE_ENTRY) { | |
throw new ECCoreException(ECCoreException::ERROR_SAVING_GRADE, "Failed to save grade! Please try again"); | |
} else if ($e->getCode() === ECCoreException::DUPLICATE_ENTRY) { | |
throw new ECCoreException (ECCoreException::DUPLICATE_ENTRY, "Cannot create grades. already exists!"); | |
} else { | |
throw new ECCoreException ($e->getCode(), $e->getMessage()); | |
} | |
} | |
return $grades; | |
} | |
/** | |
* Validate Grade Request Before Saving | |
* @param Grade $grade | |
* @return NULL | |
*/ | |
private function validateSaveGradeRequest($grade) | |
{ | |
if(empty($grade->gradeSchemeId)) | |
throw new ECCoreException(ECCoreException::EMPTY_PARAMETERS, "Grade scheme is empty! Please choose a scheme for grade"); | |
if(empty($grade->name)) | |
throw new ECCoreException(ECCoreException::EMPTY_PARAMETERS, "Grade name is empty! Please enter a name for grade"); | |
if(empty($grade->rangeFrom)) | |
throw new ECCoreException(ECCoreException::EMPTY_PARAMETERS, "Grade 'Range from' is empty! Please enter a 'Range from' for grade"); | |
if(empty($grade->rangeTo)) | |
throw new ECCoreException(ECCoreException::EMPTY_PARAMETERS, "Grade 'Range to' is empty! Please enter a 'Range to' for grade"); | |
} | |
/** | |
* Insert grade | |
* @param Grade $grade | |
* @return String $id | |
*/ | |
private function insertGrade(Grade $grade) | |
{ | |
$properties = !empty($grade->properties) ? "'" . json_encode($grade->properties) . "'" : "JSON_OBJECT"; | |
$id = SecurityUtils::getRandomString(); | |
$query = "INSERT INTO grade | |
(id,grade_scheme_id,range_from,range_to,name,properties,created_by,updated_by) | |
VALUES | |
('$id','$grade->gradeSchemeId',$grade->rangeFrom,$grade->rangeTo,'$grade->name',$properties,'$grade->createdBy','$grade->updatedBy')"; | |
try { | |
$this->executeQuery($query); | |
AMSLogger::log_info($this->logger,Events::GRADE_CREATION,[ | |
"grade" => new GradeEntity(["id" => $id]), | |
"status" => StatusConstants::SUCCESS, | |
"updated_by" => $updatedBy, | |
]); | |
return $id; | |
} catch (\Exception $e) { | |
throw new ECCoreException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Insert grades | |
* @param Grade Array $grades | |
* @return Grade Array $grades | |
*/ | |
private function insertGrades(Grade $grades) | |
{ | |
$values = null; | |
$gradeIds = null; | |
foreach ($grades as $grade) { | |
$properties = !empty($grade->properties) ? "'" . json_encode($grade->properties) . "'" : "JSON_OBJECT"; | |
$id = SecurityUtils::getRandomString(); | |
$gradeIds[] = $grade->id = $id; | |
$values[] = "('$id','$grade->gradeSchemeId',$grade->rangeFrom,$grade->rangeTo,'$grade->name',$properties,'$grade->createdBy','$grade->updatedBy')"; | |
} | |
$valueQuery = implode(", ",$values); | |
$query = "INSERT INTO grade | |
(id,grade_scheme_id,range_from,range_to,name,properties,created_by,updated_by) | |
VALUES | |
$valueQuery"; | |
try { | |
$this->executeQuery($query); | |
foreach ($gradeIds as $gradeId) { | |
AMSLogger::log_info($this->logger,Events::GRADE_CREATION,[ | |
"grade" => new GradeEntity(["id" => $gradeId]), | |
"status" => StatusConstants::SUCCESS, | |
"updated_by" => $updatedBy, | |
]); | |
} | |
return $grades; | |
} catch (\Exception $e) { | |
throw new ECCoreException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Update Grade | |
* @param Grade $grade | |
* @return NULL | |
*/ | |
private function updateGrade(Grade $grade) | |
{ | |
$properties = !empty($grade->properties) ? "'" . json_encode($grade->properties) . "'" : "JSON_OBJECT"; | |
$query = "UPDATE | |
grade | |
SET | |
name = '$grade->name', | |
properties = $properties, | |
updated_by = '$grade->updatedBy' | |
WHERE | |
id = '$grade->id'"; | |
try { | |
$this->executeQuery($query); | |
AMSLogger::log_info($this->logger,Events::GRADE_UPDATING,[ | |
"grade" => new GradeEntity(["id" => $id]), | |
"status" => StatusConstants::SUCCESS, | |
"updated_by" => $updatedBy, | |
]); | |
return $grade->id; | |
} catch (\Exception $e) { | |
throw new ECCoreException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Delete Grade (Soft Delete) | |
* @param String $id | |
* @return NULL | |
*/ | |
public function deleteGrade($id) | |
{ | |
$id = $this->realEscapeString($id); | |
$updatedBy = $GLOBALS['userId']; | |
if(empty($id)) { | |
throw new ECCoreException(ECCoreException::EMPTY_PARAMETERS, "No grade selected! Please select a grade to delete"); | |
} | |
$query = "DELETE FROM | |
grade | |
WHERE | |
id = '$id'"; | |
try { | |
AMSLogger::log_info($this->logger,Events::GRADE_DELETION,[ | |
"grade" => new GradeEntity(["id" => $id]), | |
"status" => StatusConstants::SUCCESS, | |
"updated_by" => $updatedBy, | |
]); | |
$this->executeQuery($query); | |
} catch (\Exception $e) { | |
throw new ECCoreException(ECCoreException::ERROR_DELETING_GRADE, "Error deleting grade! Please try again"); | |
} | |
} | |
/** | |
* Search Grade Details | |
* @param SearchGradeRequest $request | |
* @return Grade | |
*/ | |
public function searchGrade(SearchGradeRequest $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
$whereQuery = ""; | |
$limitQuery = ""; | |
if(!empty($request->id)) { | |
$whereQuery .= " AND g.id = '$request->id' "; | |
} | |
if(!empty($request->name)) { | |
$whereQuery .= " AND g.name LIKE '%$request->name%' "; | |
} | |
if(!empty($request->gradeSchemeId)) { | |
$whereQuery .= " AND g.grade_scheme_id = '$request->gradeSchemeId' "; | |
} | |
if(!empty($request->rangeFrom)) { | |
$whereQuery .= " AND g.range_from = $request->rangeFrom "; | |
} | |
if(!empty($request->rangeFrom)) { | |
$whereQuery .= " AND g.range_to = $request->rangeTo "; | |
} | |
if($request->startIndex !== "" && $request->endIndex !== "") | |
{ | |
$limitQuery .= " LIMIT $request->startIndex,$request->endIndex"; | |
} | |
$query = "SELECT | |
g.id, | |
g.grade_scheme_id, | |
g.name, | |
g.range_from, | |
g.range_to, | |
g.properties, | |
g.created_by, | |
g.created_date, | |
g.updated_by, | |
g.updated_date, | |
NULL AS trashed | |
FROM | |
grade g | |
WHERE | |
1 = 1 | |
$whereQuery | |
$limitQuery"; | |
try { | |
$grades = $this->executeQueryForList($query,$this->mapper[GradeServiceMapper::SEARCH_GRADE]); | |
} catch (\Exception $e) { | |
throw new ECCoreException(ECCoreException::ERROR_FETCHING_GRADE,"Cannot fetch grade details! Please try again"); | |
} | |
return $grades; | |
} | |
/** | |
* get Grade Scheme by id | |
* @param String $id | |
* @param Boolean $request | |
* @return Grade | |
*/ | |
public function getGradeDetails($id) | |
{ | |
$id = $this->realEscapeString($id); | |
if(empty($id)) | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"Grade is invalid! Please enter a valid program"); | |
$query = "SELECT | |
g.id, | |
g.grade_scheme_id, | |
g.name, | |
g.range_from, | |
g.range_to, | |
g.properties, | |
g.created_by, | |
g.created_date, | |
g.updated_by, | |
g.updated_date, | |
NULL AS trashed | |
WHERE | |
id = $id"; | |
try { | |
$grade = $this->executeQueryForObject($query, $this->mapper[GradeServiceMapper::SEARCH_GRADE]); | |
} catch (\Exception $e) { | |
throw new ECCoreException(ECCoreException::ERROR_FETCHING_GRADE,"Cannot fetch grade details! Please try again"); | |
} | |
return $grade; | |
} | |
} |