Procházet zdrojové kódy

Merged in FD3-663 (pull request #20)

Agregado del rest para transiciones de workflow

Approved-by: Guillermo Espinoza <guillermo@interlink.com.ar>
Gabriel Gosparo před 7 roky
rodič
revize
c5daa6696c

+ 50 - 0
src/CablemodemBundle/Controller/REST/CablemodemRESTController.php

@@ -5,6 +5,14 @@ namespace CablemodemBundle\Controller\REST;
 use CablemodemBundle\Form\CablemodemType;
 use FOS\RestBundle\Controller\Annotations\RouteResource;
 use WebserviceBundle\Controller\RESTController;
+use FOS\RestBundle\Controller\Annotations\View;
+use FOS\RestBundle\View\View as FOSView;
+use Symfony\Component\HttpFoundation\Request;
+use FOS\RestBundle\Util\Codes;
+
+use FOS\RestBundle\Controller\Annotations\Patch;
+use FOS\RestBundle\Controller\Annotations\Get;
+
 
 /**
  * Cablemodem controller.
@@ -29,4 +37,46 @@ class CablemodemRESTController extends RESTController
         return get_class(new CablemodemType());
     }
     
+    /**
+     * GET Route annotation.
+     * @Get("/cablemodem/{id}/apply/{workflow}/{transition}")
+     * @View(statusCode=201, serializerEnableMaxDepthChecks=true)
+     *
+     * @param Request $request
+     * @param $id
+     * @param $transition
+     * @param $workflow
+     *
+     * @return Response
+     */
+    public function applyAction(Request $request, Int $id, String $workflow, String $transition)
+    {
+        $tenancyService = $this->getTenancyService();
+
+        try {
+            $em = $this->container->get("doctrine.orm.entity_manager");
+            $tenancyService->disableFilter();
+            $entity = $em->getRepository('CablemodemBundle:Cablemodem')->find($id);
+
+            $wr = $this->container->get("workflow.registry");
+            $wf = $wr->get($entity, $workflow);
+
+            $newState = $wf->apply($entity, $transition);
+
+            $validator = $this->container->get('validator');
+            $errors = $validator->validate($entity);
+            if (count($errors) > 0) {
+                $errorsString = (string) $errors;
+                $tenancyService->enableFilter();
+                return FOSView::create($errorsString, Codes::HTTP_INTERNAL_SERVER_ERROR);
+            } else {
+                $em->persist($entity);
+                $em->flush($entity);
+                $tenancyService->enableFilter();
+                return $entity;
+            }
+        } catch (\Exception $e) {
+            return FOSView::create($e->getMessage(), Codes::HTTP_INTERNAL_SERVER_ERROR);
+        }
+    }
 }