Lines
87.80%
36 / 41
Methods
60.00%
3 / 5
Classes
0.00%
0 / 1
| Name | Lines | Methods | CRAP | ||||
|---|---|---|---|---|---|---|---|
| __construct | 100.00% | 1 / 1 | 100.00% | 1 / 1 | 1 | ||
| readResponse | 100.00% | 11 / 11 | 100.00% | 1 / 1 | 6 | ||
| [BO\Zmscitizenapi\BaseController] __invoke | 100.00% | 14 / 14 | 100.00% | 1 / 1 | 3 | ||
| [BO\Zmscitizenapi\BaseController] getExceptionContext | 0.00% | 0 / 2 | 0.00% | 0 / 1 | 2 | ||
| [BO\Zmscitizenapi\BaseController] createJsonResponse | 76.92% | 10 / 13 | 0.00% | 0 / 1 | 7.60 | ||
| 15 | class AppointmentCancelController extends BaseController | |
| 16 | { | |
| 17 | private AppointmentCancelService $service; | |
| 18 | /** @psalm-api */ | |
| 19 | public function __construct() | |
| 20 | { | |
| 21 | $this->service = new AppointmentCancelService(); | |
| 22 | } | |
| 23 | ||
| 24 | #[\Override] | |
| 25 | public function readResponse(RequestInterface $request, ResponseInterface $response, array $args): ResponseInterface | |
| 26 | { | |
| 27 | $requestErrors = ValidationService::validateServerPostRequest($request); | |
| 28 | if (!empty($requestErrors['errors'])) { | |
| 29 | return $this->createJsonResponse($response, $requestErrors, ErrorMessages::get('invalidRequest')['statusCode']); | |
| 30 | } | |
| 31 | ||
| 32 | $authenticatedUser = AuthenticationService::getAuthenticatedUser($request); | |
| 33 | $result = $this->service->processCancel($request->getParsedBody(), $authenticatedUser); | |
| 34 | ||
| 35 | if (is_array($result) && isset($result['errors'])) { | |
| 36 | foreach ($result['errors'] as &$error) { | |
| 37 | if (isset($error['errorCode'])) { | |
| 38 | $error = ErrorMessages::get($error['errorCode']); | |
| 39 | } | |
| 40 | } | |
| 41 | return $this->createJsonResponse($response, $result, ErrorMessages::getHighestStatusCode($result['errors'])); | |
| 42 | } | |
| 43 | ||
| 44 | return $this->createJsonResponse($response, $result->toArray(), 200); | |
| 45 | } | |
| 46 | } |
Inherited from BO\Zmscitizenapi\BaseController
| 14 | public function __invoke(RequestInterface $request, ResponseInterface $response, array $args): ResponseInterface | |
| 15 | { | |
| 16 | try { | |
| 17 | $request = $this->initRequest($request); | |
| 18 | $noCacheResponse = \BO\Slim\Render::withLastModified($response, time(), '0'); | |
| 19 | return $this->readResponse($request, $noCacheResponse, $args); | |
| 20 | } catch (\RuntimeException $e) { | |
| 21 | // Extract error details from the exception message | |
| 22 | [$errorCode, $errorMessage] = explode(': ', $e->getMessage(), 2); | |
| 23 | return $this->createJsonResponse($response, [ | |
| 24 | 'errors' => [ | |
| 25 | [ | |
| 26 | 'errorCode' => $errorCode, | |
| 27 | 'errorMessage' => $errorMessage, | |
| 28 | 'statusCode' => $e->getCode() | |
| 29 | ] | |
| 30 | ] | |
| 31 | ], $e->getCode() ?: 500); | |
| 32 | } | |
| 33 | } |
| 36 | protected function getExceptionContext(): string | |
| 37 | { | |
| 38 | $className = (new \ReflectionClass($this))->getShortName(); | |
| 39 | return str_replace('Controller', '', $className); | |
| 40 | } |
| 56 | protected function createJsonResponse(ResponseInterface $response, array $content, int $statusCode): ResponseInterface | |
| 57 | { | |
| 58 | if ($statusCode < 100 || $statusCode > 599) { | |
| 59 | throw new \InvalidArgumentException('Invalid HTTP status code'); | |
| 60 | } | |
| 61 | ||
| 62 | $response = $response->withStatus($statusCode) | |
| 63 | ->withHeader('Content-Type', 'application/json; charset=utf-8'); | |
| 64 | if (isset($content['errors'])) { | |
| 65 | foreach ($content['errors'] as &$error) { | |
| 66 | if (isset($error['errorCode'])) { | |
| 67 | $error = ErrorMessages::get($error['errorCode']); | |
| 68 | } | |
| 69 | } | |
| 70 | } | |
| 71 | ||
| 72 | try { | |
| 73 | $json = json_encode($content, JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); | |
| 74 | } catch (\JsonException $e) { | |
| 75 | throw new \RuntimeException('Failed to encode JSON response: ' . $e->getMessage(), 0, $e); | |
| 76 | } | |
| 77 | ||
| 78 | $response->getBody()->write($json); | |
| 79 | return $response; | |
| 80 | } |