em->getRepository(Todo::class)->findAll(); return new JsonResponse($this->normalizer->normalize($items, 'json')); } #[Route('', name: 'todo_create', methods: ['POST'])] public function create(#[MapRequestPayload] CreateTodoDto $dto): JsonResponse { $entity = new Todo(); $entity->setTitle($dto->title); $entity->setDone($dto->done); $this->em->persist($entity); $this->em->flush(); return new JsonResponse( $this->normalizer->normalize($entity, 'json'), Response::HTTP_CREATED, ); } #[Route('/{id}', name: 'todo_update', methods: ['PATCH'])] public function update(string $id, #[MapRequestPayload] UpdateTodoDto $dto): JsonResponse { $entity = $this->em->getRepository(Todo::class)->find($id); if (null === $entity) { return new JsonResponse( ['title' => 'Not Found', 'status' => 404], Response::HTTP_NOT_FOUND, ['Content-Type' => 'application/problem+json'], ); } if (null !== $dto->title) { $entity->setTitle($dto->title); } if (null !== $dto->done) { $entity->setDone($dto->done); } $this->em->flush(); return new JsonResponse($this->normalizer->normalize($entity, 'json')); } #[Route('/{id}', name: 'todo_delete', methods: ['DELETE'])] public function delete(string $id): JsonResponse { $entity = $this->em->getRepository(Todo::class)->find($id); if (null === $entity) { return new JsonResponse(null, Response::HTTP_NO_CONTENT); } $this->em->remove($entity); $this->em->flush(); return new JsonResponse(null, Response::HTTP_NO_CONTENT); } }