]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/ApiBundle/Controller/WallabagRestController.php
Add some tests
[github/wallabag/wallabag.git] / src / Wallabag / ApiBundle / Controller / WallabagRestController.php
index 43225149e4728e3eef4c5566c59c0cb79f3fea6b..869fdc56ab1ba54dbf787d3f281fc357a180fa44 100644 (file)
@@ -334,15 +334,22 @@ class WallabagRestController extends FOSRestController
      *
      * @ApiDoc(
      *      requirements={
-     *          {"name"="tag", "dataType"="integer", "requirement"="\w+", "description"="The tag"}
+     *          {"name"="tag", "dataType"="string", "required"=true, "requirement"="\w+", "description"="Tag as a string"}
      *      }
      * )
      *
      * @return Response
      */
-    public function deleteTagAction(Tag $tag)
+    public function deleteTagLabelAction(Request $request)
     {
         $this->validateAuthentication();
+        $label = $request->request->get('tag', '');
+
+        $tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label);
+
+        if (empty($tag)) {
+            throw $this->createNotFoundException('Tag not found');
+        }
 
         $this->getDoctrine()
             ->getRepository('WallabagCoreBundle:Entry')
@@ -354,60 +361,65 @@ class WallabagRestController extends FOSRestController
     }
 
     /**
-     * Permanently remove one tag from **every** entry.
+     * Permanently remove some tags from **every** entry.
      *
      * @ApiDoc(
      *      requirements={
-     *          {"name"="tag", "dataType"="string", "requirement"="\w+", "description"="The tag as a string"}
+     *          {"name"="tags", "dataType"="string", "required"=true, "format"="tag1,tag2", "description"="Tags as strings (comma splitted)"}
      *      }
      * )
      *
      * @return Response
      */
-    public function deleteTagLabelAction(Request $request)
+    public function deleteTagsLabelAction(Request $request)
     {
         $this->validateAuthentication();
-        $label = $request->query->get('tag', '');
 
-        $tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label);
+        $tagsLabels = $request->request->get('tags', '');
+
+        $tags = [];
+
+        foreach (explode(',', $tagsLabels) as $tagLabel) {
+            $tagEntity = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($tagLabel);
+
+            if (!empty($tagEntity)) {
+                $tags[] = $tagEntity;
+            }
+        }
+
+        if (empty($tags)) {
+            throw $this->createNotFoundException('Tags not found');
+        }
+
         $this->getDoctrine()
             ->getRepository('WallabagCoreBundle:Entry')
-            ->removeTag($this->getUser()->getId(), $tag);
+            ->removeTags($this->getUser()->getId(), $tags);
 
-        $json = $this->get('serializer')->serialize($tag, 'json');
+        $json = $this->get('serializer')->serialize($tags, 'json');
 
         return $this->renderJsonResponse($json);
     }
 
     /**
-     * Permanently remove some tags from **every** entry.
+     * Permanently remove one tag from **every** entry.
      *
      * @ApiDoc(
      *      requirements={
-     *          {"name"="tags", "dataType"="string", "required"=true, "format"="tag1,tag2", "description"="The tags as strings"}
+     *          {"name"="tag", "dataType"="integer", "requirement"="\w+", "description"="The tag"}
      *      }
      * )
      *
      * @return Response
      */
-    public function deleteTagsLabelAction(Request $request)
+    public function deleteTagAction(Tag $tag)
     {
         $this->validateAuthentication();
 
-        $tagsLabels = $request->query->get('tags', '');
-
-        $tags = array();
-
-        foreach (explode(',', $tagsLabels) as $tagLabel) {
-            $tagEntity = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($tagLabel);
-            $tags[] = $tagEntity;
-        }
-
         $this->getDoctrine()
             ->getRepository('WallabagCoreBundle:Entry')
-            ->removeTags($this->getUser()->getId(), $tags);
+            ->removeTag($this->getUser()->getId(), $tag);
 
-        $json = $this->get('serializer')->serialize($tags, 'json');
+        $json = $this->get('serializer')->serialize($tag, 'json');
 
         return $this->renderJsonResponse($json);
     }