wip: integrate with typo3 to fetch product and hotel data
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
services:
|
||||||
|
web:
|
||||||
|
external_links:
|
||||||
|
- "ddev-router:ep-reisen.ddev.site"
|
||||||
@@ -46,7 +46,8 @@ APP_BPN_IP=
|
|||||||
APP_BPN_PORT=
|
APP_BPN_PORT=
|
||||||
APP_BPN_DEBUG=false
|
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
|
# Travel Data Service Configuration
|
||||||
APP_TRAVEL_PREFER_REMOTE=false
|
APP_TRAVEL_PREFER_REMOTE=false
|
||||||
|
|||||||
@@ -18,6 +18,13 @@ framework:
|
|||||||
php_errors:
|
php_errors:
|
||||||
log: true
|
log: true
|
||||||
|
|
||||||
|
http_client:
|
||||||
|
scoped_clients:
|
||||||
|
typo3.client:
|
||||||
|
base_uri: '%env(resolve:APP_CMS_API_BASE_URL)%'
|
||||||
|
headers:
|
||||||
|
accept: 'text/json'
|
||||||
|
|
||||||
when@test:
|
when@test:
|
||||||
framework:
|
framework:
|
||||||
test: true
|
test: true
|
||||||
|
|||||||
@@ -96,3 +96,7 @@ services:
|
|||||||
- '@App\Form\Service\ParticipantTransportationDiscountReplacementFieldHandler'
|
- '@App\Form\Service\ParticipantTransportationDiscountReplacementFieldHandler'
|
||||||
- '@App\Form\Service\ParticipantBulkInsuranceFieldHandler'
|
- '@App\Form\Service\ParticipantBulkInsuranceFieldHandler'
|
||||||
- '@App\Form\Service\ParticipantInsuranceFieldHandler'
|
- '@App\Form\Service\ParticipantInsuranceFieldHandler'
|
||||||
|
|
||||||
|
App\Service\CmsDataService:
|
||||||
|
arguments:
|
||||||
|
$httpClient: '@typo3.client'
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user