Commit f8a19801 authored by Guillaume Perréal's avatar Guillaume Perréal
Browse files

Prégénère les représentations de base des ressources.

Showing with 33 additions and 29 deletions
+33 -29
...@@ -22,7 +22,6 @@ namespace Irstea\NgModelGeneratorBundle; ...@@ -22,7 +22,6 @@ namespace Irstea\NgModelGeneratorBundle;
use ApiPlatform\Core\Documentation\Documentation; use ApiPlatform\Core\Documentation\Documentation;
use Irstea\NgModelGeneratorBundle\Exceptions\DomainException; use Irstea\NgModelGeneratorBundle\Exceptions\DomainException;
use Irstea\NgModelGeneratorBundle\Exceptions\Exception; use Irstea\NgModelGeneratorBundle\Exceptions\Exception;
use Irstea\NgModelGeneratorBundle\Exceptions\TypeError;
use Irstea\NgModelGeneratorBundle\Iterators\IteratorBuilder; use Irstea\NgModelGeneratorBundle\Iterators\IteratorBuilder;
use Irstea\NgModelGeneratorBundle\Metadata\MetadataFactoryInterface; use Irstea\NgModelGeneratorBundle\Metadata\MetadataFactoryInterface;
use Irstea\NgModelGeneratorBundle\Metadata\ResourceMetadata; use Irstea\NgModelGeneratorBundle\Metadata\ResourceMetadata;
...@@ -261,24 +260,25 @@ final class ModelGenerator ...@@ -261,24 +260,25 @@ final class ModelGenerator
{ {
$repositories = []; $repositories = [];
/** // Premier passage pour prégénérer des référénces aux ressources
* @var ClassName foreach ($this->getResourceMetadata() as $class => $resourceMeta) {
* @var ResourceMetadata $resourceMeta /* @var ClassName $class */
*/ /* @var ResourceMetadata $resourceMeta */
$ref = $this->typeFactory->defer($class->getFullName());
$this->typeFactory->add($resourceMeta->getBaseName(), $ref);
}
// Maintenant on génére les repositories
foreach ($this->getResourceMetadata() as $class => $resourceMeta) { foreach ($this->getResourceMetadata() as $class => $resourceMeta) {
/* @var ClassName $class */
/* @var ResourceMetadata $resourceMeta */
try { try {
$repo = $this->buildRepositories($resourceMeta); $repo = $this->buildRepositories($resourceMeta);
if (!$repo) { if ($repo) {
continue; $repositories[$repo->getName()] = $repo;
} }
$repositories[$repo->getName()] = $this->typeFactory->getOrCreate(
$repo->getName(),
function () use ($repo): Type {
return $repo;
}
)->getAsType(Repository::class);
} catch (Exception $ex) { } catch (Exception $ex) {
printf("/* Erreur pendant le mapping de %s:\n * %s */\n", $class, $ex->getMessage()); printf("Erreur pendant le mapping de %s: %s\n", $class, $ex->getMessage());
} }
} }
...@@ -290,38 +290,42 @@ final class ModelGenerator ...@@ -290,38 +290,42 @@ final class ModelGenerator
/** /**
* @param ResourceMetadata $resourceMeta * @param ResourceMetadata $resourceMeta
* *
* @return Repository`null * @return Repository|null
*/ */
private function buildRepositories(ResourceMetadata $resourceMeta): ?Repository private function buildRepositories(ResourceMetadata $resourceMeta): ?Repository
{ {
$operations = [];
$iri = null;
$defaultNormalization = $resourceMeta->getDefaultNormalization(); $defaultNormalization = $resourceMeta->getDefaultNormalization();
$defaultNormalizationMapper = $this->serializationMapperFactory->create($defaultNormalization, true); $defaultNormalizationMapper = $this->serializationMapperFactory->create($defaultNormalization, true);
/**
* @var Type
* @var Property $identifier
* @var Property[] $properties
*/
[$defaultRepr, $identifier, $properties] = $defaultNormalizationMapper->getResourceData(); [$defaultRepr, $identifier, $properties] = $defaultNormalizationMapper->getResourceData();
if (!$properties) { if (!$properties) {
throw new TypeError( printf(
sprintf( "No property found for %s (groups: [%s])\n",
'No property found for %s (groups: [%s])', $resourceMeta->getBaseName(),
$resourceMeta->getBaseName(), implode(', ', $defaultNormalization->getGroups())
implode(', ', $defaultNormalization->getGroups())
)
); );
return null;
} }
if (!$identifier) { if (!$identifier) {
throw new TypeError( printf(
sprintf( "No identifier found for %s (groups: [%s])\n",
'No identifier found for %s (groups: [%s])',
$resourceMeta->getBaseName(), $resourceMeta->getBaseName(),
implode(', ', $defaultNormalization->getGroups()) implode(', ', $defaultNormalization->getGroups())
) );
);
return null;
} }
$operations = [];
$pathParser = new PathParser($resourceMeta, $properties); $pathParser = new PathParser($resourceMeta, $properties);
foreach ($resourceMeta->getOperations() as $operation) { foreach ($resourceMeta->getOperations() as $operation) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment