em->getRepository(Todo::class)->findAll(); return new JsonResponse($this->normalizer->normalize($items, 'json')); } #[Route('', name: 'todo_create', methods: ['POST'])] public function create(Request $request): JsonResponse { $data = json_decode((string) $request->getContent(), true) ?? []; $entity = new Todo(); if (isset($data['title'])) { $entity->setTitle((string) $data['title']); } if (isset($data['done'])) { $entity->setDone((bool) $data['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, Request $request): 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'], ); } $data = json_decode((string) $request->getContent(), true) ?? []; if (isset($data['title'])) { $entity->setTitle((string) $data['title']); } if (isset($data['done'])) { $entity->setDone((bool) $data['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); } }