src/DTO/Offer/OfferMapper.php line 89

Open in your IDE?
  1. <?php
  2. namespace App\DTO\Offer;
  3. use App\Constant\Common;
  4. use AutoMapperPlus\AutoMapperPlusBundle\AutoMapperConfiguratorInterface;
  5. use AutoMapperPlus\Configuration\AutoMapperConfigInterface;
  6. use App\Service\BaseService;
  7. class OfferMapper extends BaseService implements AutoMapperConfiguratorInterface
  8. {
  9.     public function configure(AutoMapperConfigInterface $config): void
  10.     {
  11.         $mapping = $this->autoMapper->getConfiguration()->registerMapping('App\Entity\Offer', 'App\DTO\Offer\OfferOutputList')
  12.             ->forMember('url', function (\App\Entity\Offer $offer) {
  13.                 return $this->offerService->getUrl($offer);
  14.             })
  15.             ->forMember('urlReview', function (\App\Entity\Offer $offer) {
  16.                 return $this->offerService->getUrl($offer, Common::REVIEW);
  17.             })
  18.             ->forMember('campuses', function (\App\Entity\Offer $offer) {
  19.                 $campuses = $offer->getCampuses();
  20.                 if (!$campuses) return null;
  21.                 $result = [];
  22.                 foreach ($campuses as $campus) {
  23.                     $result[] = [
  24.                         'id'   => $campus->getId(),
  25.                         'name' => $campus->getName()
  26.                     ];
  27.                 }
  28.                 return $result;
  29.             })
  30.             ->forMember('contract', function (\App\Entity\Offer $offer) {
  31.                 $contact = $offer->getContract();
  32.                 if (!$contact) return null;
  33.                 return [
  34.                     'id'           => $contact->getId(),
  35.                     'name'         => $contact->getName(),
  36.                     'name_display' => $contact->getNameDisplay()
  37.                 ];
  38.             })
  39.             ->forMember('expertise', function (\App\Entity\Offer $offer) {
  40.                 $expertises = $offer->getExpertise();
  41.                 if (!$expertises) return null;
  42.                 $result = [];
  43.                 foreach ($expertises as $expertise) {
  44.                     $result[] = [
  45.                         'id'   => $expertise->getId(),
  46.                         'name' => $expertise->getName()
  47.                     ];
  48.                 }
  49.                 return $result;
  50.             })
  51.             ->forMember('studyLevel', function (\App\Entity\Offer $offer) {
  52.                 $studyLevel = $offer->getStudyLevel();
  53.                 if (!$studyLevel) return null;
  54.                 return  [
  55.                     'id'   => $studyLevel->getId(),
  56.                     'name' => $studyLevel->getName()
  57.                 ];
  58.             })
  59.             ->forMember('skill', function (\App\Entity\Offer $offer) {
  60.                 $skills = $offer->getSkill();
  61.                 if (!$skills) return null;
  62.                 $result = [];
  63.                 foreach ($skills as $skill) {
  64.                     $result[] = [
  65.                         'id'   => $skill->getId(),
  66.                         'name' => $skill->getName()
  67.                     ];
  68.                 }
  69.                 return $result;
  70.             })
  71.             ->forMember('validDate', function (\App\Entity\Offer $offer) {
  72.                 return $offer->getValidDate() ? $offer->getValidDate()->format('Y-m-d') : null;
  73.             })
  74.             ->forMember('fullName', function (\App\Entity\Offer $offer) {
  75.                 return $offer->getFirstName() . " " .  $offer->getLastName();
  76.             })
  77.             ->forMember('totalApply', function (\App\Entity\Offer $offer) {
  78.                 return count($this->autoMapper->mapMultiple($offer->getJobCandidates(), 'App\DTO\JobCandidate\JobCandidateOutput'));
  79.             });
  80.         $mappingOutput = $config->registerMapping('App\Entity\Offer', 'App\DTO\Offer\OfferOutput')
  81.             ->copyFromMapping($mapping)
  82.             ->forMember('gender', function (\App\Entity\Offer $offer) {
  83.                 return $offer->getGender() ? 1 : 0;
  84.             })
  85.             ->forMember('logoUrl', function (\App\Entity\Offer $offer) {
  86.                 if (!$offer->getLogo()) return null;
  87.                 return $this->uploadsStorage->publicUrl($offer->getLogo());
  88.             })
  89.             ->forMember('descriptionFileUrl', function (\App\Entity\Offer $offer) {
  90.                 if (!$offer->getDescriptionFile()) return null;
  91.                 return $this->uploadsStorage->publicUrl($offer->getDescriptionFile());
  92.             });
  93.         $config->registerMapping('App\Entity\Offer', 'App\DTO\Offer\OfferOutputEmail')
  94.             ->copyFromMapping($mappingOutput);
  95.     }
  96. }