<?php
namespace App\Controller\Company\User\Me;
use App\Controller\AbstractController;
use App\Entity\User;
use App\Handler\Company\Person\FrequentFlayer\FrequentFlyerFindByPersonId\FrequentFlyerFindByPersonIdCommand;
use App\Handler\Company\Person\FrequentFlayer\FrequentFlyerFindByPersonId\FrequentFlyerFindByPersonIdCommandHandler;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
#[Route(
path: '/me/person',
methods: ['GET']
)]
class PersonController extends AbstractController
{
private FrequentFlyerFindByPersonIdCommandHandler $frequentFlyerFindByPersonIdCommandHandler;
private NormalizerInterface $normalizer;
public function __construct(
FrequentFlyerFindByPersonIdCommandHandler $frequentFlyerFindByPersonIdCommandHandler,
NormalizerInterface $normalizer
) {
$this->frequentFlyerFindByPersonIdCommandHandler = $frequentFlyerFindByPersonIdCommandHandler;
$this->normalizer = $normalizer;
}
public function __invoke(): JsonResponse
{
/** @var User $user */
$user = $this->getUser();
$person = $user->getPerson();
$personArray = $this->normalizer->normalize($person, null, [
AbstractNormalizer::ATTRIBUTES => [
'id',
'name',
'middleName',
'surname',
'birthday',
'phone',
'email',
'nationality',
'avatar',
],
]);
if (null === $personArray) {
$personArray = $this->normalizer->normalize($user, null, [
AbstractNormalizer::ATTRIBUTES => [
'id',
'name',
'surname',
'tempPassword',
],
]);
}
$personArray['company'] = $this->normalizer->normalize($user->getCompany(), null, [
AbstractNormalizer::ATTRIBUTES => [
'id',
'name',
'currency',
'isActive',
'credit',
'creditBalance',
'isCreditActive',
],
]);
$frequentFlayers = [];
/*$frequentFlayers = collect($this->frequentFlyerFindByPersonIdCommandHandler
->handle(new FrequentFlyerFindByPersonIdCommand($person->getId())))
->mapWithKeys(function ($row) {
return [$row['airlineCode'] => $row['number']];
})
->toArray();*/
return $this->jsonResponse(output: array_merge($personArray, [
'frequentFlyers' => $frequentFlayers,
]));
}
}