feat: parser and loader for insurance data

This commit is contained in:
Björn Fromme
2025-09-24 15:28:43 +02:00
parent 582fb9b52d
commit 9d44197246
3 changed files with 325 additions and 0 deletions
+91
View File
@@ -0,0 +1,91 @@
<?php
declare(strict_types=1);
namespace App\BusProNet\Model;
use Symfony\Component\Serializer\Attribute\Context;
use Symfony\Component\Serializer\Attribute\Groups;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
/**
* Represents an insurance product or package with pricing, eligibility, and booking constraints.
*
* This class handles both individual insurance products and insurance packages,
* including pricing tiers, age restrictions, travel date validity, booking windows, and coverage details.
*/
class Insurance
{
#[Groups(['api:single', 'api:list'])]
public string|int|null $id = null;
#[Groups(['api:single', 'api:list'])]
public ?string $code = null;
#[Groups(['api:single', 'api:list'])]
public ?string $label = null;
#[Groups(['api:single', 'api:list'])]
public ?float $price = null;
#[Groups(['api:single', 'api:list'])]
public bool $familyInsurance = false;
#[Groups(['api:single', 'api:list'])]
public bool $package = false;
#[Groups(['api:single', 'api:list'])]
#[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])]
public ?\DateTimeImmutable $travelDateFrom = null;
#[Groups(['api:single', 'api:list'])]
#[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])]
public ?\DateTimeImmutable $travelDateTo = null;
#[Groups(['api:single', 'api:list'])]
#[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])]
public ?\DateTimeImmutable $bookingDateFrom = null;
#[Groups(['api:single', 'api:list'])]
#[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])]
public ?\DateTimeImmutable $bookingDateTo = null;
#[Groups(['api:single', 'api:list'])]
public ?int $ageFrom = null;
#[Groups(['api:single', 'api:list'])]
public ?int $ageTo = null;
#[Groups(['api:single', 'api:list'])]
public ?float $travelPriceFrom = null;
#[Groups(['api:single', 'api:list'])]
public ?float $travelPriceTo = null;
#[Groups(['api:single', 'api:list'])]
public ?int $travelDurationFrom = null;
#[Groups(['api:single', 'api:list'])]
public ?int $travelDurationTo = null;
#[Groups(['api:single', 'api:list'])]
public ?string $urlInfo = null;
#[Groups(['api:single', 'api:list'])]
public ?string $urlProductInfo = null;
#[Groups(['api:single', 'api:list'])]
public ?string $urlTerms = null;
/**
* @var array<Insurance> Insurance products contained in this package (only for packages)
*/
#[Groups(['api:single', 'api:list'])]
public array $containedInsurances = [];
/**
* @var array<string|int> IDs of insurance products contained in this package (only for packages)
*/
#[Groups(['api:single', 'api:list'])]
public array $containedInsuranceIds = [];
}