fix: adopt response format of bpn personal data endpoint
This commit is contained in:
@@ -16,6 +16,7 @@ use App\BusProNet\Model\CrmAttributes;
|
||||
use App\BusProNet\Model\ExtendedServiceAvailabilityResponse;
|
||||
use App\BusProNet\Model\Notification;
|
||||
use App\BusProNet\Model\PersonalData;
|
||||
use App\BusProNet\Model\PersonalDataUpdateResponse;
|
||||
use App\BusProNet\Model\PromoVoucher;
|
||||
use App\BusProNet\Model\PurchaseVoucher;
|
||||
use App\BusProNet\Model\RegistrationResponse;
|
||||
@@ -127,7 +128,7 @@ class ApiClient
|
||||
string $password,
|
||||
PersonalData $personalData,
|
||||
bool $debug = false,
|
||||
): Notification|PersonalData {
|
||||
): Notification|PersonalDataUpdateResponse {
|
||||
$data = [
|
||||
'user' => $this->config['bpn_username'],
|
||||
'key' => $this->createKey($this->config['bpn_username'], $this->config['bpn_password'], static::TYPE_CUSTOMER_DATA),
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\BusProNet\Model;
|
||||
|
||||
class PersonalDataUpdateResponse
|
||||
{
|
||||
public function __construct(
|
||||
public readonly ?int $addressId,
|
||||
public readonly ?int $personId,
|
||||
public readonly bool $changed,
|
||||
) {
|
||||
}
|
||||
}
|
||||
@@ -38,9 +38,10 @@ class ApiResponseParser extends AbstractParser
|
||||
|
||||
switch ($subType) {
|
||||
case 'Adressdaten':
|
||||
case 'Adressdaten_Ändern':
|
||||
case 'Newsletter':
|
||||
return (new PersonalDataParser())->parse($resultNode);
|
||||
case 'Adressdaten_Ändern':
|
||||
return (new PersonalDataUpdateParser())->parse($resultNode);
|
||||
case 'Adresse_Neu':
|
||||
return (new ContactFormResponseParser())->parse($resultNode);
|
||||
case 'SelektionCRM':
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\BusProNet\XmlParser;
|
||||
|
||||
use App\BusProNet\Model\PersonalDataUpdateResponse;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
|
||||
class PersonalDataUpdateParser extends AbstractParser
|
||||
{
|
||||
public function parse(Crawler $node): PersonalDataUpdateResponse
|
||||
{
|
||||
return new PersonalDataUpdateResponse(
|
||||
addressId: $this->getIntOrNullValue($node->filterXPath('//idadresse')),
|
||||
personId: $this->getIntOrNullValue($node->filterXPath('//idperson')),
|
||||
changed: $this->getBoolValue($node->filterXPath('//änderung')),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ use App\BusProNet\ApiClient;
|
||||
use App\BusProNet\Exception\ApiClientException;
|
||||
use App\BusProNet\Model\Notification;
|
||||
use App\BusProNet\Model\PersonalData;
|
||||
use App\BusProNet\Model\PersonalDataUpdateResponse;
|
||||
use App\Entity\User;
|
||||
use App\Exception\NewsletterProviderException;
|
||||
use App\Form\PersonalDataType;
|
||||
@@ -104,6 +105,16 @@ class PersonalDataController extends AbstractController
|
||||
return $this->redirectToRoute('app_personal_data');
|
||||
}
|
||||
|
||||
if ($updateResult instanceof PersonalDataUpdateResponse && false === $updateResult->changed) {
|
||||
$this->logger->error('BPN did not apply personal data update', [
|
||||
'email' => $user->getEmail(),
|
||||
'addressId' => $updateResult->addressId,
|
||||
]);
|
||||
$this->addFlash('error', 'Deine persönlichen Daten konnten nicht aktualisiert werden. Bitte versuche es erneut.');
|
||||
|
||||
return $this->redirectToRoute('app_personal_data');
|
||||
}
|
||||
|
||||
// Invalidate cached bookings to ensure edit mode shows updated applicant data
|
||||
$this->dataLoader->invalidateUserBookingCaches($user);
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
} %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<!-- address id: {{ personalData.addressId}} person id: {{ personalData.personId}} -->
|
||||
<div class="p-4 lg:p-8">
|
||||
<div class="divide-y divide-primary-bg/40">
|
||||
<div class="grid md:grid-cols-2 gap-x-8 gap-y-4 pb-8">
|
||||
|
||||
Reference in New Issue
Block a user