commit 1d4d9f32c3cf8953f4488cd3b9ca4116a44aa3a8
parent 1fad00b77df5542996ab2c632cb28c7ca68f9774
Author: Felicitus <felicitus@felicitus.org>
Date: Mon, 5 Oct 2015 19:27:50 +0200
Moved setDefault to an own action, removed part measurement unit controller, added part measurement unit service
Diffstat:
6 files changed, 116 insertions(+), 49 deletions(-)
diff --git a/src/PartKeepr/PartBundle/Action/SetDefaultUnitAction.php b/src/PartKeepr/PartBundle/Action/SetDefaultUnitAction.php
@@ -0,0 +1,56 @@
+<?php
+
+
+namespace PartKeepr\PartBundle\Action;
+
+
+use Dunglas\ApiBundle\Action\ActionUtilTrait;
+use Dunglas\ApiBundle\Exception\RuntimeException;
+use Dunglas\ApiBundle\Model\DataProviderInterface;
+use PartKeepr\PartBundle\Entity\PartMeasurementUnit;
+use PartKeepr\PartBundle\Services\PartMeasurementUnitService;
+use Symfony\Component\HttpFoundation\Request;
+
+class SetDefaultUnitAction
+{
+ use ActionUtilTrait;
+
+ /**
+ * @var PartMeasurementUnitService
+ */
+ private $partMeasurementUnitService;
+
+ /**
+ * @var DataProviderInterface
+ */
+ private $dataProvider;
+
+ public function __construct (DataProviderInterface $dataProvider, PartMeasurementUnitService $partMeasurementUnitService) {
+ $this->dataProvider = $dataProvider;
+ $this->partMeasurementUnitService = $partMeasurementUnitService;
+ }
+
+ /**
+ * Retrieves a collection of resources.
+ *
+ * @param Request $request The request
+ * @param int $id The ID of the part
+ *
+ * @return array|\Dunglas\ApiBundle\Model\PaginatorInterface|\Traversable
+ *
+ * @throws RuntimeException
+ */
+ public function __invoke(Request $request, $id)
+ {
+ list($resourceType) = $this->extractAttributes($request);
+
+ /**
+ * @var PartMeasurementUnit $partMeasurementUnit
+ */
+ $partMeasurementUnit = $this->getItem($this->dataProvider, $resourceType, $id);
+
+ $this->partMeasurementUnitService->setDefault($partMeasurementUnit);
+
+ return $partMeasurementUnit;
+ }
+}
diff --git a/src/PartKeepr/PartBundle/Controller/PartMeasurementUnitController.php b/src/PartKeepr/PartBundle/Controller/PartMeasurementUnitController.php
@@ -1,48 +0,0 @@
-<?php
-namespace PartKeepr\PartBundle\Controller;
-
-use Doctrine\ORM\EntityManager;
-use Dunglas\ApiBundle\JsonLd\Response;
-use Nelmio\ApiDocBundle\Tests\Fixtures\Controller\ResourceController;
-use Symfony\Component\HttpFoundation\Request;
-
-class PartMeasurementUnitController extends ResourceController
-{
- public function setDefaultAction(Request $request, $id)
- {
- /**
- * @var $em EntityManager
- */
- $em = $this->get("doctrine")->getEntityManager();
-
- $em->beginTransaction();
-
- $resource = $this->getResource($request);
- $this->findOrThrowNotFound($resource, $id);
-
-
-
- $dql = 'UPDATE PartKeepr\PartBundle\Entity\PartMeasurementUnit pu SET pu.isDefault = :default WHERE pu.id = :id';
-
- $em->createQuery($dql)
- ->setParameter("id", $id)
- ->setParameter(
- "default",
- true,
- \PDO::PARAM_BOOL
- )->execute();
-
- $dql = 'UPDATE PartKeepr\PartBundle\Entity\PartMeasurementUnit pu SET pu.isDefault = :default WHERE pu.id != :id';
-
- $em->createQuery($dql)
- ->setParameter("id", $id)
- ->setParameter(
- "default",
- false,
- \PDO::PARAM_BOOL
- )->execute();
-
- $em->commit();
- return new Response();
- }
-}-
\ No newline at end of file
diff --git a/src/PartKeepr/PartBundle/DependencyInjection/PartKeeprPartExtension.php b/src/PartKeepr/PartBundle/DependencyInjection/PartKeeprPartExtension.php
@@ -21,5 +21,6 @@ class PartKeeprPartExtension extends Extension
{
$loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('actions.xml');
+ $loader->load('services.xml');
}
}
diff --git a/src/PartKeepr/PartBundle/Resources/config/actions.xml b/src/PartKeepr/PartBundle/Resources/config/actions.xml
@@ -20,5 +20,9 @@
<argument type="service" id="partkeepr.userservice" />
<argument type="service" id="doctrine"/>
</service>
+ <service id="partkeepr.part_measurement_unit.set_default" class="PartKeepr\PartBundle\Action\SetDefaultUnitAction">
+ <argument type="service" id="api.data_provider"/>
+ <argument type="service" id="partkeepr.part_measurement_unit_service"/>
+ </service>
</services>
</container>
diff --git a/src/PartKeepr/PartBundle/Resources/config/services.xml b/src/PartKeepr/PartBundle/Resources/config/services.xml
@@ -0,0 +1,12 @@
+<?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_measurement_unit_service" class="PartKeepr\PartBundle\Services\PartMeasurementUnitService">
+ <argument type="service" id="doctrine.orm.default_entity_manager"/>
+ </service>
+ </services>
+</container>
diff --git a/src/PartKeepr/PartBundle/Services/PartMeasurementUnitService.php b/src/PartKeepr/PartBundle/Services/PartMeasurementUnitService.php
@@ -0,0 +1,43 @@
+<?php
+
+
+namespace PartKeepr\PartBundle\Services;
+
+
+use Doctrine\ORM\EntityManager;
+use PartKeepr\PartBundle\Entity\PartMeasurementUnit;
+
+class PartMeasurementUnitService
+{
+ private $entityManager;
+
+ public function __construct (EntityManager $entityManager) {
+ $this->entityManager = $entityManager;
+ }
+
+ public function setDefault (PartMeasurementUnit $partMeasurementUnit) {
+ $this->entityManager->beginTransaction();
+
+ $dql = 'UPDATE PartKeepr\PartBundle\Entity\PartMeasurementUnit pu SET pu.default = :default WHERE pu.id = :id';
+
+ $this->entityManager->createQuery($dql)
+ ->setParameter("id", $partMeasurementUnit->getId())
+ ->setParameter(
+ "default",
+ true,
+ \PDO::PARAM_BOOL
+ )->execute();
+
+ $dql = 'UPDATE PartKeepr\PartBundle\Entity\PartMeasurementUnit pu SET pu.default = :default WHERE pu.id != :id';
+
+ $this->entityManager->createQuery($dql)
+ ->setParameter("id", $partMeasurementUnit->getId())
+ ->setParameter(
+ "default",
+ false,
+ \PDO::PARAM_BOOL
+ )->execute();
+
+ $this->entityManager->commit();
+ }
+}