Add ApiRecordMapperRunner and EntityRecordMapperRunner

This commit is contained in:
Clemente Raposo 2024-11-21 12:19:22 +00:00 committed by Jack Anderson
parent e9b07c5367
commit ca7479fff1
11 changed files with 105 additions and 78 deletions

View file

@ -31,23 +31,22 @@ namespace App\Data\DataPersister;
use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProcessorInterface;
use App\Data\Entity\Record;
use App\Data\Service\Record\Mappers\RecordMapperRunner;
use App\Data\Service\Record\Mappers\RecordMapperRunnerInterface;
use App\Data\Service\Record\ApiRecordMappers\ApiRecordMapperRunner;
use App\Data\Service\RecordProviderInterface;
class RecordProcessor implements ProcessorInterface
{
protected RecordProviderInterface $recordProvider;
protected RecordMapperRunner $apiRecordMapperRunner;
protected ApiRecordMapperRunner $apiRecordMapperRunner;
/**
* RecordProcessor constructor.
* @param RecordProviderInterface $recordProvider
* @param RecordMapperRunnerInterface $apiRecordMapperRunner
* @param ApiRecordMapperRunner $apiRecordMapperRunner
*/
public function __construct(
RecordProviderInterface $recordProvider,
RecordMapperRunnerInterface $apiRecordMapperRunner
ApiRecordMapperRunner $apiRecordMapperRunner
) {
$this->recordProvider = $recordProvider;
$this->apiRecordMapperRunner = $apiRecordMapperRunner;

View file

@ -32,7 +32,7 @@ use ApiPlatform\State\ProviderInterface;
use App\Data\Entity\Record;
use App\Data\Entity\RecordList;
use App\Data\LegacyHandler\RecordListHandler;
use App\Data\Service\Record\Mappers\RecordMapperRunnerInterface;
use App\Data\Service\Record\ApiRecordMappers\ApiRecordMapperRunner;
/**
* Class RecordListStateProvider
@ -40,20 +40,17 @@ use App\Data\Service\Record\Mappers\RecordMapperRunnerInterface;
*/
class RecordListStateProvider implements ProviderInterface
{
/**
* @var RecordListHandler
*/
protected $recordListHandler;
protected RecordMapperRunnerInterface $apiRecordMapperRunner;
protected RecordListHandler $recordListHandler;
protected ApiRecordMapperRunner $apiRecordMapperRunner;
/**
* RecordListStateProvider constructor.
* @param RecordListHandler $recordListHandler
* @param RecordMapperRunnerInterface $apiRecordMapperRunner
* @param ApiRecordMapperRunner $apiRecordMapperRunner
*/
public function __construct(
RecordListHandler $recordListHandler,
RecordMapperRunnerInterface $apiRecordMapperRunner
ApiRecordMapperRunner $apiRecordMapperRunner
) {
$this->recordListHandler = $recordListHandler;
$this->apiRecordMapperRunner = $apiRecordMapperRunner;

View file

@ -31,7 +31,7 @@ namespace App\Data\DataProvider;
use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProviderInterface;
use App\Data\Entity\Record;
use App\Data\Service\Record\Mappers\RecordMapperRunnerInterface;
use App\Data\Service\Record\ApiRecordMappers\ApiRecordMapperRunner;
use App\Data\Service\RecordProviderInterface;
use Exception;
@ -41,16 +41,16 @@ use Exception;
class RecordStateProvider implements ProviderInterface
{
protected RecordProviderInterface $recordHandler;
protected RecordMapperRunnerInterface $apiRecordMapperRunner;
protected ApiRecordMapperRunner $apiRecordMapperRunner;
/**
* RecordStateProvider constructor.
* @param RecordProviderInterface $recordHandler
* @param RecordMapperRunnerInterface $apiRecordMapperRunner
* @param ApiRecordMapperRunner $apiRecordMapperRunner
*/
public function __construct(
RecordProviderInterface $recordHandler,
RecordMapperRunnerInterface $apiRecordMapperRunner
ApiRecordMapperRunner $apiRecordMapperRunner
) {
$this->recordHandler = $recordHandler;
$this->apiRecordMapperRunner = $apiRecordMapperRunner;

View file

@ -28,7 +28,7 @@
namespace App\Data\LegacyHandler;
use App\Data\Service\AlertProviderInterface;
use App\Data\Service\Record\Mappers\RecordMapperRunnerInterface;
use App\Data\Service\Record\EntityRecordMappers\EntityRecordMapperRunner;
use App\Data\Service\Record\RecordSaveHandlers\RecordSaveHandlerRunnerInterface;
use App\Data\Service\RecordDeletionServiceInterface;
use App\Engine\LegacyHandler\LegacyScopeState;
@ -62,6 +62,8 @@ class AlertHandler extends RecordHandler implements AlertProviderInterface
* @param AclManagerInterface $aclHandler
* @param FavoriteProviderInterface $favorites
* @param RecordDeletionServiceInterface $recordDeletionProvider
* @param EntityRecordMapperRunner $entityRecordMapperRunner
* @param RecordSaveHandlerRunnerInterface $saveHandlerRunner
*/
public function __construct(
string $projectDir,
@ -74,7 +76,7 @@ class AlertHandler extends RecordHandler implements AlertProviderInterface
AclManagerInterface $aclHandler,
FavoriteProviderInterface $favorites,
RecordDeletionServiceInterface $recordDeletionProvider,
RecordMapperRunnerInterface $entityRecordMapperRunner,
EntityRecordMapperRunner $entityRecordMapperRunner,
RecordSaveHandlerRunnerInterface $saveHandlerRunner
) {
parent::__construct(
@ -164,7 +166,7 @@ class AlertHandler extends RecordHandler implements AlertProviderInterface
/** @var \Reminder $bean */
$reminder = BeanFactory::getBean('Reminders', $reminderId, ['encode' => false]);
if (empty($reminder)){
if (empty($reminder)) {
return;
}
$reminder->popup_viewed = 1;

View file

@ -29,8 +29,7 @@ namespace App\Data\LegacyHandler;
use ApiBeanMapper;
use App\Data\Entity\Record;
use App\Data\Service\Record\Mappers\RecordMapperRunner;
use App\Data\Service\Record\Mappers\RecordMapperRunnerInterface;
use App\Data\Service\Record\EntityRecordMappers\EntityRecordMapperRunner;
use App\Data\Service\Record\RecordSaveHandlers\RecordSaveHandlerRunnerInterface;
use App\Data\Service\RecordProviderInterface;
use App\Engine\LegacyHandler\LegacyHandler;
@ -67,8 +66,8 @@ class RecordHandler extends LegacyHandler implements RecordProviderInterface
*/
protected $favorites;
protected RecordMapperRunner $entityRecordMapperRunner;
private RecordSaveHandlerRunnerInterface $saveHandlerRunner;
protected EntityRecordMapperRunner $entityRecordMapperRunner;
protected RecordSaveHandlerRunnerInterface $saveHandlerRunner;
/**
* RecordViewHandler constructor.
@ -81,7 +80,7 @@ class RecordHandler extends LegacyHandler implements RecordProviderInterface
* @param RequestStack $session
* @param AclManagerInterface $aclHandler
* @param FavoriteProviderInterface $favorites
* @param RecordMapperRunnerInterface $entityRecordMapperRunner
* @param EntityRecordMapperRunner $entityRecordMapperRunner
* @param RecordSaveHandlerRunnerInterface $saveHandlerRunner
*/
public function __construct(
@ -94,7 +93,7 @@ class RecordHandler extends LegacyHandler implements RecordProviderInterface
RequestStack $session,
AclManagerInterface $aclHandler,
FavoriteProviderInterface $favorites,
RecordMapperRunnerInterface $entityRecordMapperRunner,
EntityRecordMapperRunner $entityRecordMapperRunner,
RecordSaveHandlerRunnerInterface $saveHandlerRunner
) {
parent::__construct(

View file

@ -27,12 +27,12 @@
namespace App\Data\LegacyHandler;
use App\Data\Service\Record\Mappers\RecordMapperRunnerInterface;
use App\Data\Entity\RecordList;
use App\Data\Service\Record\EntityRecordMappers\EntityRecordMapperRunner;
use App\Data\Service\RecordListProviderInterface;
use App\Engine\LegacyHandler\LegacyHandler;
use App\Engine\LegacyHandler\LegacyScopeState;
use App\Data\Entity\RecordList;
use App\Module\Service\ModuleNameMapperInterface;
use App\Data\Service\RecordListProviderInterface;
use InvalidArgumentException;
use Symfony\Component\HttpFoundation\RequestStack;
@ -58,7 +58,7 @@ class RecordListHandler extends LegacyHandler implements RecordListProviderInter
* @var PresetListDataHandlers
*/
private $presetHandlers;
protected RecordMapperRunnerInterface $entityRecordMapperRunner;
protected EntityRecordMapperRunner $entityRecordMapperRunner;
/**
* SystemConfigHandler constructor.
@ -71,6 +71,7 @@ class RecordListHandler extends LegacyHandler implements RecordListProviderInter
* @param ListDataHandler $listDataHandler
* @param PresetListDataHandlers $presetHandlers
* @param RequestStack $session
* @param EntityRecordMapperRunner $entityRecordMapperRunner
*/
public function __construct(
string $projectDir,
@ -82,10 +83,16 @@ class RecordListHandler extends LegacyHandler implements RecordListProviderInter
ListDataHandler $listDataHandler,
PresetListDataHandlers $presetHandlers,
RequestStack $session,
RecordMapperRunnerInterface $entityRecordMapperRunner,
EntityRecordMapperRunner $entityRecordMapperRunner
) {
parent::__construct($projectDir, $legacyDir, $legacySessionName, $defaultSessionName, $legacyScopeState,
$session);
parent::__construct(
$projectDir,
$legacyDir,
$legacySessionName,
$defaultSessionName,
$legacyScopeState,
$session
);
$this->moduleNameMapper = $moduleNameMapper;
$this->listDataHandler = $listDataHandler;
$this->presetHandlers = $presetHandlers;
@ -143,7 +150,8 @@ class RecordListHandler extends LegacyHandler implements RecordListProviderInter
'ordering' => $listData->getOrdering()
],
$listData->getMeta() ?? []
));
)
);
$this->close();

View file

@ -29,6 +29,7 @@ namespace App\Data\Resolver;
use ApiPlatform\GraphQl\Resolver\QueryItemResolverInterface;
use App\Data\Entity\Record;
use App\Data\Service\Record\ApiRecordMappers\ApiRecordMapperRunner;
use App\Data\Service\RecordProviderInterface;
use Exception;
@ -38,14 +39,20 @@ class RecordItemResolver implements QueryItemResolverInterface
* @var RecordProviderInterface
*/
protected $recordHandler;
private ApiRecordMapperRunner $apiRecordMapperRunner;
/**
* RecordViewResolver constructor.
* @param RecordProviderInterface $recordHandler
* @param ApiRecordMapperRunner $apiRecordMapperRunner
*/
public function __construct(RecordProviderInterface $recordHandler)
public function __construct(
RecordProviderInterface $recordHandler,
ApiRecordMapperRunner $apiRecordMapperRunner
)
{
$this->recordHandler = $recordHandler;
$this->apiRecordMapperRunner = $apiRecordMapperRunner;
}
/**
@ -60,6 +67,9 @@ class RecordItemResolver implements QueryItemResolverInterface
$module = $context['args']['module'] ?? '';
$record = $context['args']['record'] ?? '';
return $this->recordHandler->getRecord($module, $record);
$record = $this->recordHandler->getRecord($module, $record);
$this->apiRecordMapperRunner->toExternal($record, 'retrieve');
return $record;
}
}

View file

@ -28,23 +28,28 @@
namespace App\Data\Resolver;
use ApiPlatform\GraphQl\Resolver\QueryItemResolverInterface;
use App\Data\LegacyHandler\RecordListHandler;
use App\Data\Entity\Record;
use App\Data\Entity\RecordList;
use App\Data\LegacyHandler\RecordListHandler;
use App\Data\Service\Record\ApiRecordMappers\ApiRecordMapperRunner;
class RecordListResolver implements QueryItemResolverInterface
{
/**
* @var RecordListHandler
*/
protected $recordListHandler;
protected RecordListHandler $recordListHandler;
protected ApiRecordMapperRunner $apiRecordMapperRunner;
/**
* RecordListResolver constructor.
* @param RecordListHandler $recordListHandler
* @param ApiRecordMapperRunner $apiRecordMapperRunner
*/
public function __construct(RecordListHandler $recordListHandler)
public function __construct(
RecordListHandler $recordListHandler,
ApiRecordMapperRunner $apiRecordMapperRunner
)
{
$this->recordListHandler = $recordListHandler;
$this->apiRecordMapperRunner = $apiRecordMapperRunner;
}
/**
@ -55,13 +60,24 @@ class RecordListResolver implements QueryItemResolverInterface
*/
public function __invoke($item, array $context): RecordList
{
$module = $context['args']['module'] ?? '';
$limit = $context['args']['limit'] ?? -1;
$offset = $context['args']['offset'] ?? -1;
$criteria = $context['args']['criteria'] ?? [];
$sort = $context['args']['sort'] ?? [];
return $this->recordListHandler->getList($module, $criteria, $offset, $limit, $sort);
$list = $this->recordListHandler->getList($module, $criteria, $offset, $limit, $sort);
$mappedRecords = [];
foreach ($list->getRecords() as $recordArray) {
$record = new Record();
$record->fromArray($recordArray);
$this->apiRecordMapperRunner->toExternal($record, 'list');
$mappedRecords[] = $record->toArray();
}
$list->setRecords($mappedRecords);
return $list;
}
}

View file

@ -25,24 +25,23 @@
* the words "Supercharged by SuiteCRM".
*/
namespace App\Data\Service\Record\ApiRecordMappers;
namespace App\Data\Service\Record\Mappers;
use App\Data\Service\Record\Mappers\BaseFieldMapperRegistry;
use App\Data\Service\Record\Mappers\BaseFieldTypeMapperRegistry;
use App\Data\Service\Record\Mappers\BaseRecordMapperRegistry;
use App\Data\Service\Record\Mappers\RecordMapperRunner;
use App\FieldDefinitions\Service\FieldDefinitionsProviderInterface;
class RecordMapperRunnerFactory implements RecordMapperRunnerFactoryInterface
class ApiRecordMapperRunner extends RecordMapperRunner
{
public static function create(
BaseFieldMapperRegistry $fieldMapperRegistry,
BaseFieldTypeMapperRegistry $fieldTypeMapperRegistry,
BaseRecordMapperRegistry $recordMapperRegistry,
public function __construct(
BaseFieldMapperRegistry $apiFieldMapperRegistry,
BaseFieldTypeMapperRegistry $apiFieldTypeMapperRegistry,
BaseRecordMapperRegistry $apiRecordMapperRegistry,
FieldDefinitionsProviderInterface $fieldDefinitions
): RecordMapperRunnerInterface {
return new RecordMapperRunner(
$fieldMapperRegistry,
$fieldTypeMapperRegistry,
$recordMapperRegistry,
$fieldDefinitions
);
) {
parent::__construct($apiFieldMapperRegistry, $apiFieldTypeMapperRegistry, $apiRecordMapperRegistry, $fieldDefinitions);
}
}

View file

@ -25,9 +25,22 @@
* the words "Supercharged by SuiteCRM".
*/
namespace App\Data\Service\Record\EntityRecordMappers;
namespace App\Data\Service\Record\Mappers;
use App\Data\Service\Record\Mappers\BaseFieldMapperRegistry;
use App\Data\Service\Record\Mappers\BaseFieldTypeMapperRegistry;
use App\Data\Service\Record\Mappers\BaseRecordMapperRegistry;
use App\Data\Service\Record\Mappers\RecordMapperRunner;
use App\FieldDefinitions\Service\FieldDefinitionsProviderInterface;
interface RecordMapperRunnerFactoryInterface
class EntityRecordMapperRunner extends RecordMapperRunner
{
public function __construct(
BaseFieldMapperRegistry $entityFieldMapperRegistry,
BaseFieldTypeMapperRegistry $entityFieldTypeMapperRegistry,
BaseRecordMapperRegistry $entityRecordMapperRegistry,
FieldDefinitionsProviderInterface $fieldDefinitions
) {
parent::__construct($entityFieldMapperRegistry, $entityFieldTypeMapperRegistry, $entityRecordMapperRegistry, $fieldDefinitions);
}
}