From 74b477dbcf5f5172a700c55382414e986afac0ff Mon Sep 17 00:00:00 2001 From: Clemente Raposo Date: Wed, 6 Nov 2024 09:51:10 +0000 Subject: [PATCH] Add api mappers support to RecordListStateProvider --- .../DataProvider/RecordListStateProvider.php | 26 ++++++++++++++++--- core/backend/Data/Entity/Record.php | 13 ++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/core/backend/Data/DataProvider/RecordListStateProvider.php b/core/backend/Data/DataProvider/RecordListStateProvider.php index 66db5aa0c..ad7852d91 100644 --- a/core/backend/Data/DataProvider/RecordListStateProvider.php +++ b/core/backend/Data/DataProvider/RecordListStateProvider.php @@ -29,8 +29,10 @@ namespace App\Data\DataProvider; use ApiPlatform\Metadata\Operation; 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; /** * Class RecordListStateProvider @@ -42,14 +44,19 @@ class RecordListStateProvider implements ProviderInterface * @var RecordListHandler */ protected $recordListHandler; + protected RecordMapperRunnerInterface $apiRecordMapperRunner; /** * RecordListStateProvider constructor. * @param RecordListHandler $recordListHandler + * @param RecordMapperRunnerInterface $apiRecordMapperRunner */ - public function __construct(RecordListHandler $recordListHandler) - { + public function __construct( + RecordListHandler $recordListHandler, + RecordMapperRunnerInterface $apiRecordMapperRunner + ) { $this->recordListHandler = $recordListHandler; + $this->apiRecordMapperRunner = $apiRecordMapperRunner; } /** @@ -60,6 +67,19 @@ class RecordListStateProvider implements ProviderInterface */ public function provide(Operation $operation, array $uriVariables = [], array $context = []): ?RecordList { - return $this->recordListHandler->getList($uriVariables['id'] ?? ''); + $list = $this->recordListHandler->getList($uriVariables['id'] ?? ''); + + $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; + } } diff --git a/core/backend/Data/Entity/Record.php b/core/backend/Data/Entity/Record.php index 80cd533ff..795dec983 100644 --- a/core/backend/Data/Entity/Record.php +++ b/core/backend/Data/Entity/Record.php @@ -153,6 +153,19 @@ class Record ]; } + /** + * @param array $recordData + * @return void + */ + public function fromArray(array $recordData): void + { + $this->setId($recordData['id'] ?? ''); + $this->setModule($recordData['module']?? ''); + $this->setType($recordData['type']?? ''); + $this->setAttributes($recordData['attributes'] ?? []); + $this->setAcls($recordData['acls'] ?? []); + } + /** * @return string|null */