<?php
namespace App\Controller;
use App\Api\BrcBackend\BrcClient;
use App\DTO\Contact;
use App\Form\ContactUsType;
use App\Response\ApiResponse;
use App\Util\FormErrorHelper;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/contact-us")
*/
final class ContactUsController extends AbstractController
{
/**
* @Route("/", name="contact_us", methods={"GET"})
*
* @return Response
*/
public function index(): Response
{
return $this->render('contact_us/index.html.twig', [
'form' => $this->createForm(ContactUsType::class)->createView(),
]);
}
/**
* @Route("/send", name="contact_us_send", methods={"POST"})
*
* @param Request $request
* @param BrcClient $client
* @param LoggerInterface $errorsLogger
*
* @return JsonResponse
*/
public function send(Request $request, BrcClient $client, LoggerInterface $errorsLogger): JsonResponse
{
try {
$contact = new Contact();
$form = $this->createForm(ContactUsType::class, $contact);
$form->handleRequest($request);
if (!$form->isValid()) {
$error = FormErrorHelper::getAll($form);
return $this->json(ApiResponse::notValidParam('KO', $error)->toArray());
}
$contact->setCountry($this->getParameter('locale'));
$client->createContact($contact->toArray());
$response = ApiResponse::success('OK', [
'content' => $this->renderView('contact_us/_success.html.twig')
]);
return $this->json($response->toArray());
} catch (\Throwable $ex) {
$errorsLogger->error($ex->getMessage());
return $this->json(ApiResponse::internalServerError());
}
}
}