|
| 1 | +# Seeds |
| 2 | + |
| 3 | +## Vue d'ensemble |
| 4 | + |
| 5 | +Les seeds peuplent la base de données avec des données de développement réalistes. |
| 6 | +Ces seeds sont de bons exemples pour s'approprier les modèles de données et implémenter son propre référentiel. |
| 7 | +Ils sont pilotés par `api/db/seeds/seed.js` et utilisent la même factory `DatabaseBuilder` que la suite de tests. |
| 8 | + |
| 9 | +## Hiérarchie du contenu pédagogique |
| 10 | + |
| 11 | +Les données sont construites de haut en bas dans une structure arborescente, chaque niveau étant rattaché à son parent : |
| 12 | + |
| 13 | +``` |
| 14 | +Référentiel → Domaine → Compétence → Thématique → Sujet → Acquis → Épreuve |
| 15 | +``` |
| 16 | + |
| 17 | +Chaque constructeur reçoit l'arbre `learningContentData` en cours de construction afin de lier les éléments à leurs parents. Les identifiants sont déterministes (ex. `areaF0A1`, `skillF0A1C0T0S2Act`, `challengeF0A1C0T0S2Ch0`). |
| 18 | + |
| 19 | +## Génération des acquis |
| 20 | + |
| 21 | +Les acquis sont générés par paires pour chaque niveau dans un sujet : |
| 22 | + |
| 23 | +| Parité de l'index | Acquis 1 | Acquis 2 | |
| 24 | +|---|---|---| |
| 25 | +| Pair | `actif` v1 | `en construction` v2 | |
| 26 | +| Impair | `périmé` v1 | `archivé` v2 | |
| 27 | + |
| 28 | +Les sujets dont le nom contient `workbench` reçoivent un unique acquis workbench (`en construction`) à la place. |
| 29 | + |
| 30 | +## Génération des épreuves |
| 31 | + |
| 32 | +Le nombre et les statuts des épreuves générées par acquis dépendent du statut de l'acquis : |
| 33 | + |
| 34 | +| Statut de l'acquis | Épreuves créées | |
| 35 | +|---|---| |
| 36 | +| `en construction` | 1 proto `proposée` + 1 décli `proposée` + 1 décli `périmée` | |
| 37 | +| `actif` | 1 proto `validée` + 1 décli `validée` + 1 décli `périmée` + 1 décli `archivée` | |
| 38 | +| `archivé` | 1 proto `archivée` + 1 décli `archivée` + 1 décli `périmée` | |
| 39 | +| `périmé` | 2 `périmées` | |
| 40 | + |
| 41 | +Les attributs des épreuves (type, format, accessibilité, etc.) sont cyclés sur l'ensemble des valeurs d'énumération à l'aide du générateur `cycle()` de `data/utils.js`, garantissant une couverture large sans spécification manuelle. |
| 42 | + |
| 43 | +Des traductions sont créées pour chaque langue de `SEEDS_LOCALES` pour chaque épreuve. |
| 44 | + |
| 45 | +## Autres constructeurs |
| 46 | + |
| 47 | +| Fichier | Description | |
| 48 | +|---|---| |
| 49 | +| `data/tags.js` | Liste fixe de tags | |
| 50 | +| `data/tutorials.js` | Liste fixe de tutoriels, répartis sur les acquis | |
| 51 | +| `data/pix-1d.js` | Référentiel Pix 1D, construit indépendamment de `seedsConfig` | |
| 52 | +| `data/modules.js` | Lit les fichiers JSON de `data/modules/*.json` et les insère tels quels | |
| 53 | +| `data/static-courses.js` | Ensemble fixe de parcours statiques | |
| 54 | +| `data/whitelisted-urls.js` | Ensemble fixe d'URLs autorisées | |
| 55 | + |
| 56 | +## Utilisateurs seeds |
| 57 | + |
| 58 | +Quatre utilisateurs sont toujours créés : |
| 59 | + |
| 60 | +| Trigramme | Rôle | Source de la clé API | |
| 61 | +|---|---|---| |
| 62 | +| `DEV` | admin | `REVIEW_APP_ADMIN_USER_API_KEY` ou valeur par défaut codée en dur | |
| 63 | +| `EDI` | editor | `REVIEW_APP_EDITOR_USER_API_KEY` ou valeur par défaut codée en dur | |
| 64 | +| `RPO` | readpixonly | `REVIEW_APP_READ_PIX_ONLY_USER_API_KEY` ou valeur par défaut codée en dur | |
| 65 | +| `LOL` | readonly | `REVIEW_APP_READ_ONLY_USER_API_KEY` ou valeur par défaut codée en dur | |
| 66 | + |
| 67 | +Les clés API codées en dur ne sont actives que lorsque la variable `REVIEW_APP` n'est pas définie. |
| 68 | + |
| 69 | +## Configuration |
| 70 | + |
| 71 | +Le nombre d'enregistrements est contrôlé par des variables d'environnement (définies dans `lib/config.js` via `seedsConfig`) : |
| 72 | + |
| 73 | +| Variable d'environnement | Défaut | Signification | |
| 74 | +|---|---|---| |
| 75 | +| `SEEDS_CNT_FRAMEWORKS` | 2 | Nombre de référentiels | |
| 76 | +| `SEEDS_CNT_AREAS` | 2 | Domaines par référentiel | |
| 77 | +| `SEEDS_CNT_COMPETENCES` | 2 | Compétences par domaine | |
| 78 | +| `SEEDS_CNT_THEMATICS` | 2 | Thématiques par compétence | |
| 79 | +| `SEEDS_CNT_TUBES` | 2 | Sujets par thématique | |
| 80 | +| `SEEDS_SKILL_LEVEL` | 3 | Niveau maximum des acquis par sujet | |
| 81 | +| `SEEDS_LOCALES` | `['fr','en']` | Langues pour les traductions | |
| 82 | + |
0 commit comments