Commit 448f1d6f authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

WIP API : extractors pour extraires individu et doctorant des insc admin

parent 5c450909
Loading
Loading
Loading
Loading
Loading
+18 −18
Original line number Diff line number Diff line
@@ -5,16 +5,16 @@ return [
        'factories' => [
            \SygalApi\V1\Rest\Ping\PingResource::class => \SygalApi\V1\Rest\Ping\PingResourceFactory::class,
            \SygalApi\V1\Rest\Diplomation\DiplomationResource::class => \SygalApi\V1\Rest\Diplomation\DiplomationResourceFactory::class,
            \SygalApi\V1\Rest\Inscription\InscriptionResource::class => \SygalApi\V1\Rest\Inscription\InscriptionResourceFactory::class,
            \SygalApi\V1\Rest\InscriptionAdministrative\InscriptionAdministrativeResource::class => \SygalApi\V1\Rest\InscriptionAdministrative\InscriptionAdministrativeResourceFactory::class,
        ],
    ],
    'openapi_content_validation' => [
        // 'controller' => 'validator'
        'SygalApi\V1\Rest\Inscription\Controller' => 'SygalApi\V1\Rest\Inscription\OpenApiValidator',
        'SygalApi\V1\Rest\InscriptionAdministrative\Controller' => 'SygalApi\V1\Rest\InscriptionAdministrative\OpenApiValidator',
    ],
    'openapi_validator_specs' => [
        // 'validator' => [config]
        'SygalApi\V1\Rest\Inscription\OpenApiValidator' => [
        'SygalApi\V1\Rest\InscriptionAdministrative\OpenApiValidator' => [
            'oas_file_format' => 'yaml',
            'oas_file_path' => __DIR__ . '/schema/inscription/doctorant-api-v1.yaml',
        ],
@@ -44,7 +44,7 @@ return [
                'options' => [
                    'route' => '/inscription-administrative[/:inscription_id]',
                    'defaults' => [
                        'controller' => 'SygalApi\\V1\\Rest\\Inscription\\Controller',
                        'controller' => 'SygalApi\\V1\\Rest\\InscriptionAdministrative\\Controller',
                    ],
                ],
            ],
@@ -95,8 +95,8 @@ return [
            'collection_class' => \SygalApi\V1\Rest\Diplomation\DiplomationCollection::class,
            'service_name' => 'Diplomation',
        ],
        'SygalApi\\V1\\Rest\\Inscription\\Controller' => [
            'listener' => \SygalApi\V1\Rest\Inscription\InscriptionResource::class,
        'SygalApi\\V1\\Rest\\InscriptionAdministrative\\Controller' => [
            'listener' => \SygalApi\V1\Rest\InscriptionAdministrative\InscriptionAdministrativeResource::class,
            'route_name' => 'api.rest.inscription',
            'route_identifier_name' => 'inscription_id',
            'collection_name' => 'inscription',
@@ -113,15 +113,15 @@ return [
            'collection_query_whitelist' => [],
            'page_size' => 25,
            'page_size_param' => null,
            'entity_class' => \SygalApi\V1\Rest\Inscription\InscriptionEntity::class,
            'collection_class' => \SygalApi\V1\Rest\Inscription\InscriptionCollection::class,
            'service_name' => 'Inscription',
            'entity_class' => \SygalApi\V1\Rest\InscriptionAdministrative\InscriptionAdministrativeEntity::class,
            'collection_class' => \SygalApi\V1\Rest\InscriptionAdministrative\InscriptionAdministrativeCollection::class,
            'service_name' => 'InscriptionAdministrative',
        ],
    ],
    'api-tools-content-negotiation' => [
        'controllers' => [
            'SygalApi\\V1\\Rest\\Ping\\Controller' => 'Json',
            'SygalApi\\V1\\Rest\\Inscription\\Controller' => 'Json',
            'SygalApi\\V1\\Rest\\InscriptionAdministrative\\Controller' => 'Json',
            'SygalApi\\V1\\Rest\\Diplomation\\Controller' => 'Json',
        ],
        'accept_whitelist' => [
@@ -130,7 +130,7 @@ return [
                //1 => 'application/hal+json',
                2 => 'application/json',
            ],
            'SygalApi\\V1\\Rest\\Inscription\\Controller' => [
            'SygalApi\\V1\\Rest\\InscriptionAdministrative\\Controller' => [
                0 => 'application/vnd.api.v1+json',
                //1 => 'application/hal+json',
                2 => 'application/json',
@@ -150,7 +150,7 @@ return [
                0 => 'application/vnd.api.v1+json',
                1 => 'application/json',
            ],
            'SygalApi\\V1\\Rest\\Inscription\\Controller' => [
            'SygalApi\\V1\\Rest\\InscriptionAdministrative\\Controller' => [
                0 => 'application/vnd.api.v1+json',
                1 => 'application/json',
            ],
@@ -182,13 +182,13 @@ return [
                'route_identifier_name' => 'diplomation_id',
                'is_collection' => true,
            ],
            \SygalApi\V1\Rest\Inscription\InscriptionEntity::class => [
            \SygalApi\V1\Rest\InscriptionAdministrative\InscriptionAdministrativeEntity::class => [
                'entity_identifier_name' => 'id',
                'route_name' => 'api.rest.inscription',
                'route_identifier_name' => 'inscription_id',
                'hydrator' => \Laminas\Hydrator\ArraySerializableHydrator::class,
            ],
            \SygalApi\V1\Rest\Inscription\InscriptionCollection::class => [
            \SygalApi\V1\Rest\InscriptionAdministrative\InscriptionAdministrativeCollection::class => [
                'entity_identifier_name' => 'id',
                'route_name' => 'api.rest.inscription',
                'route_identifier_name' => 'inscription_id',
@@ -200,13 +200,13 @@ return [
        'SygalApi\\V1\\Rest\\Diplomation\\Controller' => [
            'input_filter' => 'SygalApi\\V1\\Rest\\Diplomation\\Validator',
        ],
        'SygalApi\\V1\\Rest\\Inscription\\Controller' => [
            'input_filter' => 'SygalApi\\V1\\Rest\\Inscription\\Validator',
        'SygalApi\\V1\\Rest\\InscriptionAdministrative\\Controller' => [
            'input_filter' => 'SygalApi\\V1\\Rest\\InscriptionAdministrative\\Validator',
        ],
    ],
    'input_filter_specs' => [
        'SygalApi\\V1\\Rest\\Diplomation\\Validator' => [],
        'SygalApi\\V1\\Rest\\Inscription\\Validator' => [],
        'SygalApi\\V1\\Rest\\InscriptionAdministrative\\Validator' => [],
    ],
    'api-tools-mvc-auth' => [
        'authorization' => [
@@ -242,7 +242,7 @@ return [
                    'DELETE' => true,
                ],
            ],
            'SygalApi\\V1\\Rest\\Inscription\\Controller' => [
            'SygalApi\\V1\\Rest\\InscriptionAdministrative\\Controller' => [
                'collection' => [
                    'GET' => true,
                    'POST' => true,
+0 −8
Original line number Diff line number Diff line
<?php
namespace SygalApi\V1\Rest\Inscription;

use Laminas\Paginator\Paginator;

class InscriptionCollection extends Paginator
{
}
+0 −6
Original line number Diff line number Diff line
<?php
namespace SygalApi\V1\Rest\Inscription;

class InscriptionEntity
{
}
+34 −0
Original line number Diff line number Diff line
<?php

namespace SygalApi\V1\Rest\InscriptionAdministrative\Extractor;

use Laminas\Hydrator\ExtractionInterface;
use stdClass;
use Webmozart\Assert\Assert;

abstract class AbstractExtractor implements ExtractionInterface
{
    public function extract(object $object): array
    {
        Assert::isInstanceOf($object, stdClass::class);

        return [
            'source_id' => $this->extractSourceId($object),
            'source_code' => $this->extractSourceCode($object),
        ];
    }

    protected function val(array $data, string $key)
    {
        $value = $data[$key] ?? null;

        return $value ?: null;
    }

    protected function extractSourceId(stdClass $object)
    {
        return $object->instancePegase;
    }

    abstract protected function extractSourceCode(stdClass $object);
}
 No newline at end of file
+39 −0
Original line number Diff line number Diff line
<?php

namespace SygalApi\V1\Rest\InscriptionAdministrative\Extractor;

use stdClass;
use Webmozart\Assert\Assert;

class DoctorantExtractor extends AbstractExtractor
{
    public function extract(object $object): array
    {
        $data = parent::extract($object);

        /** @var array $apprenant */
        $apprenant = $object->apprenant;

        $individuSourceCode = $this->val($apprenant, 'INE');

        return array_merge($data, [
            'individu_id' => $individuSourceCode,
            'code_apprenant_in_source' => $this->val($apprenant, 'code'), // id métier de l'apprenant dans la source d'import = code apprenant pegase
            //
            'ine' => $this->val($apprenant, 'INE'),
            'source_insert_date' => null,
        ]);
    }

    protected function extractSourceCode(stdClass $object)
    {
        /** @var array $apprenant */
        $apprenant = $object->apprenant;
        Assert::keyExists($apprenant, 'INE', "Clé %s introuvable dans les données apprenant");

        $ine = $this->val($apprenant, 'INE');
        Assert::notEmpty($ine, "L'INE dans les données apprenant ne doit pas être vide");

        return $ine;
    }
}
 No newline at end of file
Loading