Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 14 |
CRAP | |
0.00% |
0 / 267 |
| RuleService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 14 |
4290.00 | |
0.00% |
0 / 267 |
| __construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| saveRule | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 25 |
|||
| validateSaveRuleRequest | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 8 |
|||
| insertRule | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 14 |
|||
| updateRule | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 15 |
|||
| deleteRule | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 20 |
|||
| restoreRule | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 19 |
|||
| searchRule | |
0.00% |
0 / 1 |
72.00 | |
0.00% |
0 / 40 |
|||
| assignRule | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 25 |
|||
| validateAssignRuleRequest | |
0.00% |
0 / 1 |
72.00 | |
0.00% |
0 / 10 |
|||
| insertRuleGroupRelation | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 12 |
|||
| updateRuleGroupRelation | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 16 |
|||
| deleteRuleGroupRelation | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 16 |
|||
| getAssignedRule | |
0.00% |
0 / 1 |
72.00 | |
0.00% |
0 / 45 |
|||
| <?php | |
| namespace com\linways\ec\core\service; | |
| use com\linways\base\util\SecurityUtils; | |
| use com\linways\ec\core\dto\Rule; | |
| use com\linways\base\util\MakeSingletonTrait; | |
| use com\linways\ec\core\constant\StatusConstants; | |
| use com\linways\ec\core\exception\ExamControllerException; | |
| use com\linways\ec\core\request\SearchRuleRequest; | |
| use com\linways\ec\core\mapper\RuleServiceMapper; | |
| class RuleService extends BaseService | |
| { | |
| use MakeSingletonTrait; | |
| private function __construct() { | |
| $this->mapper = RuleServiceMapper::getInstance()->getMapper(); | |
| } | |
| /** | |
| * Save rule | |
| * @param Rule $rule | |
| * @return String $id | |
| */ | |
| public function saveRule (Rule $rule) | |
| { | |
| $rule = $this->realEscapeObject($rule); | |
| $rule->createdBy = $GLOBALS['userId'] ?? $rule->createdBy; | |
| $rule->updatedBy = $GLOBALS['userId'] ?? $rule->updatedBy; | |
| try{ | |
| $this->validateSaveRuleRequest($rule); | |
| if(!empty($rule->id)) | |
| { | |
| $rule->id = $this->updateRule($rule); | |
| } | |
| else | |
| { | |
| $rule->id = $this->insertRule($rule); | |
| } | |
| }catch(\Exception $e) { | |
| if($e->getCode() !== ExamControllerException::INVALID_PARAMETERS_RULE && $e->getCode() !== ExamControllerException::EMPTY_PARAMETERS_RULE && $e->getCode() !== ExamControllerException::DUPLICATE_ENTRY_RULE) { | |
| throw new ExamControllerException(ExamControllerException::ERROR_SAVING_RULE,"Failed to save rule! Please try again"); | |
| } else if ($e->getCode() === ExamControllerException::DUPLICATE_ENTRY) { | |
| throw new ExamControllerException (ExamControllerException::DUPLICATE_ENTRY_RULE,"Cannot create rule.Rule already exists!"); | |
| } else { | |
| throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
| } | |
| } | |
| return $rule->id; | |
| } | |
| /** | |
| * Validate Rule Request Before Saving | |
| * @param Rule $rule | |
| * @return NULL | |
| */ | |
| private function validateSaveRuleRequest(Rule $rule) | |
| { | |
| if(empty($rule->studentId)) | |
| throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS_RULE,"Rule is empty! Please select rule"); | |
| if(empty($rule->assessmentId)) | |
| throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS_RULE,"Exam is invalid."); | |
| if((empty($rule->createdBy) && empty($rule->id)) || (empty($rule->updatedBy) && !empty($rule->id))) | |
| throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS_RULE,"Unauthorized entry."); | |
| } | |
| /** | |
| * Insert rule | |
| * @param Rule $rule | |
| * @return String $id | |
| */ | |
| private function insertRule(Rule $rule) | |
| { | |
| $ruleProperties = !empty($rule->rule) ? "'".json_encode($rule->rule)."'" : "JSON_OBJECT()"; | |
| $id = SecurityUtils::getRandomString(); | |
| $query = "INSERT INTO ec_rule | |
| (id,name,rule,created_by,updated_by) | |
| VALUES | |
| ('$id','$rule->name',$ruleProperties,'$rule->createdBy','$rule->updatedBy')"; | |
| try { | |
| $this->executeQuery($query); | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
| } | |
| return $id; | |
| } | |
| /** | |
| * Update Rule | |
| * @param Rule $rule | |
| * @return NULL | |
| */ | |
| private function updateRule(Rule $rule) | |
| { | |
| $ruleProperties = !empty($rule->rule) ? "'".json_encode($rule->rule)."'" : "JSON_OBJECT()"; | |
| $query = "UPDATE ec_rule | |
| SET | |
| name = '$rule->name', | |
| rule = $ruleProperties, | |
| updated_by = '$rule->updatedBy' | |
| WHERE | |
| id = '$rule->id'"; | |
| try { | |
| $this->executeQuery($query);return $rule->id; | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
| } | |
| } | |
| /** | |
| * Delete Rule (Soft Delete) | |
| * @param String $id | |
| * @return NULL | |
| */ | |
| public function deleteRule($id) | |
| { | |
| $id = $this->realEscapeString($id); | |
| $updatedBy = $GLOBALS['userId']; | |
| if(empty($id)) { | |
| throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS_RULE,"Rule not found. Please try again!"); | |
| } | |
| $query = "UPDATE | |
| ec_rule | |
| SET | |
| trashed = UTC_TIMESTAMP(), | |
| updated_by = '$updatedBy' | |
| WHERE | |
| id = '$id'"; | |
| try { | |
| CommonService::getInstance()->checkForeignKeyEntries("ec_rule",$id); | |
| $this->executeQuery($query); | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException(ExamControllerException::ERROR_DELETING_RULE,"Error deleting rule! Please try again"); | |
| } | |
| } | |
| /** | |
| * Restore Rule | |
| * @param String $id | |
| * @return NULL | |
| */ | |
| public function restoreRule($id) | |
| { | |
| $id = $this->realEscapeString($id); | |
| $updatedBy = $GLOBALS['userId']; | |
| if(empty($id)) { | |
| throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS_RULE,"Rule not found. Please try again!"); | |
| } | |
| $query = "UPDATE | |
| ec_rule | |
| SET | |
| trashed=NULL, | |
| updated_by='$updatedBy' | |
| WHERE | |
| id='$id'"; | |
| try { | |
| $this->executeQuery($query); | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException(ExamControllerException::ERROR_RESTORING_RULE,"Error restoring rule! Please try again"); | |
| } | |
| } | |
| /** | |
| * Search Rule Details | |
| * @param SearchRuleRequest $request | |
| * @return Rule | |
| */ | |
| public function searchRule(SearchRuleRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| $whereQuery = ""; | |
| $limitQuery = ""; | |
| if(!empty($request->id)) { | |
| $whereQuery .= " AND r.id='$request->id'"; | |
| } | |
| if($request->trashed === StatusConstants::ACTIVE) { | |
| $whereQuery .= " AND r.trashed IS NULL"; | |
| } | |
| if($request->trashed === StatusConstants::TRASHED) { | |
| $whereQuery .= " AND r.trashed IS NOT NULL"; | |
| } | |
| if(!empty($request->name)) { | |
| $whereQuery .= " AND r.name LIKE '%$request->name%'"; | |
| } | |
| if($request->startIndex !== "" && $request->endIndex !== "") | |
| { | |
| $limitQuery .= " LIMIT $request->startIndex,$request->endIndex"; | |
| } | |
| $query = "SELECT | |
| r.id, | |
| r.name, | |
| r.rule, | |
| r.trashed, | |
| r.created_by, | |
| r.created_date, | |
| r.updated_by, | |
| r.updated_date | |
| FROM | |
| ec_rule r | |
| WHERE | |
| 1 = 1"; | |
| try { | |
| $rules = $this->executeQueryForList($query.$whereQuery.$limitQuery,$this->mapper[RuleServiceMapper::SEARCH_RULES]); | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException(ExamControllerException::ERROR_FETCHING_RULE,"Cannot fetch rule details! Please try again"); | |
| } | |
| return $rules; | |
| } | |
| /** | |
| * Assign rule | |
| * @param RuleGroupRelation $ruleGroupRelation | |
| * @return String $id | |
| */ | |
| public function assignRule (RuleGroupRelation $ruleGroupRelation) | |
| { | |
| $ruleGroupRelation = $this->realEscapeObject($ruleGroupRelation); | |
| $ruleGroupRelation->createdBy = $GLOBALS['userId'] ?? $ruleGroupRelation->createdBy; | |
| $ruleGroupRelation->updatedBy = $GLOBALS['userId'] ?? $ruleGroupRelation->updatedBy; | |
| try{ | |
| $this->validateAssignRuleRequest($ruleGroupRelation); | |
| if(!empty($ruleGroupRelation->id)) | |
| { | |
| $ruleGroupRelation->id = $this->updateRuleGroupRelation($ruleGroupRelation); | |
| } | |
| else | |
| { | |
| $ruleGroupRelation->id = $this->insertRuleGroupRelation($ruleGroupRelation); | |
| } | |
| }catch(\Exception $e) { | |
| if($e->getCode() !== ExamControllerException::INVALID_PARAMETERS_ASSIGN_RULE && $e->getCode() !== ExamControllerException::EMPTY_PARAMETERS_ASSIGN_RULE && $e->getCode() !== ExamControllerException::DUPLICATE_ENTRY_ASSIGN_RULE) { | |
| throw new ExamControllerException(ExamControllerException::ERROR_SAVING_ASSIGN_RULE,"Failed to assign rule! Please try again"); | |
| } else if ($e->getCode() === ExamControllerException::DUPLICATE_ENTRY) { | |
| throw new ExamControllerException (ExamControllerException::DUPLICATE_ENTRY_ASSIGN_RULE,"Cannot assign rule. Rule already assigned!"); | |
| } else { | |
| throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
| } | |
| } | |
| return $ruleGroupRelation->id; | |
| } | |
| /** | |
| * Validate Assign Rule Request Before Saving | |
| * @param RuleGroupRelation $ruleGroupRelation | |
| * @return NULL | |
| */ | |
| private function validateAssignRuleRequest(RuleGroupRelation $ruleGroupRelation) | |
| { | |
| if(empty($ruleGroupRelation->ruleId)) | |
| throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS_ASSIGN_RULE,"Rule is empty! Please select rule"); | |
| if(empty($ruleGroupRelation->groupId)) | |
| throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS_ASSIGN_RULE,"Batch is empty! Please select batch."); | |
| if(empty($ruleGroupRelation->type)) | |
| throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS_ASSIGN_RULE,"Rule type is Empty."); | |
| if((empty($ruleGroupRelation->createdBy) && empty($ruleGroupRelation->id)) || (empty($ruleGroupRelation->updatedBy) && !empty($ruleGroupRelation->id))) | |
| throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS_ASSIGN_RULE,"Unauthorized entry."); | |
| } | |
| /** | |
| * Insert rule | |
| * @param RuleGroupRelation $ruleGroupRelation | |
| * @return String $id | |
| */ | |
| private function insertRuleGroupRelation(RuleGroupRelation $ruleGroupRelation) | |
| { | |
| $query = "INSERT INTO ec_rule_group_relation | |
| (ec_rule_id,groups_id,type,created_by,updated_by) | |
| VALUES | |
| ('$ruleGroupRelation->ruleId','$ruleGroupRelation->groupId','$ruleGroupRelation->type','$ruleGroupRelation->createdBy','$ruleGroupRelation->updatedBy')"; | |
| try { | |
| $id = $this->executeQuery($query, true)->id; | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
| } | |
| return $id; | |
| } | |
| /** | |
| * Update RuleGroupRelation | |
| * @param RuleGroupRelation $ruleGroupRelation | |
| * @return NULL | |
| */ | |
| private function updateRuleGroupRelation(RuleGroupRelation $ruleGroupRelation) | |
| { | |
| $query = "UPDATE ec_rule_group_relation | |
| SET | |
| ec_rule_id = '$ruleGroupRelation->ruleId', | |
| groups_id = '$ruleGroupRelation->groupId', | |
| type = $ruleGroupRelation->type, | |
| updated_by = '$ruleGroupRelation->updatedBy' | |
| WHERE | |
| id = '$ruleGroupRelation->id'"; | |
| try { | |
| $this->executeQuery($query); | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
| } | |
| return $ruleGroupRelation->id; | |
| } | |
| /** | |
| * Delete Rule Group Relation | |
| * @param String $id | |
| * @return NULL | |
| */ | |
| public function deleteRuleGroupRelation($id) | |
| { | |
| $id = $this->realEscapeString($id); | |
| if(empty($id)) { | |
| throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS_ASSIGN_RULE,"Rule assigned not found. Please try again!"); | |
| } | |
| $query = "DELETE FROM | |
| ec_rule_group_relation | |
| WHERE | |
| id = '$id'"; | |
| try { | |
| CommonService::getInstance()->checkForeignKeyEntries("ec_rule_group_relation",$id); | |
| $this->executeQuery($query); | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException(ExamControllerException::ERROR_DELETING_ASSIGN_RULE,"Error remove rule! Please try again"); | |
| } | |
| } | |
| /** | |
| * Search Assigned Rule Details | |
| * @param SearchRuleRequest $request | |
| * @return Rule | |
| */ | |
| public function getAssignedRule(SearchRuleRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| $whereQuery = ""; | |
| $limitQuery = ""; | |
| if(!empty($request->ruleId)) { | |
| $whereQuery .= " AND r.ec_rule_id='$request->ruleId'"; | |
| } | |
| if(!empty($request->groupId)) { | |
| $whereQuery .= " AND r.groups_id='$request->groupId'"; | |
| } | |
| if(!empty($request->type)) { | |
| $whereQuery .= " AND r.type='$request->type'"; | |
| } | |
| if(!empty($request->name)) { | |
| $whereQuery .= " AND r.name LIKE '%$request->name%'"; | |
| } | |
| if($request->startIndex !== "" && $request->endIndex !== "") | |
| { | |
| $limitQuery .= " LIMIT $request->startIndex,$request->endIndex"; | |
| } | |
| $query = "SELECT | |
| ergr.id, | |
| r.name, | |
| r.rule, | |
| r.trashed, | |
| ergr.created_by, | |
| ergr.created_date, | |
| ergr.updated_by, | |
| ergr.updated_date, | |
| ergr.`type`, | |
| ergr.ec_rule_id, | |
| ergr.groups_id | |
| FROM | |
| ec_rule r | |
| INNER JOIN ec_rule_group_relation ergr ON | |
| ergr.ec_rule_id = r.id | |
| WHERE | |
| r.trashed IS NULL"; | |
| try { | |
| $rules = $this->executeQueryForList($query.$whereQuery.$limitQuery,$this->mapper[RuleServiceMapper::SEARCH_ASSIGNED_RULES]); | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException(ExamControllerException::ERROR_FETCHING_ASSIGNED_RULE,"Cannot fetch assigned rule details! Please try again"); | |
| } | |
| return $rules; | |
| } | |
| } |