Merge pull request #14 from PootisPenserHere/genericAsserts

Generic asserts
This commit is contained in:
Jose Pablo Domingo Aramburo Sanchez 2018-08-09 23:29:58 -06:00 committed by GitHub
commit e5d90bc32d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 113 additions and 70 deletions

View File

@ -56,11 +56,11 @@ class EmployeeApplication{
* @return integer * @return integer
*/ */
function saveNewPerson($firstName, $middleName, $lastName, $birthDate, $email, $phone){ function saveNewPerson($firstName, $middleName, $lastName, $birthDate, $email, $phone){
$this->asserts->firstName($firstName); $this->asserts->isNotEmpty($firstName, "The first name can't be empty.");
$this->asserts->middleName($middleName); $this->asserts->isNotEmpty($middleName, "The middle name can't be empty.");
$this->asserts->birthDate($birthDate); $this->asserts->isNotEmpty($birthDate, "The birth date can't be empty.");
$this->asserts->email($email); $this->asserts->isNotEmpty($email, "The email can't be empty.");
$this->asserts->phone($phone); $this->asserts->isNotEmpty($phone, "The phone number can't be empty.");
try { try {
$stmt = $this->pdo->prepare("INSERT INTO persons (firstName, middleName, lastName, birthDate, email, phone) $stmt = $this->pdo->prepare("INSERT INTO persons (firstName, middleName, lastName, birthDate, email, phone)
@ -89,6 +89,10 @@ class EmployeeApplication{
* @return mixed * @return mixed
*/ */
function savePersonAsEmployee($idEmployeeType, $idPerson, $code, $contractType){ function savePersonAsEmployee($idEmployeeType, $idPerson, $code, $contractType){
$this->asserts->higherThanZero($idEmployeeType, "idEmployeeType must be higher than 0");
$this->asserts->higherThanZero($idPerson, "idPerson must be higher than 0");
$this->asserts->isNotEmpty($code, "The code can't be empty.");
$this->asserts->isNotEmpty($contractType, "The contract type can't be empty.");
try { try {
$stmt = $this->pdo->prepare("INSERT INTO employees (idEmployeeType, idPerson, code, contractType) $stmt = $this->pdo->prepare("INSERT INTO employees (idEmployeeType, idPerson, code, contractType)
VALUES (:idEmployeeType, :idPerson, :code, :contractType)"); VALUES (:idEmployeeType, :idPerson, :code, :contractType)");
@ -115,21 +119,29 @@ class EmployeeApplication{
function saveNewEmployee($requestData){ function saveNewEmployee($requestData){
// Getting and validating the data // Getting and validating the data
$firstName = $requestData['firstName']; $firstName = $requestData['firstName'];
$this->asserts->firstName($firstName); $this->asserts->isNotEmpty($firstName, "The first name can't be empty.");
$this->asserts->isString($firstName, "The first name must be a string.");
$this->asserts->betweenLength($firstName, 1, 50, "The first name must have a length between 1 and 50 characters.");
$middleName = $requestData['middleName']; $middleName = $requestData['middleName'];
$this->asserts->middleName($middleName); $this->asserts->isNotEmpty($middleName, "The middle name can't be empty.");
$this->asserts->isString($middleName, "The middle name must be a string.");
$this->asserts->betweenLength($middleName, 1, 50, "The middle name must have a length between 1 and 50 characters.");
$lastName = isset($requestData['lastName']) ? $requestData['lastName'] : null; $lastName = isset($requestData['lastName'])
? $requestData['lastName']
: null;
$birthDate = $requestData['birthDate']; $birthDate = $requestData['birthDate'];
$this->asserts->birthDate($birthDate); $this->asserts->isNotEmpty($birthDate, "The birth date can't be empty.");
$email = $requestData['email']; $email = $requestData['email'];
$this->asserts->email($email); $this->asserts->isNotEmpty($email, "The email can't be empty.");
$this->asserts->betweenLength($email, 1, 100, "The middle name must have a length between 1 and 100 characters.");
$phone = $requestData['phone']; $phone = $requestData['phone'];
$this->asserts->phone($phone); $this->asserts->isNotEmpty($phone, "The phone number can't be empty.");
$this->asserts->betweenLength($phone, 10, 10, "The phone number must be 10 digits without special characters.");
$idEmployeeType = $requestData{'idEmployeeType'}; $idEmployeeType = $requestData{'idEmployeeType'};
$contractType = $requestData{'contractType'}; $contractType = $requestData{'contractType'};
@ -169,6 +181,8 @@ class EmployeeApplication{
* @return Integer * @return Integer
*/ */
function getIdPersonByIdEmployee($idEmployee){ function getIdPersonByIdEmployee($idEmployee){
$this->asserts->higherThanZero($idEmployee, "idEmployee must be higher than 0");
$stmt = $this->pdo->prepare("SELECT $stmt = $this->pdo->prepare("SELECT
COALESCE((SELECT COALESCE((SELECT
idPerson idPerson
@ -189,10 +203,12 @@ class EmployeeApplication{
} }
/** /**
* @param $code * @param $code string
* @return mixed * @return integer
*/ */
function getIdEmployeeTypeByCode($code){ function getIdEmployeeTypeByCode($code){
$this->asserts->isNotEmpty($code, "The code can't be empty.");
$stmt = $this->pdo->prepare("SELECT COALESCE((SELECT $stmt = $this->pdo->prepare("SELECT COALESCE((SELECT
et.id et.id
FROM FROM
@ -219,6 +235,8 @@ class EmployeeApplication{
* @return array * @return array
*/ */
function getEmployeeDataById($idEmployee){ function getEmployeeDataById($idEmployee){
$this->asserts->higherThanZero($idEmployee, "idEmployee must be higher than 0");
$stmt = $this->pdo->prepare("SELECT $stmt = $this->pdo->prepare("SELECT
p.id AS idPerson, p.id AS idPerson,
p.firstName, p.firstName,
@ -253,6 +271,8 @@ class EmployeeApplication{
* @return array * @return array
*/ */
function proxyGetEmployeeDataById($idEmployee){ function proxyGetEmployeeDataById($idEmployee){
$this->asserts->higherThanZero($idEmployee, "idEmployee must be higher than 0");
$employeeData = $this->getEmployeeDataById($idEmployee); $employeeData = $this->getEmployeeDataById($idEmployee);
$response = array( $response = array(
@ -279,6 +299,8 @@ class EmployeeApplication{
* @return array * @return array
*/ */
function getEmployeeDataByCode($code){ function getEmployeeDataByCode($code){
$this->asserts->isNotEmpty($code, "The code can't be empty.");
$idEmployee = $this->getIdEmployeeTypeByCode($code); $idEmployee = $this->getIdEmployeeTypeByCode($code);
return $this->proxyGetEmployeeDataById($idEmployee); return $this->proxyGetEmployeeDataById($idEmployee);
@ -294,6 +316,13 @@ class EmployeeApplication{
* @param $phone string * @param $phone string
*/ */
function updatePerson($idPerson, $firstName, $middleName, $lastName, $birthDate, $email, $phone){ function updatePerson($idPerson, $firstName, $middleName, $lastName, $birthDate, $email, $phone){
$this->asserts->higherThanZero($idPerson, "idPerson must be higher than 0");
$this->asserts->isNotEmpty($firstName, "The first name can't be empty.");
$this->asserts->isNotEmpty($middleName, "The middle name can't be empty.");
$this->asserts->isNotEmpty($birthDate, "The birth date can't be empty.");
$this->asserts->isNotEmpty($email, "The email can't be empty.");
$this->asserts->isNotEmpty($phone, "The phone number can't be empty.");
try { try {
$stmt = $this->pdo->prepare("UPDATE persons $stmt = $this->pdo->prepare("UPDATE persons
SET SET
@ -323,6 +352,11 @@ class EmployeeApplication{
* @param $contractType string * @param $contractType string
*/ */
function updateEmployee($idEmployee, $code, $idEmployeeType, $contractType){ function updateEmployee($idEmployee, $code, $idEmployeeType, $contractType){
$this->asserts->higherThanZero($idEmployee, "idEmployee must be higher than 0");
$this->asserts->isNotEmpty($code, "The code can't be empty.");
$this->asserts->higherThanZero($idEmployeeType, "idEmployeeType must be higher than 0");
$this->asserts->isNotEmpty($contractType, "The contract type can't be empty.");
try { try {
$stmt = $this->pdo->prepare("UPDATE employees $stmt = $this->pdo->prepare("UPDATE employees
SET SET
@ -349,28 +383,42 @@ class EmployeeApplication{
function updateEmployeeData($requestData){ function updateEmployeeData($requestData){
// Getting and validating the data // Getting and validating the data
$idEmployee = $requestData['idEmployee']; $idEmployee = $requestData['idEmployee'];
$this->asserts->higherThanZero($idEmployee, "idEmployee must be higher than 0");
$idPerson = $this->getIdPersonByIdEmployee($idEmployee); $idPerson = $this->getIdPersonByIdEmployee($idEmployee);
$this->asserts->higherThanZero($idPerson, "idPerson must be higher than 0");
$code = $requestData['code']; $code = $requestData['code'];
$this->asserts->isNotEmpty($code, "The code can't be empty.");
$firstName = $requestData['firstName']; $firstName = $requestData['firstName'];
$this->asserts->firstName($firstName); $this->asserts->isNotEmpty($firstName, "The first name can't be empty.");
$this->asserts->isString($firstName, "The first name must be a string.");
$this->asserts->betweenLength($firstName, 1, 50, "The first name must have a length between 1 and 50 characters.");
$middleName = $requestData['middleName']; $middleName = $requestData['middleName'];
$this->asserts->middleName($middleName); $this->asserts->isNotEmpty($middleName, "The middle name can't be empty.");
$this->asserts->isString($middleName, "The middle name must be a string.");
$this->asserts->betweenLength($middleName, 1, 50, "The middle name must have a length between 1 and 50 characters.");
$lastName = isset($requestData['lastName']) ? $requestData['lastName'] : null; $lastName = isset($requestData['lastName']) ? $requestData['lastName'] : null;
$birthDate = $requestData['birthDate']; $birthDate = $requestData['birthDate'];
$this->asserts->birthDate($birthDate); $this->asserts->isNotEmpty($birthDate, "The birth date can't be empty.");
$email = $requestData['email']; $email = $requestData['email'];
$this->asserts->email($email); $this->asserts->isNotEmpty($email, "The email can't be empty.");
$this->asserts->betweenLength($email, 1, 100, "The middle name must have a length between 1 and 100 characters.");
$phone = $requestData['phone']; $phone = $requestData['phone'];
$this->asserts->phone($phone); $this->asserts->isNotEmpty($phone, "The phone number can't be empty.");
$this->asserts->betweenLength($phone, 10, 10, "The phone number must be 10 digits without special characters.");
$idEmployeeType = $requestData{'idEmployeeType'}; $idEmployeeType = $requestData{'idEmployeeType'};
$this->asserts->higherThanZero($idEmployeeType, "idEmployeeType must be higher than 0");
$contractType = $requestData{'contractType'}; $contractType = $requestData{'contractType'};
$this->asserts->isNotEmpty($contractType, "The contract type can't be empty.");
// Encrypting the sensitive data // Encrypting the sensitive data
$securedFirstName = $this->cryptographyService->encryptString($firstName); $securedFirstName = $this->cryptographyService->encryptString($firstName);
@ -404,6 +452,8 @@ class EmployeeApplication{
} }
function disableEmployeeRecord($idEmployee){ function disableEmployeeRecord($idEmployee){
$this->asserts->higherThanZero($idEmployee, "idEmployee must be higher than 0");
try { try {
$stmt = $this->pdo->prepare("UPDATE employees $stmt = $this->pdo->prepare("UPDATE employees
SET SET
@ -447,6 +497,9 @@ class EmployeeApplication{
return $results; return $results;
} }
/**
* @return array
*/
function listAllActiveEmployees(){ function listAllActiveEmployees(){
$ids = $this->getIdEmployeeFromAllActiveEmployees(); $ids = $this->getIdEmployeeFromAllActiveEmployees();

View File

@ -43,7 +43,9 @@ class SessionApplication{
* @return mixed * @return mixed
*/ */
function getPassword($userName){ function getPassword($userName){
$this->asserts->userName($userName); $this->asserts->isNotEmpty($userName, "The username can't be empty");
$this->asserts->isString($userName, "The username must be a string.");
$this->asserts->betweenLength($userName, 1, 50, "The username must have a length between 1 and 50 characters.");
$stmt = $this->pdo->prepare("SELECT password FROM users WHERE name = :userName"); $stmt = $this->pdo->prepare("SELECT password FROM users WHERE name = :userName");
$stmt->execute(array(':userName' => $userName)); $stmt->execute(array(':userName' => $userName));
@ -62,8 +64,12 @@ class SessionApplication{
* @throws Exception * @throws Exception
*/ */
function newSession($userName, $password){ function newSession($userName, $password){
$this->asserts->userName($userName); $this->asserts->isNotEmpty($userName, "The username can't be empty");
$this->asserts->password($password); $this->asserts->isString($userName, "The username must be a string.");
$this->asserts->betweenLength($userName, 1, 50, "The username must have a length between 1 and 50 characters.");
$this->asserts->isNotEmpty($password, "The password can't be empty");
$this->asserts->isString($password, "The password must be a string.");
$this->asserts->betweenLength($password, 1, 50, "The password must have a length between 1 and 50 characters.");
$storedPassword = $this->getPassword($userName); $storedPassword = $this->getPassword($userName);
@ -93,6 +99,14 @@ class SessionApplication{
* @throws Exception * @throws Exception
*/ */
function login($userName, $password){ function login($userName, $password){
$this->asserts->isNotEmpty($userName, "The username can't be empty");
$this->asserts->isString($userName, "The username must be a string.");
$this->asserts->betweenLength($userName, 1, 50, "The username must have a length between 1 and 50 characters.");
$this->asserts->isNotEmpty($password, "The password can't be empty");
$this->asserts->isString($password, "The password must be a string.");
$this->asserts->betweenLength($password, 1, 50, "The password must have a length between 1 and 50 characters.");
if($this->newSession($userName, $password)){ if($this->newSession($userName, $password)){
return array('status' => 'success', 'message' => 'Logged in successfully.'); return array('status' => 'success', 'message' => 'Logged in successfully.');
} }

View File

@ -6,78 +6,54 @@ use Respect\Validation\Validator as v;
class Asserts{ class Asserts{
/** /**
* @param $string * @param $string string
* @param $errorMessage string
* @throws Exception * @throws Exception
*/ */
function userName($string){ function isString($string, $errorMessage){
$validateFirstName = v::stringType()->notEmpty()->length(1, 50)->validate($string); $validation = v::stringType()->validate($string);
if(!$validateFirstName){ if(!$validation){
throw new Exception('The user name must be a string between 1 and 50 characters'); throw new Exception($errorMessage);
} }
} }
/** /**
* @param $string * @param $string string
* @param $errorMessage string
* @throws Exception * @throws Exception
*/ */
function password($string){ function isNotEmpty($string, $errorMessage){
$validateFirstName = v::stringType()->notEmpty()->length(1, 50)->validate($string); $validation = v::notEmpty()->validate($string);
if(!$validateFirstName){ if(!$validation){
throw new Exception('The password must be a string between 1 and 50 characters'); throw new Exception($errorMessage);
} }
} }
/** /**
* @param $string * @param $string string
* @param $min integer
* @param $max integer
* @param $errorMessage string
* @throws Exception * @throws Exception
*/ */
function firstName($string){ function betweenLength($string, $min, $max, $errorMessage){
$validateFirstName = v::stringType()->notEmpty()->length(1, 100)->validate($string); $validation = v::length($min, $max)->validate($string);
if(!$validateFirstName){ if(!$validation){
throw new Exception('The first name must be a string between 1 and 100 characters'); throw new Exception($errorMessage);
} }
} }
/** /**
* @param $string * @param $number integer
* @param $errorMessage string
* @throws Exception * @throws Exception
*/ */
function middleName($string){ function higherThanZero($number, $errorMessage){
if(!v::stringType()->notEmpty()->length(1, 100)->validate($string)){ if($number <= 0){
throw new Exception('The middle name must be a string between 1 and 100 characters'); throw new Exception($errorMessage);
}
}
/**
* @param $string
* @throws Exception
*/
function birthDate($string){
if(!v::date('Y-m-d')->notEmpty()->validate($string)){
throw new Exception('The birth date must be in the yyyy-mm-dd format');
}
}
/**
* @param $string
* @throws Exception
*/
function email($string){
if(!v::stringType()->notEmpty()->length(1, 100)->validate($string)){
throw new Exception('The email must be a string between 1 and 100 characters');
}
}
/**
* @param $string
* @throws Exception
*/
function phone($string){
if(!v::digit()->notEmpty()->length(10, 10)->validate($string)){
throw new Exception('The phone must be a numeric value of 10 digits');
} }
} }
} }