wip: integrate with typo3 to fetch product and hotel data

This commit is contained in:
Björn Fromme
2025-10-28 16:13:07 +01:00
parent 3d694ed7eb
commit cfd346d5df
5 changed files with 77 additions and 1 deletions
+4
View File
@@ -0,0 +1,4 @@
services:
web:
external_links:
- "ddev-router:ep-reisen.ddev.site"
+2 -1
View File
@@ -46,7 +46,8 @@ APP_BPN_IP=
APP_BPN_PORT=
APP_BPN_DEBUG=false
APP_TRAVEL_INFO_BASE_URL=https://www.ep-reisen.de/reiseinformationen/
APP_TRAVEL_INFO_BASE_URL="https://www.ep-reisen.de/reiseinformationen/"
APP_CMS_API_BASE_URL="https://www.ep-reisen.de/"
# Travel Data Service Configuration
APP_TRAVEL_PREFER_REMOTE=false
+7
View File
@@ -18,6 +18,13 @@ framework:
php_errors:
log: true
http_client:
scoped_clients:
typo3.client:
base_uri: '%env(resolve:APP_CMS_API_BASE_URL)%'
headers:
accept: 'text/json'
when@test:
framework:
test: true
+4
View File
@@ -96,3 +96,7 @@ services:
- '@App\Form\Service\ParticipantTransportationDiscountReplacementFieldHandler'
- '@App\Form\Service\ParticipantBulkInsuranceFieldHandler'
- '@App\Form\Service\ParticipantInsuranceFieldHandler'
App\Service\CmsDataService:
arguments:
$httpClient: '@typo3.client'
+60
View File
@@ -0,0 +1,60 @@
<?php
namespace App\Service;
use Symfony\Contracts\HttpClient\Exception\ExceptionInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class CmsDataService
{
public const MODE_PRODUCT = 'product';
public const MODE_HOTEL = 'hotel';
public function __construct(private readonly HttpClientInterface $httpClient)
{
}
public function getProductDetails(string $code): array
{
return $this->makeApiCall(static::MODE_PRODUCT, $code);
}
public function getHotelDetails(string $code): array
{
return $this->makeApiCall(static::MODE_HOTEL, $code);
}
public function makeApiCall(string $mode, string $code): array
{
if (false === in_array($mode, [self::MODE_PRODUCT, self::MODE_HOTEL])) {
throw new \InvalidArgumentException('Invalid mode provided');
}
try {
$request = $this->httpClient->request('GET', '/', [
'query' => [
'type' => 1720,
'tx_epproducts_api[code]' => $code,
'tx_epproducts_api[action]' => $mode,
'tx_epproducts_api[controller]' => 'Api',
]
]);
} catch (ExceptionInterface $e) {
return [
'success' => false,
'message' => $e->getMessage(),
];
}
try {
$data = $request->toArray();
} catch (ExceptionInterface $e) {
return [
'success' => false,
'message' => $e->getMessage(),
];
}
return $data;
}
}