json($output->success([ 'subjects' => $subjectPresenter->presentMany($repo->findAll()), ])); } #[Route('/api/subjects', methods: ['POST'])] public function create( Request $request, EntityManagerInterface $em, #[CurrentUser] User $user, ): JsonResponse { $payload = $request->getPayload(); $subject = new Restaurant(); $subject->setName($payload->get('name')); $subject->setCreatedBy($user); if ($payload->has('latitude')) { $subject->setLatitude($payload->getString('latitude')); } if ($payload->has('longitude')) { $subject->setLongitude($payload->getString('longitude')); } $em->persist($subject); $em->flush(); return $this->json(null, 201); } #[Route('/api/subjects/{id}', methods: ['GET'])] public function show( int $id, SubjectRepository $repository, SubjectPresenter $presenter, OutputService $output, ): JsonResponse { $subject = $repository->find($id); if ($subject === null) { return $this->json($output->error(['UNKNOWN_SUBJECT']), 404); } return $this->json($output->success(['subject' => $presenter->present($subject)])); } #[Route('/api/subjects/{id}', methods: ['PATCH'])] public function update( int $id, Request $request, EntityManagerInterface $em, OutputService $output, SubjectRepository $repository, ): JsonResponse { $subject = $repository->find($id); if ($subject === null) { return $this->json( $output->error(["UNKNOWN_SUBJECT"]) ); } $payload = $request->getPayload(); if ($payload->has('name')) { $subject->setName($payload->getString('name')); } if ($payload->has('latitude')) { $subject->setLatitude($payload->getString('latitude')); } if ($payload->has('longitude')) { $subject->setLongitude($payload->getString('longitude')); } $em->flush(); return $this->json(null, 202); } #[Route('/api/subjects/{id}', methods: ['DELETE'])] public function delete( int $id, EntityManagerInterface $em, OutputService $output, SubjectRepository $repository, ): JsonResponse { $subject = $repository->find($id); if ($subject === null) { return $this->json($output->error(["UNKNOWN_SUBJECT"])); } $em->remove($subject); $em->flush(); return $this->json(null, 204); } }