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;
use ApiPlatform\Core\Documentation\Documentation;
use Irstea\NgModelGeneratorBundle\Exceptions\DomainException;
use Irstea\NgModelGeneratorBundle\Exceptions\Exception;
use Irstea\NgModelGeneratorBundle\Exceptions\TypeError;
use Irstea\NgModelGeneratorBundle\Iterators\IteratorBuilder;
use Irstea\NgModelGeneratorBundle\Metadata\MetadataFactoryInterface;
use Irstea\NgModelGeneratorBundle\Metadata\ResourceMetadata;
......@@ -261,24 +260,25 @@ final class ModelGenerator
{
$repositories = [];
/**
* @var ClassName
* @var ResourceMetadata $resourceMeta
*/
// Premier passage pour prégénérer des référénces aux ressources
foreach ($this->getResourceMetadata() as $class => $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) {
/* @var ClassName $class */
/* @var ResourceMetadata $resourceMeta */
try {
$repo = $this->buildRepositories($resourceMeta);
if (!$repo) {
continue;
if ($repo) {
$repositories[$repo->getName()] = $repo;
}
$repositories[$repo->getName()] = $this->typeFactory->getOrCreate(
$repo->getName(),
function () use ($repo): Type {
return $repo;
}
)->getAsType(Repository::class);
} 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
/**
* @param ResourceMetadata $resourceMeta
*
* @return Repository`null
* @return Repository|null
*/
private function buildRepositories(ResourceMetadata $resourceMeta): ?Repository
{
$operations = [];
$iri = null;
$defaultNormalization = $resourceMeta->getDefaultNormalization();
$defaultNormalizationMapper = $this->serializationMapperFactory->create($defaultNormalization, true);
/**
* @var Type
* @var Property $identifier
* @var Property[] $properties
*/
[$defaultRepr, $identifier, $properties] = $defaultNormalizationMapper->getResourceData();
if (!$properties) {
throw new TypeError(
sprintf(
'No property found for %s (groups: [%s])',
$resourceMeta->getBaseName(),
implode(', ', $defaultNormalization->getGroups())
)
printf(
"No property found for %s (groups: [%s])\n",
$resourceMeta->getBaseName(),
implode(', ', $defaultNormalization->getGroups())
);
return null;
}
if (!$identifier) {
throw new TypeError(
sprintf(
'No identifier found for %s (groups: [%s])',
printf(
"No identifier found for %s (groups: [%s])\n",
$resourceMeta->getBaseName(),
implode(', ', $defaultNormalization->getGroups())
)
);
);
return null;
}
$operations = [];
$pathParser = new PathParser($resourceMeta, $properties);
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