<?php
namespace App\Controller\Customer;
use App\Handler\Customer\CrudCustomerHandler;
use Doctrine\Common\Annotations\AnnotationException;
use ReflectionException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\Exception\ExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
/**
* Class CustomerController.
*/
final class CustomerController extends AbstractController
{
/**
* @Route("/api/customers", name="customer_edit_route", methods={"PUT"})
*
* @param Request $request
* @param CrudCustomerHandler $crudCustomerHandler
*
* @return JsonResponse
*
* @throws AnnotationException
* @throws ClientExceptionInterface
* @throws DecodingExceptionInterface
* @throws ExceptionInterface
* @throws RedirectionExceptionInterface
* @throws ReflectionException
* @throws ServerExceptionInterface
* @throws TransportExceptionInterface
*/
public function editCustomer(Request $request, CrudCustomerHandler $crudCustomerHandler): JsonResponse
{
return new JsonResponse($crudCustomerHandler->handlePut(
$request->get('request') ?: $request->getContent(),
$request->files->all()
));
}
/**
* @Route("/api/customers", name="customer_new_route", methods={"POST"})
*
* @param Request $request
* @param CrudCustomerHandler $crudCustomerHandler
*
* @return JsonResponse
*
* @throws AnnotationException
* @throws ClientExceptionInterface
* @throws DecodingExceptionInterface
* @throws ExceptionInterface
* @throws RedirectionExceptionInterface
* @throws ReflectionException
* @throws ServerExceptionInterface
* @throws TransportExceptionInterface
*/
public function postCustomer(Request $request, CrudCustomerHandler $crudCustomerHandler): JsonResponse
{
return new JsonResponse($crudCustomerHandler->handlePost(
$request->get('request') ?: $request->getContent(),
$request->files->all()
));
}
}