]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Fix rest controller merge
authorJeremy Benoist <jeremy.benoist@gmail.com>
Thu, 3 Nov 2016 16:29:16 +0000 (17:29 +0100)
committerJeremy Benoist <jeremy.benoist@gmail.com>
Thu, 3 Nov 2016 16:29:16 +0000 (17:29 +0100)
src/Wallabag/ApiBundle/Controller/AnnotationRestController.php [new file with mode: 0644]
src/Wallabag/ApiBundle/Controller/EntryRestController.php
src/Wallabag/ApiBundle/Controller/WallabagRestController.php
src/Wallabag/ApiBundle/Resources/config/routing_rest.yml

diff --git a/src/Wallabag/ApiBundle/Controller/AnnotationRestController.php b/src/Wallabag/ApiBundle/Controller/AnnotationRestController.php
new file mode 100644 (file)
index 0000000..2dd26c0
--- /dev/null
@@ -0,0 +1,111 @@
+<?php
+
+namespace Wallabag\ApiBundle\Controller;
+
+use Nelmio\ApiDocBundle\Annotation\ApiDoc;
+use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Wallabag\CoreBundle\Entity\Entry;
+use Wallabag\AnnotationBundle\Entity\Annotation;
+
+class AnnotationRestController extends WallabagRestController
+{
+    /**
+     * Retrieve annotations for an entry.
+     *
+     * @ApiDoc(
+     *      requirements={
+     *          {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
+     *      }
+     * )
+     *
+     * @param Entry $entry
+     *
+     * @return JsonResponse
+     */
+    public function getAnnotationsAction(Entry $entry)
+    {
+        $this->validateAuthentication();
+
+        return $this->forward('WallabagAnnotationBundle:WallabagAnnotation:getAnnotations', [
+            'entry' => $entry,
+        ]);
+    }
+
+    /**
+     * Creates a new annotation.
+     *
+     * @ApiDoc(
+     *      requirements={
+     *          {"name"="ranges", "dataType"="array", "requirement"="\w+", "description"="The range array for the annotation"},
+     *          {"name"="quote", "dataType"="string", "required"=false, "description"="Optional, quote for the annotation"},
+     *          {"name"="text", "dataType"="string", "required"=true, "description"=""},
+     *      }
+     * )
+     *
+     * @param Request $request
+     * @param Entry   $entry
+     *
+     * @return JsonResponse
+     */
+    public function postAnnotationAction(Request $request, Entry $entry)
+    {
+        $this->validateAuthentication();
+
+        return $this->forward('WallabagAnnotationBundle:WallabagAnnotation:postAnnotation', [
+            'request' => $request,
+            'entry' => $entry,
+        ]);
+    }
+
+    /**
+     * Updates an annotation.
+     *
+     * @ApiDoc(
+     *      requirements={
+     *          {"name"="annotation", "dataType"="string", "requirement"="\w+", "description"="The annotation ID"}
+     *      }
+     * )
+     *
+     * @ParamConverter("annotation", class="WallabagAnnotationBundle:Annotation")
+     *
+     * @param Annotation $annotation
+     * @param Request    $request
+     *
+     * @return JsonResponse
+     */
+    public function putAnnotationAction(Annotation $annotation, Request $request)
+    {
+        $this->validateAuthentication();
+
+        return $this->forward('WallabagAnnotationBundle:WallabagAnnotation:putAnnotation', [
+            'annotation' => $annotation,
+            'request' => $request,
+        ]);
+    }
+
+    /**
+     * Removes an annotation.
+     *
+     * @ApiDoc(
+     *      requirements={
+     *          {"name"="annotation", "dataType"="string", "requirement"="\w+", "description"="The annotation ID"}
+     *      }
+     * )
+     *
+     * @ParamConverter("annotation", class="WallabagAnnotationBundle:Annotation")
+     *
+     * @param Annotation $annotation
+     *
+     * @return JsonResponse
+     */
+    public function deleteAnnotationAction(Annotation $annotation)
+    {
+        $this->validateAuthentication();
+
+        return $this->forward('WallabagAnnotationBundle:WallabagAnnotation:deleteAnnotation', [
+            'annotation' => $annotation,
+        ]);
+    }
+}
index b3622c62ce6382d496d9c383ac595553125f9d48..c5bf1df819e4183a53eb2de8fc8acb86b8eaf8b7 100644 (file)
@@ -150,6 +150,28 @@ class EntryRestController extends WallabagRestController
         return (new JsonResponse())->setJson($json);
     }
 
+    /**
+     * Retrieve a single entry as a predefined format.
+     *
+     * @ApiDoc(
+     *      requirements={
+     *          {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
+     *      }
+     * )
+     *
+     * @return Response
+     */
+    public function getEntryExportAction(Entry $entry, Request $request)
+    {
+        $this->validateAuthentication();
+        $this->validateUserAccess($entry->getUser()->getId());
+
+        return $this->get('wallabag_core.helper.entries_export')
+            ->setEntries($entry)
+            ->updateTitle('entry')
+            ->exportAs($request->attributes->get('_format'));
+    }
+
     /**
      * Create an entry.
      *
index 544c1ea936718413658758b5d2507d71c3566a18..1ff593f504c007eef40d59482419f7140f0180c5 100644 (file)
@@ -5,6 +5,8 @@ namespace Wallabag\ApiBundle\Controller;
 use FOS\RestBundle\Controller\FOSRestController;
 use Symfony\Component\Security\Core\Exception\AccessDeniedException;
 use Wallabag\CoreBundle\Entity\Entry;
+use Nelmio\ApiDocBundle\Annotation\ApiDoc;
+use Symfony\Component\HttpFoundation\JsonResponse;
 
 class WallabagRestController extends FOSRestController
 {
@@ -19,6 +21,7 @@ class WallabagRestController extends FOSRestController
     {
         $version = $this->container->getParameter('wallabag_core.version');
         $json = $this->get('serializer')->serialize($version, 'json');
+
         return (new JsonResponse())->setJson($json);
     }
 
index 8e1886acc3c889af75f9aaa9056c4ecb3249b7ae..57d37f4b454fa3aa15d3f4d6a36f194fd428d2ee 100644 (file)
@@ -8,6 +8,11 @@ tag:
   resource: "WallabagApiBundle:TagRest"
   name_prefix:  api_
 
+annotation:
+  type: rest
+  resource: "WallabagApiBundle:AnnotationRest"
+  name_prefix:  api_
+
 misc:
   type: rest
   resource: "WallabagApiBundle:WallabagRest"