partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

commit 90b316951207ab1e6635f8d790ab41cde0ecf432
parent a1e1f8c3ce03ed9bfbcea50e3dc9a2751d9a1cd3
Author: Felicitus <felicitus@felicitus.org>
Date:   Mon, 14 Sep 2015 17:58:48 +0200

Refactored controller methods into ADR actions

Diffstat:
Asrc/PartKeepr/PartBundle/Action/AddStockAction.php | 83+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/PartKeepr/PartBundle/Action/RemoveStockAction.php | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/PartKeepr/PartBundle/Action/SetStockAction.php | 85+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dsrc/PartKeepr/PartBundle/Controller/PartController.php | 119-------------------------------------------------------------------------------
Asrc/PartKeepr/PartBundle/DependencyInjection/PartKeeprPartExtension.php | 25+++++++++++++++++++++++++
Asrc/PartKeepr/PartBundle/Resources/config/actions.xml | 24++++++++++++++++++++++++
6 files changed, 291 insertions(+), 119 deletions(-)

diff --git a/src/PartKeepr/PartBundle/Action/AddStockAction.php b/src/PartKeepr/PartBundle/Action/AddStockAction.php @@ -0,0 +1,83 @@ +<?php +namespace PartKeepr\PartBundle\Action; + +use Dunglas\ApiBundle\Action\ActionUtilTrait; +use Dunglas\ApiBundle\Exception\RuntimeException; +use Dunglas\ApiBundle\Model\DataProviderInterface; +use PartKeepr\CategoryBundle\Exception\RootNodeNotFoundException; +use PartKeepr\PartBundle\Entity\Part; +use PartKeepr\Stock\StockEntry; +use Symfony\Bridge\Doctrine\ManagerRegistry; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage; + +/** + * Adds stock to a given part + */ +class AddStockAction +{ + use ActionUtilTrait; + + /** + * @var DataProviderInterface + */ + private $dataProvider; + + /** + * @var ManagerRegistry + */ + private $registry; + + /** + * @var TokenStorage + */ + private $tokenStorage; + + public function __construct( + DataProviderInterface $dataProvider, + TokenStorage $tokenStorage, + ManagerRegistry $registry + ) { + $this->dataProvider = $dataProvider; + $this->tokenStorage = $tokenStorage; + $this->registry = $registry; + } + + /** + * Retrieves a collection of resources. + * + * @param Request $request + * + * @return array|\Dunglas\ApiBundle\Model\PaginatorInterface|\Traversable + * + * @throws RuntimeException|RootNodeNotFoundException + */ + public function __invoke(Request $request, $id) + { + list($resourceType) = $this->extractAttributes($request); + + $part = $this->getItem($this->dataProvider, $resourceType, $id); + + /** + * @var $part Part + */ + $quantity = $request->request->get("quantity"); + $user = $this->tokenStorage->getToken()->getUser(); + + $stock = new StockEntry(intval($quantity), $user); + + if ($request->request->has("price") && $request->request->get("price") !== null) { + $stock->setPrice(floatval($request->request->get("price"))); + } + + if ($request->request->has("comment") && $request->request->get("comment") !== null) { + $stock->setComment($request->request->get("comment")); + } + + $part->addStockEntry($stock); + $this->registry->getManager()->persist($stock); + $this->registry->getManager()->flush(); + + return $part; + } +} diff --git a/src/PartKeepr/PartBundle/Action/RemoveStockAction.php b/src/PartKeepr/PartBundle/Action/RemoveStockAction.php @@ -0,0 +1,74 @@ +<?php +namespace PartKeepr\PartBundle\Action; + +use Dunglas\ApiBundle\Action\ActionUtilTrait; +use Dunglas\ApiBundle\Exception\RuntimeException; +use Dunglas\ApiBundle\Model\DataProviderInterface; +use PartKeepr\CategoryBundle\Exception\RootNodeNotFoundException; +use PartKeepr\PartBundle\Entity\Part; +use PartKeepr\Stock\StockEntry; +use Symfony\Bridge\Doctrine\ManagerRegistry; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage; + +/** + * Removes stock for a given part + */ +class RemoveStockAction +{ + use ActionUtilTrait; + + /** + * @var DataProviderInterface + */ + private $dataProvider; + + /** + * @var ManagerRegistry + */ + private $registry; + + /** + * @var TokenStorage + */ + private $tokenStorage; + + public function __construct( + DataProviderInterface $dataProvider, + TokenStorage $tokenStorage, + ManagerRegistry $registry + ) { + $this->dataProvider = $dataProvider; + $this->tokenStorage = $tokenStorage; + $this->registry = $registry; + } + /** + * Retrieves a collection of resources. + * + * @param Request $request + * + * @return array|\Dunglas\ApiBundle\Model\PaginatorInterface|\Traversable + * + * @throws RuntimeException|RootNodeNotFoundException + */ + public function __invoke(Request $request, $id) + { + list($resourceType) = $this->extractAttributes($request); + + $part = $this->getItem($this->dataProvider, $resourceType, $id); + + /** + * @var $part Part + */ + $quantity = $request->request->get("quantity"); + $user = $this->tokenStorage->getToken()->getUser(); + + $stock = new StockEntry(0 - intval($quantity), $user); + $part->addStockEntry($stock); + + $this->registry->getManager()->persist($stock); + $this->registry->getManager()->flush(); + + return $part; + } +} diff --git a/src/PartKeepr/PartBundle/Action/SetStockAction.php b/src/PartKeepr/PartBundle/Action/SetStockAction.php @@ -0,0 +1,85 @@ +<?php +namespace PartKeepr\PartBundle\Action; + +use Dunglas\ApiBundle\Action\ActionUtilTrait; +use Dunglas\ApiBundle\Exception\RuntimeException; +use Dunglas\ApiBundle\Model\DataProviderInterface; +use PartKeepr\CategoryBundle\Exception\RootNodeNotFoundException; +use PartKeepr\PartBundle\Entity\Part; +use PartKeepr\Stock\StockEntry; +use Symfony\Bridge\Doctrine\ManagerRegistry; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage; + +/** + * Sets the stock for a given part + */ +class SetStockAction +{ + use ActionUtilTrait; + + /** + * @var DataProviderInterface + */ + private $dataProvider; + + /** + * @var ManagerRegistry + */ + private $registry; + + /** + * @var TokenStorage + */ + private $tokenStorage; + + public function __construct( + DataProviderInterface $dataProvider, + TokenStorage $tokenStorage, + ManagerRegistry $registry + ) { + $this->dataProvider = $dataProvider; + $this->tokenStorage = $tokenStorage; + $this->registry = $registry; + } + /** + * Retrieves a collection of resources. + * + * @param Request $request + * + * @return array|\Dunglas\ApiBundle\Model\PaginatorInterface|\Traversable + * + * @throws RuntimeException|RootNodeNotFoundException + */ + public function __invoke(Request $request, $id) + { + list($resourceType) = $this->extractAttributes($request); + + $part = $this->getItem($this->dataProvider, $resourceType, $id); + + /** + * @var $part Part + */ + $quantity = $request->request->get("quantity"); + $user = $this->tokenStorage->getToken()->getUser(); + + + $oldQuantity = $part->getStockLevel(); + $correctionQuantity = $quantity - $oldQuantity; + + if ($correctionQuantity != 0) { + + $stock = new StockEntry($correctionQuantity, $user); + + if ($request->request->has("comment") && $request->request->get("comment") !== null) { + $stock->setComment($request->request->get("comment")); + } + + $part->addStockEntry($stock); + $this->registry->getManager()->persist($stock); + $this->registry->getManager()->flush(); + } + + return $part; + } +} diff --git a/src/PartKeepr/PartBundle/Controller/PartController.php b/src/PartKeepr/PartBundle/Controller/PartController.php @@ -1,119 +0,0 @@ -<?php -namespace PartKeepr\PartBundle\Controller; - -use Dunglas\ApiBundle\JsonLd\Response; -use FOS\RestBundle\Controller\Annotations\RequestParam; -use Nelmio\ApiDocBundle\Tests\Fixtures\Controller\ResourceController; -use PartKeepr\PartBundle\Entity\Part; -use PartKeepr\Stock\StockEntry; -use Symfony\Component\HttpFoundation\Request; - -class PartController extends ResourceController -{ - /** - * Removes stock from a part - * - * @RequestParam(name="quantity",description="The quantity to be removed") - * @param Request $request The request object - * @param int $id The id of the part to operate on - * - * @return Response - */ - public function removeStockAction(Request $request, $id) - { - $resource = $this->getResource($request); - $part = $this->findOrThrowNotFound($resource, $id); - - /** - * @var $part Part - */ - $quantity = $request->request->get("quantity"); - $user = $this->get('security.token_storage')->getToken()->getUser(); - - $stock = new StockEntry(0 - intval($quantity), $user); - $part->addStockEntry($stock); - $this->getDoctrine()->getManager()->persist($stock); - $this->get("doctrine")->getManager()->flush(); - - - return $this->getSuccessResponse($resource, $part); - } - - /** - * Adds stock to a part - * - * @RequestParam(name="quantity",description="The quantity to be added") - * @RequestParam(name="price",description="The price for the addition",default=null,strict=false) - * @RequestParam(name="comment",description="The comment",default=null,strict=false) - * @param Request $request The request object - * @param int $id The id of the part to operate on - * - * @return Response - */ - public function addStockAction(Request $request, $id) - { - $resource = $this->getResource($request); - $part = $this->findOrThrowNotFound($resource, $id); - - /** - * @var $part Part - */ - $quantity = $request->request->get("quantity"); - $user = $this->get('security.token_storage')->getToken()->getUser(); - - $stock = new StockEntry(intval($quantity), $user); - - if ($request->request->has("price") && $request->request->get("price") !== null) { - $stock->setPrice(floatval($request->request->get("price"))); - } - - if ($request->request->has("comment") && $request->request->get("comment") !== null) { - $stock->setComment($request->request->get("comment")); - } - - $part->addStockEntry($stock); - $this->getDoctrine()->getManager()->persist($stock); - $this->get("doctrine")->getManager()->flush(); - - return $this->getSuccessResponse($resource, $part); - } - - /** - * Sets the stock level for a part - * - * @RequestParam(name="quantity",description="The quantity to be added") - * @RequestParam(name="comment",description="The comment",default=null,strict=false) - * @param Request $request The request object - * @param int $id The id of the part to operate on - * @return Response - */ - public function setStockAction(Request $request, $id) - { - $resource = $this->getResource($request); - $part = $this->findOrThrowNotFound($resource, $id); - - /** - * @var $part Part - */ - $quantity = $request->request->get("quantity"); - $user = $this->get('security.token_storage')->getToken()->getUser(); - - $oldQuantity = $part->getStockLevel(); - $correctionQuantity = $quantity - $oldQuantity; - - if ($correctionQuantity != 0) { - - $stock = new StockEntry($correctionQuantity, $user); - - if ($request->request->has("comment") && $request->request->get("comment") !== null) { - $stock->setComment($request->request->get("comment")); - } - - $part->addStockEntry($stock); - $this->getDoctrine()->getManager()->persist($stock); - $this->get("doctrine")->getManager()->flush(); - } - - return $this->getSuccessResponse($resource, $part); - } -} diff --git a/src/PartKeepr/PartBundle/DependencyInjection/PartKeeprPartExtension.php b/src/PartKeepr/PartBundle/DependencyInjection/PartKeeprPartExtension.php @@ -0,0 +1,25 @@ +<?php + +namespace PartKeepr\PartBundle\DependencyInjection; + +use Symfony\Component\Config\FileLocator; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Loader; +use Symfony\Component\HttpKernel\DependencyInjection\Extension; + +/** + * This is the class that loads and manages your bundle configuration + * + * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html} + */ +class PartKeeprPartExtension extends Extension +{ + /** + * {@inheritdoc} + */ + public function load(array $configs, ContainerBuilder $container) + { + $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + $loader->load('actions.xml'); + } +} diff --git a/src/PartKeepr/PartBundle/Resources/config/actions.xml b/src/PartKeepr/PartBundle/Resources/config/actions.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" ?> + +<container xmlns="http://symfony.com/schema/dic/services" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> + + <services> + <service id="partkeepr.part.add_stock" class="PartKeepr\PartBundle\Action\AddStockAction"> + <argument type="service" id="api.data_provider"/> + <argument type="service" id="security.token_storage" /> + <argument type="service" id="doctrine"/> + </service> + <service id="partkeepr.part.remove_stock" class="PartKeepr\PartBundle\Action\RemoveStockAction"> + <argument type="service" id="api.data_provider"/> + <argument type="service" id="security.token_storage" /> + <argument type="service" id="doctrine"/> + </service> + <service id="partkeepr.part.set_stock" class="PartKeepr\PartBundle\Action\SetStockAction"> + <argument type="service" id="api.data_provider"/> + <argument type="service" id="security.token_storage" /> + <argument type="service" id="doctrine"/> + </service> + </services> +</container>