Commit 194ea350 authored by Anthony Gautreau's avatar Anthony Gautreau
Browse files

Initial

parents
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+11 −0
Changes for .gitignore: 11 added lines, 0 removed lines.
Original line number Diff line number Diff line
.idea
.vscode
.env
vendor
api/vendor
###> friendsofphp/php-cs-fixer ###
/.php-cs-fixer.php
/.php-cs-fixer.cache
api/.php-cs-fixer.php
api/.php-cs-fixer.cache
###< friendsofphp/php-cs-fixer ###

.gitlab-ci.yml

0 → 100644
+15 −0
Changes for .gitlab-ci.yml: 15 added lines, 0 removed lines.
Original line number Diff line number Diff line
# Le dépôt est un monorepo dont seul api/ est publié. release-api.sh en fait un
# subtree split poussé sur la branche split-api, et y pose le tag de version.
# C'est ce tag qui déclenche la publication ci-dessous.

stages:
  - publish

# Publier sur le packagist Unicaen
publish_php:
  stage: publish
  image: alpine/curl
  rules:
    - if: '$CI_COMMIT_TAG'
  script:
    - curl 'https://packagist.unicaen.fr/build?name=unicaen/referentiel-bundle'

CHANGELOG.md

0 → 100644
+18 −0
Changes for CHANGELOG.md: 18 added lines, 0 removed lines.
Original line number Diff line number Diff line
## 1.0.0

- Exemple de configuration livré avec le paquet, `config/unicaen_referentiel.yaml.dist`, à copier dans `config/packages/` de l'application

- Seuil du garde-fou destructif configurable par `unicaen_referentiel.max_destructive_ratio`, il n'est plus codé en dur à 30 %

- Sortie console resserrée : un fichier sans changement ne s'affiche plus, une ligne de récapitulatif remplace les compteurs à zéro

- Exécution atomique : tous les fichiers d'une même commande passent dans une seule transaction, l'échec de l'un annule les précédents
- `--dry-run` joue le même chemin qu'une exécution réelle puis annule, ce qui lui permet de résoudre les relations vers les lignes qu'un fichier précédent aurait créées, cas où il échouait à tort
- Code réparti en `Config/` (ce que le fichier déclare) et `Sync/` (ce que le moteur en fait), chaque classe tenant une seule responsabilité
- Messages d'erreur rassemblés dans `SyncException` sous forme de constructeurs nommés, les points de levée disent l'intention et non la phrase
- Extraction du moteur `dataSync/` de smile-plus-api en bundle autonome `unicaen/referentiel-bundle`, namespace `Unicaen\Referentiel\`
- Commande `unicaen:referentiel:sync` (alias historique `app:sync:reference-data`) : synchronisation idempotente depuis le répertoire de données, `--dry-run` et `--force`
- Identifiants simples ou composites, y compris portés par une association (`{ field, relation }`)
- Associations simples (ManyToOne/OneToOne) et multiples (ManyToMany/OneToMany), comparaison insensible à l'ordre
- Politiques de champ `update_always` et `create_only`, politiques de disparition `keep`, `disable` et `delete`, avec garde-fou destructif au-delà de 30 % des lignes
- Répertoire de données configurable via `unicaen_referentiel.data_dir`

README.md

0 → 100644
+41 −0
Changes for README.md: 41 added lines, 0 removed lines.
Original line number Diff line number Diff line
# Unicaen Referentiel

Synchronisation idempotente des données de référence d'une application Doctrine
depuis des fichiers versionnés (YAML, JSON ou PHP).

Contrairement à des fixtures, le mécanisme est rejouable à chaque déploiement :
il crée ce qui manque, met à jour ce qui doit l'être et traite les lignes
disparues du fichier selon une politique déclarée. Toute incohérence échoue
avant la moindre écriture.

## Structure du dépôt

```
/api       # Code source du bundle Symfony (paquet unicaen/referentiel-bundle)
```

Pas de partie front : le bundle n'expose qu'une commande console.

## Publication

Seul `api/` constitue le paquet Composer. `release-api.sh` s'en charge :

```bash
./release-api.sh 1.0.0     # version explicite, pour la première release
./release-api.sh patch     # 1.0.0 -> 1.0.1
./release-api.sh minor     # 1.0.1 -> 1.1.0
./release-api.sh major     # 1.1.0 -> 2.0.0
```

Le script écrit la version dans `api/.version`, la commite, puis produit un
`git subtree split --prefix=api` poussé sur la branche `split-api` et y pose le tag
de version. La branche courante reçoit en plus un tag `m-<version>`, pour retrouver
le commit d'origine. La CI publie sur le packagist Unicaen au tag.

Prérequis : un working tree propre, un `origin` configuré, et au moins un commit
(`git subtree split` a besoin d'un historique).

## Documentation

Installation, configuration et format des fichiers de données :
[api/README.md](api/README.md).
+13 −0
Changes for api/.php-cs-fixer.dist.php: 13 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

$finder = (new PhpCsFixer\Finder())
    ->in(__DIR__.'/src')
    ->exclude('vendor')
;

return (new PhpCsFixer\Config())
    ->setRules([
        '@Symfony' => true,
    ])
    ->setFinder($finder)
;
Loading