<?php
namespace App\Service;
use App\Enum\DocumentTypeOrganizationEnum;
use App\Enum\DocumentTypeUserEnum;
use Doctrine\ORM\EntityManagerInterface;
use Evo\Infrastructure\MappingORM\User;
use Lexik\Bundle\JWTAuthenticationBundle\Encoder\JWTEncoderInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class UserChecker
{
private TranslatorInterface $translator;
private JWTEncoderInterface $JWTEncoder;
private EntityManagerInterface $entityManager;
/**
* UserChecker constructor.
*/
public function __construct(
TranslatorInterface $translator,
JWTEncoderInterface $JWTEncoder,
EntityManagerInterface $entityManager
) {
$this->translator = $translator;
$this->JWTEncoder = $JWTEncoder;
$this->entityManager = $entityManager;
}
public function getMandatoryDocuments($isHosted = false)
{
$docs = [
DocumentTypeUserEnum::NIC_RECTO,
DocumentTypeUserEnum::NIC_VERSO,
DocumentTypeUserEnum::NIC_RECTO_VERSO,
DocumentTypeUserEnum::ADDRESS_PROOF,
DocumentTypeUserEnum::PASSPORT,
DocumentTypeUserEnum::RESIDENCE_PERMIT,
DocumentTypeOrganizationEnum::RIB,
];
if ($isHosted) {
$docs = array_merge($docs, [
DocumentTypeUserEnum::HOST_ADDRESS_PROOF,
DocumentTypeUserEnum::HOST_NIC_RECTO,
DocumentTypeUserEnum::HOST_NIC_VERSO,
DocumentTypeUserEnum::HOST_NIC_RECTO_VERSO,
DocumentTypeUserEnum::HOST_CERTIFICATE,
]);
}
$list = [];
foreach ($docs as $docType) {
$list[$docType] = $this->translator->trans(DocumentTypeUserEnum::getReadableValue($docType));
}
return $list;
}
public function checkUserByToken($token)
{
if (!$token) {
return false;
}
$decodedToken = $this->JWTEncoder->decode($token);
if ([] === $decodedToken) {
return false;
}
$email = $decodedToken['username'];
$userRepo = $this->entityManager->getRepository(User::class);
return $userRepo->findOneBy(['email' => $email]);
}
}