Updating employee data #7

Merged
PootisPenserHere merged 3 commits from updatingEmployeeData into master 2018-08-06 09:35:10 +00:00
2 changed files with 180 additions and 3 deletions

View File

@ -1,6 +1,8 @@
<?php
namespace App\Application;
use phpDocumentor\Reflection\Types\Integer;
class EmployeeApplication{
private $pdo;
private $cryptographyService;
@ -40,9 +42,9 @@ class EmployeeApplication{
}
/**
* @param $firstName varbinary
* @param $middleName varbinary
* @param $lastName varbinary or null
* @param $firstName binary
* @param $middleName binary
* @param $lastName binary or null
* @param $birthDate date yyyy-mm-dd
* @param $email string
* @param $phone string
@ -157,6 +159,30 @@ class EmployeeApplication{
return $response;
}
/**
* @param $idEmployee
* @return Integer
*/
function getIdPersonByIdEmployee($idEmployee){
$stmt = $this->pdo->prepare("SELECT
COALESCE((SELECT
idPerson
FROM
employees
WHERE
id = :idEmployee),
0) AS id");
$stmt->execute(array(':idEmployee' => $idEmployee));
$results = $stmt->fetchAll();
if(!$results){
exit($this->databaseSelectQueryErrorMessage);
}
$stmt = null;
return $results[0]['id'];
}
/**
* @param $code
* @return mixed
@ -241,7 +267,142 @@ class EmployeeApplication{
);
return $response;
}
/**
* @param $idPerson integer
* @param $firstName binary
* @param $middleName binary
* @param $lastName binary
* @param $birthDate date
* @param $email binary
* @param $phone string
*/
function updatePerson($idPerson, $firstName, $middleName, $lastName, $birthDate, $email, $phone){
try {
$stmt = $this->pdo->prepare("UPDATE persons
SET
firstName = :firstName,
middleName = :middleName,
lastName = :lastName,
birthDate = :birthDate,
email = :email,
phone = :phone
WHERE
id = :idPerson");
$this->pdo->beginTransaction();
$stmt->execute(array(':firstName' => $firstName, ':middleName' => $middleName, ':lastName' => $lastName,
':birthDate' => $birthDate, ':email' => $email, ':phone' => $phone, ':idPerson' => $idPerson));
$this->pdo->commit();
$stmt = null;
} catch( PDOExecption $e ) {
$this->pdo->rollback();
}
}
/**
* @param $idEmployee integer
* @param $code string
* @param $idEmployeeType integer
* @param $contractType string
*/
function updateEmployee($idEmployee, $code, $idEmployeeType, $contractType){
try {
$stmt = $this->pdo->prepare("UPDATE employees
SET
idEmployeeType = :idEmployeeType,
code = :code,
contractType = :contractType
WHERE
id = :idEmployee");
$this->pdo->beginTransaction();
$stmt->execute(array(':idEmployeeType' => $idEmployeeType, ':code' => $code, ':contractType' => $contractType,
':idEmployee' => $idEmployee));
$this->pdo->commit();
$stmt = null;
} catch( PDOExecption $e ) {
$this->pdo->rollback();
}
}
/**
* @param $requestData object
* @return array
*/
function updateEmployeeData($requestData){
// Getting and validating the data
$idEmployee = $requestData['idEmployee'];
$idPerson = $this->getIdPersonByIdEmployee($idEmployee);
$code = $requestData['code'];
$firstName = $requestData['firstName'];
$this->asserts->firstName($firstName);
$middleName = $requestData['middleName'];
$this->asserts->middleName($middleName);
$lastName = isset($requestData['lastName']) ? $requestData['lastName'] : null;
$birthDate = $requestData['birthDate'];
$this->asserts->birthDate($birthDate);
$email = $requestData['email'];
$this->asserts->email($email);
$phone = $requestData['phone'];
$this->asserts->phone($phone);
$idEmployeeType = $requestData{'idEmployeeType'};
$contractType = $requestData{'contractType'};
// Encrypting the sensitive data
$securedFirstName = $this->cryptographyService->encryptString($firstName);
$securedMiddleName = $this->cryptographyService->encryptString($middleName);
if (isset($lastName)) {
$securedLastName = $this->cryptographyService->encryptString($lastName);
} else {
$securedLastName = null;
}
$securedEmail = $this->cryptographyService->encryptString($email);
// Update process
$this->updatePerson($idPerson, $securedFirstName, $securedMiddleName, $securedLastName,
$birthDate, $securedEmail, $phone);
$this->updateEmployee($idEmployee, $code, $idEmployeeType, $contractType);
$response = array(
"fullName" => "$firstName $middleName $lastName",
"idEmployee" => $idEmployee,
"email" => $email,
"phone" => $phone,
"birthDate" => $birthDate,
"idEmployeeType" => $idEmployeeType,
"contractType" => $contractType
);
return $response;
}
function disableEmployeeRecord($idEmployee){
try {
$stmt = $this->pdo->prepare("UPDATE employees
SET
status = 'INACTIVE'
WHERE
id = :idEmployee");
$this->pdo->beginTransaction();
$stmt->execute(array(':idEmployee' => $idEmployee));
$this->pdo->commit();
$stmt = null;
} catch( PDOExecption $e ) {
$this->pdo->rollback();
}
}
}
?>

View File

@ -49,6 +49,22 @@ $app->post('/api/employee', function ($request, $response) {
->write(json_encode($this->employeeApplication->saveNewEmployee($requestData)));
});
$app->put('/api/employee', function ($request, $response) {
$requestData = $request->getParsedBody();
return $response->withStatus(200)
->withHeader('Content-Type', 'application/json')
->write(json_encode($this->employeeApplication->updateEmployeeData($requestData)));
});
$app->DELETE('/api/employee/{idEmployee}', function (Request $request, Response $response, array $args) {
$idEmployee = $args['idEmployee'];
return $response->withStatus(200)
->withHeader('Content-Type', 'application/json')
->write(json_encode($this->employeeApplication->disableEmployeeRecord($idEmployee)));
});
$app->get('/api/employee/type/{code}', function (Request $request, Response $response, array $args) {
$code = $args['code'];