71 lines
2.3 KiB
PHP
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);
|
|
}
|
|
}
|
|
}
|