mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2026-03-08 06:59:45 +00:00
Increase readability
This commit is contained in:
@@ -12,6 +12,8 @@ declare(strict_types=1);
|
||||
namespace Chill\PersonBundle\Actions\Upsert\Handler;
|
||||
|
||||
use Chill\MainBundle\Entity\Address;
|
||||
use Chill\MainBundle\Entity\Center;
|
||||
use Chill\MainBundle\Entity\Gender;
|
||||
use Chill\MainBundle\Entity\GenderEnum;
|
||||
use Chill\MainBundle\Repository\CenterRepository;
|
||||
use Chill\MainBundle\Repository\GenderRepository;
|
||||
@@ -62,23 +64,51 @@ readonly class PersonUpsertHandler
|
||||
$newAddress->setValidFrom(\DateTime::createFromImmutable($this->clock->now()));
|
||||
|
||||
return $newAddress;
|
||||
|
||||
}
|
||||
|
||||
private function messageAddressExistsAddresses(array $currentAddresses, UpsertMessage $message): bool
|
||||
private function isMessageAddressMatch(Address $existingAddress, UpsertMessage $message): bool
|
||||
{
|
||||
foreach ($currentAddresses as $existingAddress) {
|
||||
$streetMatches = $message->address === $existingAddress->getStreet();
|
||||
$streetNumberMatches = $message->streetNumber === $existingAddress->getStreetNumber();
|
||||
$postcodeMatches = null !== $existingAddress->getPostcode()
|
||||
&& $message->postcode === $existingAddress->getPostcode()->getCode();
|
||||
$streetMatches = $message->address === $existingAddress->getStreet();
|
||||
$streetNumberMatches = $message->streetNumber === $existingAddress->getStreetNumber();
|
||||
$postcodeMatches = null !== $existingAddress->getPostcode()
|
||||
&& $message->postcode === $existingAddress->getPostcode()->getCode();
|
||||
|
||||
if ($streetMatches && $streetNumberMatches && $postcodeMatches) {
|
||||
return true;
|
||||
return $streetMatches && $streetNumberMatches && $postcodeMatches;
|
||||
}
|
||||
|
||||
private function findGenderByValue(?string $genderValue): ?Gender
|
||||
{
|
||||
if (null === $genderValue) {
|
||||
return null;
|
||||
}
|
||||
|
||||
foreach (GenderEnum::cases() as $case) {
|
||||
if ($case->value === $genderValue) {
|
||||
$genders = $this->genderRepository->findByGenderTranslation($case);
|
||||
|
||||
return count($genders) > 0 ? $genders[0] : null;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
|
||||
private function findNeutralGender(): ?Gender
|
||||
{
|
||||
$genders = $this->genderRepository->findByGenderTranslation(GenderEnum::NEUTRAL);
|
||||
|
||||
return count($genders) > 0 ? $genders[0] : null;
|
||||
}
|
||||
|
||||
private function findCenterByName(?string $centerName): ?Center
|
||||
{
|
||||
if (null === $centerName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$centers = $this->centerRepository->findBy(['name' => $centerName]);
|
||||
|
||||
return count($centers) > 0 ? $centers[0] : null;
|
||||
}
|
||||
|
||||
private function handlePersonMessage(UpsertMessage $message, Person $person): Person
|
||||
@@ -91,11 +121,14 @@ readonly class PersonUpsertHandler
|
||||
|
||||
if (null !== $currentHousehold && $hasAddressInfo) {
|
||||
$currentAddresses = $currentHousehold->getAddresses()->toArray();
|
||||
$addressMatches = $this->messageAddressExistsAddresses($currentAddresses, $message);
|
||||
$lastCurrentAddress = end($currentAddresses);
|
||||
|
||||
if (!$addressMatches) {
|
||||
$newAddress = $this->createAddressWithMessage($message);
|
||||
$currentHousehold->addAddress($newAddress);
|
||||
if (false !== $lastCurrentAddress) {
|
||||
$messageAddressMatch = $this->isMessageAddressMatch($lastCurrentAddress, $message);
|
||||
if (!$messageAddressMatch) {
|
||||
$newAddress = $this->createAddressWithMessage($message);
|
||||
$currentHousehold->addAddress($newAddress);
|
||||
}
|
||||
}
|
||||
} elseif (null === $currentHousehold && $hasAddressInfo) {
|
||||
// Create a new household with a new address
|
||||
@@ -135,33 +168,19 @@ readonly class PersonUpsertHandler
|
||||
}
|
||||
|
||||
// Handle gender
|
||||
$gender = null;
|
||||
if (null !== $message->gender) {
|
||||
// Try to find gender by the provided value
|
||||
foreach (GenderEnum::cases() as $case) {
|
||||
if ($case->value === $message->gender) {
|
||||
$genders = $this->genderRepository->findByGenderTranslation($case);
|
||||
$gender = count($genders) > 0 ? $genders[0] : null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If no gender found or provided, use neutral as default
|
||||
$gender = $this->findGenderByValue($message->gender);
|
||||
if (null === $gender) {
|
||||
$genders = $this->genderRepository->findByGenderTranslation(GenderEnum::NEUTRAL);
|
||||
$gender = count($genders) > 0 ? $genders[0] : null;
|
||||
} else {
|
||||
// If no gender found or provided, use neutral as default
|
||||
$gender = $this->findNeutralGender();
|
||||
}
|
||||
if (null !== $gender) {
|
||||
$person->setGender($gender);
|
||||
}
|
||||
|
||||
// Handle center
|
||||
if (null !== $message->center) {
|
||||
$centers = $this->centerRepository->findBy(['name' => $message->center]);
|
||||
$center = count($centers) > 0 ? $centers[0] : null;
|
||||
if (null !== $center) {
|
||||
$person->setCenter($center);
|
||||
}
|
||||
$center = $this->findCenterByName($message->center);
|
||||
if (null !== $center) {
|
||||
$person->setCenter($center);
|
||||
}
|
||||
|
||||
return $person;
|
||||
@@ -198,7 +217,7 @@ readonly class PersonUpsertHandler
|
||||
/** @var PersonIdentifier $identifier */
|
||||
$identifier = $identifiers[0];
|
||||
$person = $identifier->getPerson();
|
||||
$person = $this->handlePersonMessage($message, $person);
|
||||
$this->handlePersonMessage($message, $person);
|
||||
}
|
||||
|
||||
$this->entityManager->flush();
|
||||
|
||||
Reference in New Issue
Block a user