123 lines
3.7 KiB
PHP
Raw Normal View History

2018-11-11 12:01:18 +01:00
<?php
namespace App\Action\Fault;
use App\Action\AbstractCrudAction;
use App\Response\JsonCorsResponse;
use App\Service\FaultManagerService;
use Interop\Http\ServerMiddleware\DelegateInterface;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\Response;
use Zend\Diactoros\Response\EmptyResponse;
class FaultAction extends AbstractCrudAction
{
const CORS_ALLOW_METHODS = [
'GET',
'POST',
'PUT',
'PATCH',
];
/**
* @var FaultManagerService
*/
private $faultManagerService;
public function __construct(FaultManagerService $faultManagerService)
{
$this->faultManagerService = $faultManagerService;
}
/**
* Return all faults accessible to the user
*
* @param ServerRequestInterface $request
* @param DelegateInterface $delegate
* @return \Zend\Diactoros\Response
*/
public function getList(ServerRequestInterface $request, DelegateInterface $delegate): Response
{
return new JsonCorsResponse($this->faultManagerService->getFaultList());
}
/**
* Return a single fault
*
* @param ServerRequestInterface $request
* @param DelegateInterface $delegate
* @return \Zend\Diactoros\Response
*/
public function get(ServerRequestInterface $request, DelegateInterface $delegate): Response
{
$id = $request->getAttribute('id', false);
return new JsonCorsResponse($this->faultManagerService->getFault($id));
}
/**
* Post a new fault report
*
* @param ServerRequestInterface $request
* @param DelegateInterface $delegate
* @return \Zend\Diactoros\Response
*/
public function create(ServerRequestInterface $request, DelegateInterface $delegate): Response
{
try {
$data = $this->getRequestData($request);
$token = $request->getAttribute('token');
return new JsonCorsResponse($this->faultManagerService->createFault($data, $token->uid), 201);
} catch (\Exception $e) {
return new JsonCorsResponse($e->getMessage(), 500);
}
}
/**
* Update a fault report
*
* @param ServerRequestInterface $request
* @param DelegateInterface $delegate
* @return \Zend\Diactoros\Response
*/
public function update(ServerRequestInterface $request, DelegateInterface $delegate): Response
{
try {
$id = $request->getAttribute('id');
$token = $request->getAttribute('token');
$data = $this->getRequestData($request);
return new JsonCorsResponse($this->faultManagerService->updateFault($id, $data, $token->uid));
} catch (\Exception $e) {
return new JsonCorsResponse($e->getMessage(), 500);
}
}
/**
* Delete a fault report (NYI)
*
* @param ServerRequestInterface $request
* @param DelegateInterface $delegate
* @return \Zend\Diactoros\Response
*/
public function delete(ServerRequestInterface $request, DelegateInterface $delegate): Response
{
try {
$id = $request->getAttribute('id');
return new JsonCorsResponse($this->faultManagerService->deleteFault($id));
} catch (\Exception $e) {
return new JsonCorsResponse($e->getMessage(), $e->getCode());
}
}
/**
* Configure CORS preflight
*
* @param ServerRequestInterface $request
* @param DelegateInterface $delegate
* @return \Zend\Diactoros\Response
*/
public function options(ServerRequestInterface $request, DelegateInterface $delegate): Response
{
return $this->withCorsHeaders(new EmptyResponse(), self::CORS_ALLOW_METHODS);
}
}