src/Controller/JobOfferController.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\JobOffer;
  4. use App\Repository\JobOfferRepository;
  5. use DateTime;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use FOS\RestBundle\Controller\Annotations as Rest;
  8. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Serializer\Exception\ExceptionInterface;
  14. use Symfony\Component\Serializer\Exception\NotEncodableValueException;
  15. use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
  16. use Symfony\Component\Validator\Validator\ValidatorInterface;
  17. class JobOfferController extends AbstractController
  18. {
  19.     /**
  20.      * @Rest\Get("/api/jobs", name="_get_jobs")
  21.      * @param JobOfferRepository $jobOfferRepository
  22.      * @param NormalizerInterface $normalizer
  23.      * @return Response
  24.      * @throws ExceptionInterface
  25.      */
  26.     public function getJobsOffer(JobOfferRepository $jobOfferRepositoryNormalizerInterface $normalizer): Response
  27.     {
  28.         $jobOfferNormalize $normalizer->normalize($jobOfferRepository->findAll(), 'json', ['groups' => 'post:read']);
  29.         return $this->json([
  30.             'jobs' => $jobOfferNormalize,
  31.         ]);
  32.     }
  33.     /**
  34.      * @Rest\Get("/api/jobs/home", name="_get_jobs_home")
  35.      * @param JobOfferRepository $jobOfferRepository
  36.      * @param NormalizerInterface $normalizer
  37.      * @return Response
  38.      * @throws ExceptionInterface
  39.      */
  40.     public function getJobsOfferHome(JobOfferRepository $jobOfferRepositoryNormalizerInterface $normalizer): Response
  41.     {
  42.         $jobOfferNormalize $normalizer->normalize($jobOfferRepository->findJobsOfferHome(), 'json', ['groups' => 'post:read:home']);
  43.         return $this->json([
  44.             'jobs' => $jobOfferNormalize,
  45.         ]);
  46.     }
  47.     /**
  48.      * @Rest\Post("/api/jobs/new", name="_post_jobs_new")
  49.      * @IsGranted("ROLE_USER")
  50.      * @param Request $request
  51.      * @param EntityManagerInterface $manager
  52.      * @param ValidatorInterface $validator
  53.      * @return JsonResponse
  54.      */
  55.     public function postJobsNew(Request $requestEntityManagerInterface $managerValidatorInterface $validator): JsonResponse
  56.     {
  57.         try {
  58.             $data json_decode($request->getContent(), true);
  59.             $job = (new JobOffer())
  60.                 ->setActivated(true)
  61.                 ->setCreatedBy($this->getUser())
  62.                 ->setDateCreation(new DateTime())
  63.                 ->setTitle($data['title'] ?? '')
  64.                 ->setDescription($data['description'] ?? '')
  65.                 ->setContract($data['contract'] ?? '')
  66.                 ->setMission($data['mission'] ?? '')
  67.                 ->setKnowledge($data['knowledge'] ?? '')
  68.                 ->setModalities($data['modalities'] ?? '');
  69.             $errors $validator->validate($job);
  70.             if (count($errors) > 0) {
  71.                 return $this->json([
  72.                     $errors
  73.                 ], 400);
  74.             }
  75.             $manager->persist($job);
  76.             $manager->flush();
  77.             return $this->json([
  78.                 'message' => 'The new Job offer has been successfully created.'
  79.             ]);
  80.         } catch (NotEncodableValueException $e) {
  81.             return $this->json([
  82.                 'message' => $e->getMessage()
  83.             ], 400);
  84.         }
  85.     }
  86.     /**
  87.      * @Rest\Put("/api/jobs/{id}/edition", name="_post_jobs_edition")
  88.      * @IsGranted("ROLE_USER")
  89.      * @param JobOffer $jobOffer
  90.      * @param Request $request
  91.      * @param EntityManagerInterface $manager
  92.      * @param ValidatorInterface $validator
  93.      * @return JsonResponse
  94.      */
  95.     public function postJobsEdition(JobOffer $jobOfferRequest $requestEntityManagerInterface $managerValidatorInterface $validator): JsonResponse
  96.     {
  97.         try {
  98.             $data json_decode($request->getContent(), true);
  99.             $jobOffer
  100.                 ->setTitle($data['title'] ?? $jobOffer->getTitle())
  101.                 ->setDescription($data['description'] ?? $jobOffer->getDescription())
  102.                 ->setContract($data['contract'] ?? $jobOffer->getContract())
  103.                 ->setMission($data['mission'] ?? $jobOffer->getMission())
  104.                 ->setKnowledge($data['knowledge'] ?? $jobOffer->getKnowledge())
  105.                 ->setModalities($data['modalities'] ?? $jobOffer->getModalities())
  106.                 ->setDateEdition(new DateTime());
  107.             $errors $validator->validate($jobOffer);
  108.             if (count($errors) > 0) {
  109.                 return $this->json([
  110.                     $errors
  111.                 ], 400);
  112.             }
  113.             $manager->persist($jobOffer);
  114.             $manager->flush();
  115.             return $this->json([
  116.                 'message' => 'The focused Job offer has been successfully edited.'
  117.             ]);
  118.         } catch (NotEncodableValueException $e) {
  119.             return $this->json([
  120.                 'message' => $e->getMessage()
  121.             ], 400);
  122.         }
  123.     }
  124.     /**
  125.      * @Rest\Put("/api/jobs/{id}/activated", name="_post_jobs_activated")
  126.      * @IsGranted("ROLE_USER")
  127.      * @param JobOffer $jobOffer
  128.      * @param Request $request
  129.      * @param EntityManagerInterface $manager
  130.      * @param ValidatorInterface $validator
  131.      * @return JsonResponse
  132.      */
  133.     public function postJobsActivated(JobOffer $jobOfferRequest $requestEntityManagerInterface $managerValidatorInterface $validator): JsonResponse
  134.     {
  135.         try {
  136.             $jobOffer
  137.                 ->setActivated(!$jobOffer->getActivated());
  138.             $errors $validator->validate($jobOffer);
  139.             if (count($errors) > 0) {
  140.                 return $this->json([
  141.                     $errors
  142.                 ], 400);
  143.             }
  144.             $manager->persist($jobOffer);
  145.             $manager->flush();
  146.             return $this->json([
  147.                 'message' => 'The focused Job offer is now activated.'
  148.             ]);
  149.         } catch (NotEncodableValueException $e) {
  150.             return $this->json([
  151.                 'message' => $e->getMessage()
  152.             ], 400);
  153.         }
  154.     }
  155.     /**
  156.      * @Rest\Put("/api/jobs/{id}/delete", name="_put_job_delete")
  157.      * @IsGranted("ROLE_USER")
  158.      * @param JobOffer $jobOffer
  159.      * @param EntityManagerInterface $manager
  160.      * @return JsonResponse
  161.      */
  162.     public function deleteFocusJob(JobOffer $jobOfferEntityManagerInterface $manager): JsonResponse
  163.     {
  164.         try {
  165.             $manager->remove($jobOffer);
  166.             $manager->flush();
  167.             
  168.             return $this->json([
  169.                 'message' => 'The Offer Job has been deleted.'
  170.             ]);
  171.         } catch (NotEncodableValueException $e) {
  172.             return $this->json([
  173.                 'message' => $e->getMessage()
  174.             ], 400);
  175.         }
  176.     }
  177. }