Plugin: XAPI: Refactor statement controller - refs BT#18201

pull/4376/head
Angel Fernando Quiroz Campos 3 years ago
parent dd515f2c62
commit 2fd3dbfb3b
  1. 105
      plugin/xapi/src/Lrs/StatementsController.php

@ -5,8 +5,8 @@
namespace Chamilo\PluginBundle\XApi\Lrs; namespace Chamilo\PluginBundle\XApi\Lrs;
use Chamilo\PluginBundle\XApi\Lrs\Util\InternalLogUtil; use Chamilo\PluginBundle\XApi\Lrs\Util\InternalLogUtil;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Xabbuh\XApi\Model\Statement;
use Xabbuh\XApi\Serializer\Symfony\ActorSerializer; use Xabbuh\XApi\Serializer\Symfony\ActorSerializer;
use Xabbuh\XApi\Serializer\Symfony\Serializer; use Xabbuh\XApi\Serializer\Symfony\Serializer;
use Xabbuh\XApi\Serializer\Symfony\SerializerFactory; use Xabbuh\XApi\Serializer\Symfony\SerializerFactory;
@ -26,21 +26,40 @@ use XApiPlugin;
*/ */
class StatementsController extends BaseController class StatementsController extends BaseController
{ {
public function get(): Response /**
* @var StatementRepository
*/
private $statementRepository;
/**
* @var \Symfony\Component\Serializer\Serializer|\Symfony\Component\Serializer\SerializerInterface
*/
private $serializer;
/**
* @var SerializerFactory
*/
private $serializerFactory;
public function __construct(Request $httpRequest)
{ {
parent::__construct($httpRequest);
$pluginEm = XApiPlugin::getEntityManager(); $pluginEm = XApiPlugin::getEntityManager();
$serializer = Serializer::createSerializer(); $this->statementRepository = new StatementRepository(
$factory = new SerializerFactory($serializer); $pluginEm->getRepository(StatementEntity::class)
);
$this->serializer = Serializer::createSerializer();
$this->serializerFactory = new SerializerFactory($this->serializer);
}
public function get(): Response
{
$getStatementController = new StatementGetController( $getStatementController = new StatementGetController(
new StatementRepository( $this->statementRepository,
$pluginEm->getRepository(StatementEntity::class) $this->serializerFactory->createStatementSerializer(),
), $this->serializerFactory->createStatementResultSerializer(),
$factory->createStatementSerializer(),
$factory->createStatementResultSerializer(),
new StatementsFilterFactory( new StatementsFilterFactory(
new ActorSerializer($serializer) new ActorSerializer($this->serializer)
) )
); );
@ -49,83 +68,53 @@ class StatementsController extends BaseController
public function head(): Response public function head(): Response
{ {
$pluginEm = XApiPlugin::getEntityManager();
$serializer = Serializer::createSerializer();
$factory = new SerializerFactory($serializer);
$headStatementController = new StatementHeadController( $headStatementController = new StatementHeadController(
new StatementRepository( $this->statementRepository,
$pluginEm->getRepository(StatementEntity::class) $this->serializerFactory->createStatementSerializer(),
), $this->serializerFactory->createStatementResultSerializer(),
$factory->createStatementSerializer(),
$factory->createStatementResultSerializer(),
new StatementsFilterFactory( new StatementsFilterFactory(
new ActorSerializer($serializer) new ActorSerializer($this->serializer)
) )
); );
return $headStatementController->getStatement($this->httpRequest); return $headStatementController->getStatement($this->httpRequest);
} }
/** public function put(): Response
* @return \Symfony\Component\HttpFoundation\Response
*/
public function put()
{ {
$pluginEm = XApiPlugin::getEntityManager(); $statement = $this->serializerFactory
->createStatementSerializer()
$putStatementController = new StatementPutController( ->deserializeStatement(
new StatementRepository(
$pluginEm->getRepository(StatementEntity::class)
)
);
$statement = $this->deserializeStatement(
$this->httpRequest->getContent() $this->httpRequest->getContent()
); )
;
InternalLogUtil::saveStatementForInternalLog($statement); InternalLogUtil::saveStatementForInternalLog($statement);
$putStatementController = new StatementPutController($this->statementRepository);
return $putStatementController->putStatement($this->httpRequest, $statement); return $putStatementController->putStatement($this->httpRequest, $statement);
} }
public function post(): Response public function post(): Response
{ {
$pluginEm = XApiPlugin::getEntityManager();
$postStatementController = new StatementPostController(
new StatementRepository(
$pluginEm->getRepository(StatementEntity::class)
)
);
$content = $this->httpRequest->getContent(); $content = $this->httpRequest->getContent();
if (substr($content, 0, 1) !== '[') { if (substr($content, 0, 1) !== '[') {
$content = "[$content]"; $content = "[$content]";
} }
$statements = $this->deserializeStatements($content); $statements = $this->serializerFactory
->createStatementSerializer()
->deserializeStatements($content)
;
foreach ($statements as $statement) { foreach ($statements as $statement) {
InternalLogUtil::saveStatementForInternalLog($statement); InternalLogUtil::saveStatementForInternalLog($statement);
} }
return $postStatementController->postStatements($this->httpRequest, $statements); $postStatementController = new StatementPostController($this->statementRepository);
}
private function deserializeStatement(string $content = ''): Statement
{
$factory = new SerializerFactory(Serializer::createSerializer());
return $factory->createStatementSerializer()->deserializeStatement($content); return $postStatementController->postStatements($this->httpRequest, $statements);
}
private function deserializeStatements(string $content = ''): array
{
$factory = new SerializerFactory(Serializer::createSerializer());
return $factory->createStatementSerializer()->deserializeStatements($content);
} }
} }

Loading…
Cancel
Save