<?php
namespace App\DTO\Program;
use App\Entity\Program;
use AutoMapperPlus\AutoMapperPlusBundle\AutoMapperConfiguratorInterface;
use AutoMapperPlus\Configuration\AutoMapperConfigInterface;
use App\Service\BaseService;
class ProgramMapper extends BaseService implements AutoMapperConfiguratorInterface
{
public function configure(AutoMapperConfigInterface $config): void
{
$this->autoMapper->getConfiguration()->registerMapping('App\Entity\Program', 'App\DTO\Program\ProgramOutput')
->forMember('brochure', function (\App\Entity\Program $program) {
if (!$program->getBrochure()) return null;
return $this->uploadsStorage->publicUrl($program->getBrochure()->getPath());
})
->forMember('media', function (\App\Entity\Program $program) {
if (!$program->getMedia()) return null;
return $this->uploadsStorage->publicUrl($program->getMedia()->getPath());
})
->forMember('campuses', function (\App\Entity\Program $program) {
$campuses = $program->getCampuses();
if (!$campuses) return null;
$result = [];
foreach ($campuses as $campus) {
$result[] = [
'id' => $campus->getId(),
'name' => $campus->getName()
];
}
return $result;
})
->forMember('cursus', function (\App\Entity\Program $program) {
$cursus = $program->getCursus();
if (!$cursus) return null;
return $this->qcmService->autoMapper->mapMultiple($cursus, 'App\DTO\Cursus\CursusOutput');
})
->forMember('school', function (\App\Entity\Program $program) {
$school = $program->getSchool();
if (!$school) return null;
return [
'id' => $program->getSchool(),
'name' => Program::SCHOOLS[$program->getSchool()]
];
})
;
}
}