Loading README.md +33 −31 Changes for README.md: 33 added lines, 31 removed lines. Original line number Diff line number Diff line Loading @@ -47,38 +47,13 @@ unicaen_referentiel: max_destructive_ratio: 0.3 ``` ## Organisation du code ``` src/ ├── UnicaenReferentielBundle.php, DependencyInjection/ # câblage Symfony ├── Command/SyncReferenceDataCommand.php # la commande console ├── DataFileLoader.php # lit un fichier YAML, JSON ou PHP ├── SyncException.php # tous les messages d'erreur, en constructeurs nommés ├── Config/ # ce que le fichier déclare │ ├── ConfigParser.php # analyse l'en-tête "synchronisation:" et en refuse les formes invalides │ ├── SyncConfiguration.php │ ├── IdentifierField.php, FieldDefinition.php, FieldPolicy.php, MissingItemPolicy.php └── Sync/ # ce que le moteur en fait ├── ReferenceDataSynchronizer.php # orchestration, le déroulé se lit d'un bloc ├── MappingValidator.php # la déclaration correspond-elle au mapping Doctrine ? ├── ItemIndexer.php # les items, rangés par identifiant ├── RelationResolver.php # identifiants naturels → entités liées, préchargées ├── EntityWriter.php # création et mise à jour d'une entité ├── MissingItemsHandler.php # lignes disparues du fichier, et garde-fou destructif └── SyncResult.php ``` Une synchronisation valide d'abord tout ce qui peut l'être, précharge ensuite les entités liées, et n'écrit qu'en dernier, en un seul flush. ## Usage ```bash # Synchroniser tous les fichiers du répertoire de données bin/console unicaen:referentiel:sync # Un fichier précis, en simulation (affiche le détail sans rien écrire) # Un fichier précis, en simulation (joué puis annulé, rien n'est conservé) bin/console unicaen:referentiel:sync odf_type_evaluation --dry-run ``` Loading Loading @@ -212,8 +187,35 @@ return [ - **Validation avant écriture** : entité et champs vérifiés contre le mapping Doctrine, clés inconnues refusées, doublons d'identifiant refusés. Toute erreur interrompt la synchronisation avant la moindre écriture. - **Garde-fou destructif** : si plus de 30 % des éléments existants devaient être désactivés/supprimés (fichier tronqué par erreur), la commande refuse sans `--force`. - **`--dry-run`** : affiche le rapport détaillé (créés / mis à jour / etc.) sans écrire en base. - **Garde-fou destructif** : si la part des lignes qui seraient désactivées ou supprimées dépasse `max_destructive_ratio` (30 % par défaut), la commande refuse sans `--force`. Un fichier tronqué par erreur ne vide donc pas la table. - **Atomicité** : tous les fichiers d'une même exécution passent dans une seule transaction, l'échec de l'un annule les précédents. - **`--dry-run`** : joue la synchronisation puis annule la transaction, et affiche le détail élément par élément. Rien n'est conservé. ## Organisation du code ``` src/ ├── UnicaenReferentielBundle.php, DependencyInjection/ # câblage Symfony ├── Command/SyncReferenceDataCommand.php # la commande console ├── DataFileLoader.php # lit un fichier YAML, JSON ou PHP ├── SyncException.php # tous les messages d'erreur, en constructeurs nommés ├── Config/ # ce que le fichier déclare │ ├── ConfigParser.php # analyse l'en-tête "synchronisation:" et en refuse les formes invalides │ ├── SyncConfiguration.php │ ├── IdentifierField.php, FieldDefinition.php, FieldPolicy.php, MissingItemPolicy.php └── Sync/ # ce que le moteur en fait ├── ReferenceDataSynchronizer.php # orchestration, le déroulé se lit d'un bloc ├── MappingValidator.php # la déclaration correspond-elle au mapping Doctrine ? ├── ItemIndexer.php # les items, rangés par identifiant ├── RelationResolver.php # identifiants naturels → entités liées, préchargées ├── EntityWriter.php # création et mise à jour d'une entité ├── MissingItemsHandler.php # lignes disparues du fichier, et garde-fou destructif └── SyncResult.php ``` Une synchronisation valide d'abord tout ce qui peut l'être, précharge ensuite les entités liées, et n'écrit qu'en dernier, en un seul flush. Loading
README.md +33 −31 Changes for README.md: 33 added lines, 31 removed lines. Original line number Diff line number Diff line Loading @@ -47,38 +47,13 @@ unicaen_referentiel: max_destructive_ratio: 0.3 ``` ## Organisation du code ``` src/ ├── UnicaenReferentielBundle.php, DependencyInjection/ # câblage Symfony ├── Command/SyncReferenceDataCommand.php # la commande console ├── DataFileLoader.php # lit un fichier YAML, JSON ou PHP ├── SyncException.php # tous les messages d'erreur, en constructeurs nommés ├── Config/ # ce que le fichier déclare │ ├── ConfigParser.php # analyse l'en-tête "synchronisation:" et en refuse les formes invalides │ ├── SyncConfiguration.php │ ├── IdentifierField.php, FieldDefinition.php, FieldPolicy.php, MissingItemPolicy.php └── Sync/ # ce que le moteur en fait ├── ReferenceDataSynchronizer.php # orchestration, le déroulé se lit d'un bloc ├── MappingValidator.php # la déclaration correspond-elle au mapping Doctrine ? ├── ItemIndexer.php # les items, rangés par identifiant ├── RelationResolver.php # identifiants naturels → entités liées, préchargées ├── EntityWriter.php # création et mise à jour d'une entité ├── MissingItemsHandler.php # lignes disparues du fichier, et garde-fou destructif └── SyncResult.php ``` Une synchronisation valide d'abord tout ce qui peut l'être, précharge ensuite les entités liées, et n'écrit qu'en dernier, en un seul flush. ## Usage ```bash # Synchroniser tous les fichiers du répertoire de données bin/console unicaen:referentiel:sync # Un fichier précis, en simulation (affiche le détail sans rien écrire) # Un fichier précis, en simulation (joué puis annulé, rien n'est conservé) bin/console unicaen:referentiel:sync odf_type_evaluation --dry-run ``` Loading Loading @@ -212,8 +187,35 @@ return [ - **Validation avant écriture** : entité et champs vérifiés contre le mapping Doctrine, clés inconnues refusées, doublons d'identifiant refusés. Toute erreur interrompt la synchronisation avant la moindre écriture. - **Garde-fou destructif** : si plus de 30 % des éléments existants devaient être désactivés/supprimés (fichier tronqué par erreur), la commande refuse sans `--force`. - **`--dry-run`** : affiche le rapport détaillé (créés / mis à jour / etc.) sans écrire en base. - **Garde-fou destructif** : si la part des lignes qui seraient désactivées ou supprimées dépasse `max_destructive_ratio` (30 % par défaut), la commande refuse sans `--force`. Un fichier tronqué par erreur ne vide donc pas la table. - **Atomicité** : tous les fichiers d'une même exécution passent dans une seule transaction, l'échec de l'un annule les précédents. - **`--dry-run`** : joue la synchronisation puis annule la transaction, et affiche le détail élément par élément. Rien n'est conservé. ## Organisation du code ``` src/ ├── UnicaenReferentielBundle.php, DependencyInjection/ # câblage Symfony ├── Command/SyncReferenceDataCommand.php # la commande console ├── DataFileLoader.php # lit un fichier YAML, JSON ou PHP ├── SyncException.php # tous les messages d'erreur, en constructeurs nommés ├── Config/ # ce que le fichier déclare │ ├── ConfigParser.php # analyse l'en-tête "synchronisation:" et en refuse les formes invalides │ ├── SyncConfiguration.php │ ├── IdentifierField.php, FieldDefinition.php, FieldPolicy.php, MissingItemPolicy.php └── Sync/ # ce que le moteur en fait ├── ReferenceDataSynchronizer.php # orchestration, le déroulé se lit d'un bloc ├── MappingValidator.php # la déclaration correspond-elle au mapping Doctrine ? ├── ItemIndexer.php # les items, rangés par identifiant ├── RelationResolver.php # identifiants naturels → entités liées, préchargées ├── EntityWriter.php # création et mise à jour d'une entité ├── MissingItemsHandler.php # lignes disparues du fichier, et garde-fou destructif └── SyncResult.php ``` Une synchronisation valide d'abord tout ce qui peut l'être, précharge ensuite les entités liées, et n'écrit qu'en dernier, en un seul flush.