Files
myep/src/Controller/Api/ContactFormController.php
T

71 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Controller\Api;
use App\BusProNet\ApiClient;
use App\BusProNet\Exception\ApiClientException;
use App\BusProNet\Model\ContactFormSubmission;
use App\BusProNet\Model\Notification;
use App\BusProNet\Model\PersonalData;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Attribute\MapRequestPayload;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
#[Route('/api')]
#[IsGranted('ROLE_OAUTH2_API')]
class ContactFormController extends AbstractController
{
public function __construct(private readonly ApiClient $apiClient, private readonly LoggerInterface $logger)
{
}
#[Route('/contactform', name: 'api_contacform', methods: ['POST'])]
public function index(#[MapRequestPayload] ContactFormSubmission $dto): JsonResponse
{
$personalData = PersonalData::fromContactFormSubmission($dto);
try {
$result = $this->apiClient->createAddress($personalData);
if ($result instanceof Notification) {
$this->logger->info('Unable to submit contact form', [
'message' => $result->message,
]);
return new JsonResponse([
'success' => false,
'message' => $result->message,
], Response::HTTP_CONFLICT);
}
$this->logger->info('Contact form submitted', [
'addressId' => $result->addressId,
'personId' => $result->personId,
]);
return $this->json([
'success' => true,
'addressId' => $result->addressId,
'personId' => $result->personId,
'isNewRecord' => $result->isNewRecord,
], Response::HTTP_CREATED);
} catch (ApiClientException $e) {
$this->logger->error('Unable to submit contact form', [
'message' => $e->getMessage(),
'dto' => $dto,
]);
return new JsonResponse([
'success' => false,
'message' => $e->getMessage(),
], Response::HTTP_BAD_REQUEST);
}
}
}