Commit b192519c authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

WIP ajout dans un fichier de config des imports utilisés pour enregistrer le IA

parent 932785db
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
<mxfile host="drawio-plugin" modified="2026-04-29T11:15:39.725Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" etag="suedyYi_GQGIcd4pamX2" version="22.1.22" type="embed" pages="3">
<mxfile host="drawio-plugin" modified="2026-07-24T12:49:52.446Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36" etag="ScFue32-SoEMwPEcoSob" version="22.1.22" type="embed" pages="3">
  <diagram name="Traitement d&#39;une IA" id="740ae2pG9eW3bvFF0xZ8">
    <mxGraphModel dx="2452" dy="498" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
    <mxGraphModel dx="2309" dy="894" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
      <root>
        <mxCell id="5wBHxUDtx09EKERVRldi-0" />
        <mxCell id="5wBHxUDtx09EKERVRldi-1" parent="5wBHxUDtx09EKERVRldi-0" />
@@ -85,7 +85,7 @@
    </mxGraphModel>
  </diagram>
  <diagram name="IA validée" id="nXsnPskhR9ZO_uN3WuR3">
    <mxGraphModel dx="2452" dy="498" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
    <mxGraphModel dx="2309" dy="894" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
      <root>
        <mxCell id="ox5DwH-k-fmpPEYAlyjY-0" />
        <mxCell id="ox5DwH-k-fmpPEYAlyjY-1" parent="ox5DwH-k-fmpPEYAlyjY-0" />
@@ -184,7 +184,7 @@
        <mxCell id="ox5DwH-k-fmpPEYAlyjY-24" value="&lt;span style=&quot;font-size: 12px;&quot;&gt;Thèse existante pour ce doctorant ?&lt;/span&gt;" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.decision;whiteSpace=wrap;strokeColor=#000000;fontFamily=Helvetica;fontSize=12;fontColor=default;shadow=0;swimlaneLine=1;" parent="ox5DwH-k-fmpPEYAlyjY-1" vertex="1">
          <mxGeometry x="-620" y="325" width="130" height="60" as="geometry" />
        </mxCell>
        <mxCell id="ox5DwH-k-fmpPEYAlyjY-25" style="edgeStyle=orthogonalEdgeStyle;shape=connector;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.75;entryY=0;entryDx=0;entryDy=0;shadow=0;labelBackgroundColor=none;strokeColor=default;strokeWidth=1;align=center;verticalAlign=middle;fontFamily=Helvetica;fontSize=11;fontColor=default;endArrow=block;endFill=0;endSize=8;" parent="ox5DwH-k-fmpPEYAlyjY-1" source="ox5DwH-k-fmpPEYAlyjY-26" edge="1" target="ox5DwH-k-fmpPEYAlyjY-59">
        <mxCell id="ox5DwH-k-fmpPEYAlyjY-25" style="edgeStyle=orthogonalEdgeStyle;shape=connector;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.75;entryY=0;entryDx=0;entryDy=0;shadow=0;labelBackgroundColor=none;strokeColor=default;strokeWidth=1;align=center;verticalAlign=middle;fontFamily=Helvetica;fontSize=11;fontColor=default;endArrow=block;endFill=0;endSize=8;" parent="ox5DwH-k-fmpPEYAlyjY-1" source="ox5DwH-k-fmpPEYAlyjY-26" target="ox5DwH-k-fmpPEYAlyjY-59" edge="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="-592" y="650" as="targetPoint" />
            <Array as="points">
@@ -326,7 +326,7 @@
    </mxGraphModel>
  </diagram>
  <diagram name="IA annulée" id="XHHgBK6fiUAuxeolIRxC">
    <mxGraphModel dx="2452" dy="498" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
    <mxGraphModel dx="2309" dy="894" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
      <root>
        <mxCell id="qnbvA5L7NKndZ21RBNdq-0" />
        <mxCell id="qnbvA5L7NKndZ21RBNdq-1" parent="qnbvA5L7NKndZ21RBNdq-0" />
+2 −2
Original line number Diff line number Diff line
@@ -3,8 +3,8 @@ curl \
--insecure \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Basic cGVnYXNlOmF6ZXJ0eQ==" \
-H "Authorization: Basic cGVnYXNlOldhaDl4YWl2YWl5b2gzam9waG9vNGVlbjllaVQ0ZWk=" \
-X POST \
-b XDEBUG_SESSION=PHPSTORM \
--data-binary "@resources/admission_inexistante/inscr-admin-PEGASE_UCN-286615046.json" \
--data-binary "@inscr-admin-PEGASE_UCN-286615046.json" \
https://localhost:8003/api/v1/inscription-administrative
+73 −0
Original line number Diff line number Diff line
<?php

use UnicaenDbImport\Connection\NoConnection;
use UnicaenDbImport\Filter\ColumnValue\ConcatColumnValueFilter;

return [
    'import' => [
        /**
         * Imports configurés à moitié, utilisé pour enregistré les inscription admin reçues via l'API de SyGAL.
         * Ils sont complétés dynamiquement, cf. {@see \SygalApiImpl\V1\Process\InscriptionAdministrativeImportProcess}.
         */
        'imports' => [
            [
                'name' => 'api_import_inscription_administrative',
                'source' => [
                    'name' => 'api',
                    'code' => 'api',
                    'connection' => new NoConnection([]),
                    'select' => 'xxxxx',
                    'source_code_column' => 'source_code',
                    'column_value_filter' => [
                        'source_code' => new ConcatColumnValueFilter([
                            'column' => 'source_code', // colonne à transformer
                            'columns' => ['source_id', 'source_code'], // colonnes dont les valeurs seront concaténées
                            //'separator' => $this->sourceCodeStringHelper->getSeparator(),
                        ]),
                        //'prefix_filter' => null,
                    ],
                ],
                'destination' => [
                    'name' => 'Application',
                    'table' => 'tmp_inscription_administrative',
                    //'connection' => $this->destinationConnection,
                    'connection' => 'default',
                    'source_code_column' => 'source_code',
                    'id_strategy' => null,
                    'id_sequence' => null,
                ],
            ],
            [
                'name' => 'api_import_inscription_administrative_apprenant',
                'source' => [
                    'name' => 'api',
                    'code' => 'api',
                    'connection' => new NoConnection([]),
                    'select' => 'xxxxx',
                    'source_code_column' => 'source_code',
                    'column_value_filter' => [
                        'source_code' => new ConcatColumnValueFilter([
                            'column' => 'source_code', // colonne à transformer
                            'columns' => ['source_id', 'source_code'], // colonnes dont les valeurs seront concaténées
                            //'separator' => $this->sourceCodeStringHelper->getSeparator(),
                        ]),
                        'inscription_administrative_id' => new ConcatColumnValueFilter([
                            'column' => 'inscription_administrative_id', // colonne à transformer
                            'columns' => ['source_id', 'inscription_administrative_id'], // colonnes dont les valeurs seront concaténées
                            //'separator' => $this->sourceCodeStringHelper->getSeparator(),
                        ]),
                    ],
                ],
                'destination' => [
                    'name' => 'Application',
                    'table' => 'tmp_inscription_administrative_apprenant',
                    //'connection' => $this->destinationConnection,
                    'connection' => 'default',
                    'source_code_column' => 'source_code',
                    'id_strategy' => null,
                    'id_sequence' => null,
                ],
            ],
        ],
    ],
];
 No newline at end of file
+6 −4
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
namespace SygalApiImpl;

use Laminas\ApiTools\Provider\ApiToolsProviderInterface;
use Laminas\Config\Factory as ConfigFactory;
use Laminas\Stdlib\ArrayUtils;

class Module implements ApiToolsProviderInterface
@@ -10,10 +11,11 @@ class Module implements ApiToolsProviderInterface
    {
        $configDir = __DIR__ . '/../config';

        return ArrayUtils::merge(
            include $configDir . '/module.config.php',
            include $configDir . '/versions/v1.config.php',
        );
        return ConfigFactory::fromFiles([
            $configDir . '/module.config.php',
            $configDir . '/import.config.php',
            $configDir . '/versions/v1.config.php',
        ]);
    }

    public function getAutoloaderConfig(): array
+113 −70
Original line number Diff line number Diff line
@@ -209,79 +209,122 @@ class InscriptionAdministrativeImportProcess extends AbstractProcess implements
            PrefixEtabColumnValueFilter::PARAM_CODE_ETABLISSEMENT => $codeEtablissement,
        ]);

        try {
            $source = Source::fromConfig([
                'name' => 'api',
                'code' => 'api',
                'connection' => new NoConnection([$data]),
                'select' => 'xxxxx',
                'source_code_column' => 'source_code',
                'column_value_filter' => [
                    new ConcatColumnValueFilter([
                        'column' => 'source_code', // colonne à transformer
                        'columns' => ['source_id', 'source_code'], // colonnes dont les valeurs seront concaténées
                        'separator' => $this->sourceCodeStringHelper->getSeparator(),
                    ]),
                    $this->prefixEtabColumnValueFilter,
                ],
            ]);
            $destination = Destination::fromConfig([
                'name' => 'Application',
                'table' => 'tmp_inscription_administrative',
                'connection' => $this->destinationConnection,
                'source_code_column' => 'source_code',
                'id_strategy' => null,
                'id_sequence' => null,
            ]);

            return Import::fromConfig([
                'name' => 'api_import_inscription_administrative',
                'source' => $source,
                'destination' => $destination,
            ]);
        } catch (ConfigException $e) {
            throw new InvalidArgumentException("Mauvaise config dans " . __METHOD__ . " : " . $e->getMessage(), 0, $e);
        }
//        try {
//            $source = Source::fromConfig([
//                'name' => 'api',
//                'code' => 'api',
//                'connection' => new NoConnection([$data]),
//                'select' => 'xxxxx',
//                'source_code_column' => 'source_code',
//                'column_value_filter' => [
//                    new ConcatColumnValueFilter([
//                        'column' => 'source_code', // colonne à transformer
//                        'columns' => ['source_id', 'source_code'], // colonnes dont les valeurs seront concaténées
//                        'separator' => $this->sourceCodeStringHelper->getSeparator(),
//                    ]),
//                    $this->prefixEtabColumnValueFilter,
//                ],
//            ]);
//            $destination = Destination::fromConfig([
//                'name' => 'Application',
//                'table' => 'tmp_inscription_administrative',
//                'connection' => $this->destinationConnection,
//                'source_code_column' => 'source_code',
//                'id_strategy' => null,
//                'id_sequence' => null,
//            ]);
//
//            return Import::fromConfig([
//                'name' => 'api_import_inscription_administrative',
//                'source' => $source,
//                'destination' => $destination,
//            ]);
//        } catch (ConfigException $e) {
//            throw new InvalidArgumentException("Mauvaise config dans " . __METHOD__ . " : " . $e->getMessage(), 0, $e);
//        }

        /** @var Import $import */
        $name = 'api_import_inscription_administrative';
        $import = $this->importService->getImportByName($name);

        // source
        $importSource = $import->getSource();
        $importSource->setConnection(new NoConnection([$data]));
        // injection de paramètres dans les value filters
        $columnValueFilters = $importSource->getColumnValueFilter();
        /** @var \UnicaenDbImport\Filter\ColumnValue\ConcatColumnValueFilter $concatFilter */
        $concatFilter = $columnValueFilters['source_code'];
        $concatFilter->setSeparator($this->sourceCodeStringHelper->getSeparator());
        $columnValueFilters['prefix_filter'] = $this->prefixEtabColumnValueFilter;
        $importSource->setColumnValueFilter($columnValueFilters);

        // destination
        $importDestination = $import->getDestination();
        $importDestination->setConnection($this->destinationConnection);

        return $import;
    }

    private function createImportInscriptionAdministrativeApprenant(array $data): Import
    {
        try {
            $source = Source::fromConfig([
                'name' => 'api',
                'code' => 'api',
                'connection' => new NoConnection([$data]),
                'select' => 'xxxxx',
                'source_code_column' => 'source_code',
                'column_value_filter' => [
                    new ConcatColumnValueFilter([
                        'column' => 'source_code', // colonne à transformer
                        'columns' => ['source_id', 'source_code'], // colonnes dont les valeurs seront concaténées
                        'separator' => $this->sourceCodeStringHelper->getSeparator(),
                    ]),
                    new ConcatColumnValueFilter([
                        'column' => 'inscription_administrative_id', // colonne à transformer
                        'columns' => ['source_id', 'inscription_administrative_id'], // colonnes dont les valeurs seront concaténées
                        'separator' => $this->sourceCodeStringHelper->getSeparator(),
                    ]),
                ],
            ]);
            $destination = Destination::fromConfig([
                'name' => 'Application',
                'table' => 'tmp_inscription_administrative_apprenant',
                'connection' => $this->destinationConnection,
                'source_code_column' => 'source_code',
                'id_strategy' => null,
                'id_sequence' => null,
            ]);

            return Import::fromConfig([
                'name' => 'api_import_inscription_administrative_apprenant',
                'source' => $source,
                'destination' => $destination,
            ]);
        } catch (ConfigException $e) {
            throw new InvalidArgumentException("Mauvaise config dans " . __METHOD__ . " : " . $e->getMessage(), 0, $e);
        }
//        try {
//            $source = Source::fromConfig([
//                'name' => 'api',
//                'code' => 'api',
//                'connection' => new NoConnection([$data]),
//                'select' => 'xxxxx',
//                'source_code_column' => 'source_code',
//                'column_value_filter' => [
//                    new ConcatColumnValueFilter([
//                        'column' => 'source_code', // colonne à transformer
//                        'columns' => ['source_id', 'source_code'], // colonnes dont les valeurs seront concaténées
//                        'separator' => $this->sourceCodeStringHelper->getSeparator(),
//                    ]),
//                    new ConcatColumnValueFilter([
//                        'column' => 'inscription_administrative_id', // colonne à transformer
//                        'columns' => ['source_id', 'inscription_administrative_id'], // colonnes dont les valeurs seront concaténées
//                        'separator' => $this->sourceCodeStringHelper->getSeparator(),
//                    ]),
//                ],
//            ]);
//            $destination = Destination::fromConfig([
//                'name' => 'Application',
//                'table' => 'tmp_inscription_administrative_apprenant',
//                'connection' => $this->destinationConnection,
//                'source_code_column' => 'source_code',
//                'id_strategy' => null,
//                'id_sequence' => null,
//            ]);
//
//            return Import::fromConfig([
//                'name' => 'api_import_inscription_administrative_apprenant',
//                'source' => $source,
//                'destination' => $destination,
//            ]);
//        } catch (ConfigException $e) {
//            throw new InvalidArgumentException("Mauvaise config dans " . __METHOD__ . " : " . $e->getMessage(), 0, $e);
//        }

        /** @var Import $import */
        $name = 'api_import_inscription_administrative_apprenant';
        $import = $this->importService->getImportByName($name);

        // source
        $importSource = $import->getSource();
        $importSource->setConnection(new NoConnection([$data]));
        // injection de paramètres dans les value filters
        $columnValueFilters = $importSource->getColumnValueFilter();
        /** @var \UnicaenDbImport\Filter\ColumnValue\ConcatColumnValueFilter $concatFilter1 */
        $concatFilter1 = $columnValueFilters['source_code'];
        $concatFilter1->setSeparator($this->sourceCodeStringHelper->getSeparator());
        /** @var \UnicaenDbImport\Filter\ColumnValue\ConcatColumnValueFilter $concatFilter2 */
        $concatFilter2 = $columnValueFilters['inscription_administrative_id'];
        $concatFilter2->setSeparator($this->sourceCodeStringHelper->getSeparator());

        // destination
        $importDestination = $import->getDestination();
        $importDestination->setConnection($this->destinationConnection);

        return $import;
    }
}
 No newline at end of file