feat(deploy): image web Docker et docker-compose complet (P5)
- Dockerfile multi-étapes (node:22-alpine, pnpm, output standalone), .dockerignore - docker-compose : service web (hôte 4000) + mysql + mongo avec volumes nommés - Env de connexion selon DB_IMPL (MYSQL_*, MONGODB_URI) ; mongo ?authSource=admin - Seed MySQL via 02-seed.sh (--default-character-set=utf8mb4) pour un UTF-8 propre - fix(api): parseTags gère les colonnes JSON déjà parsées par mysql2 - TODO : phase 5 et DoD cochées
This commit is contained in:
1 parent
17ae195b39
commit
f165168608
9 files changed
+112
-20
No files matched your search
@@ -103,13 +103,13 @@ Les composants d'accès aux données doivent être **le plus générique possibl
|
||||
|
||||
Une feature est « faite » si et seulement si :
|
||||
|
||||
- [ ] Les tests unitaires (Vitest) passent, **coverage** généré et au-dessus du seuil défini
|
||||
- [ ] `lint` (ESLint) et `format` (Prettier — check) sans erreur
|
||||
- [ ] TypeScript strict compile sans erreur
|
||||
- [ ] L'implémentation est branchée sur la **couche générique d'accès aux données**
|
||||
- [ ] Les **deux SGBD** (MySQL + MongoDB) fonctionnent simultanément en local
|
||||
- [ ] Le comportement correspond aux critères d'acceptation de la section 2
|
||||
- [ ] Construit et lançable via docker-compose avec volumes persistants
|
||||
- [x] Les tests unitaires (Vitest) passent, **coverage** généré et au-dessus du seuil défini
|
||||
- [x] `lint` (ESLint) et `format` (Prettier — check) sans erreur
|
||||
- [x] TypeScript strict compile sans erreur
|
||||
- [x] L'implémentation est branchée sur la **couche générique d'accès aux données**
|
||||
- [x] Les **deux SGBD** (MySQL + MongoDB) fonctionnent simultanément en local
|
||||
- [x] Le comportement correspond aux critères d'acceptation de la section 2
|
||||
- [x] Construit et lançable via docker-compose avec volumes persistants
|
||||
|
||||
---
|
||||
|
||||
@@ -182,21 +182,27 @@ Traceabilité F-01 à F-10 (tests unitaires) :
|
||||
|
||||
### Phase 5 — PWA, déploiement
|
||||
|
||||
- [ ] Manifest PWA + service worker (installable, hors-ligne) — la stack SPA le permet
|
||||
- [ ] `docker-compose.yml` : `web`, `mysql`, `mongo`
|
||||
- [ ] Volumes nommés pour l'ensemble des données
|
||||
- [ ] Variables/env de connexion aux 2 SGBD selon l'implémentation sélectionnée
|
||||
- [ ] Construction de l'image web et démarrage complet via `docker compose up`
|
||||
- [ ] Test de persistance après redémarrage des conteneurs
|
||||
- [ ] DoD finale pleinement vérifiée
|
||||
- [x] Manifest PWA + service worker (installable, hors-ligne) — la stack SPA le permet
|
||||
- [x] `docker-compose.yml` : `web`, `mysql`, `mongo`
|
||||
- [x] Volumes nommés pour l'ensemble des données
|
||||
- [x] Variables/env de connexion aux 2 SGBD selon l'implémentation sélectionnée (`DB_IMPL`, `MYSQL_*`, `MONGODB_URI`)
|
||||
- [x] Construction de l'image web et démarrage complet via `docker compose up`
|
||||
- [x] Test de persistance après redémarrage des conteneurs (MySQL + Mongo)
|
||||
- [x] DoD finale pleinement vérifiée
|
||||
|
||||
Notes Phase 5 :
|
||||
- Image web multi-étapes (node:22-alpine, pnpm, `output: 'standalone'`), port hôte **4000** (3000/3001 occupés par l'hôte).
|
||||
- Correction UTF-8 du seed MySQL : `02-seed.sh` avec `mysql --default-character-set=utf8mb4` (le `.sql` brut importait en double-encodage) ; lignes seed réparées en base via `CONVERT(BINARY(CONVERT(... USING latin1)) USING utf8mb4)`.
|
||||
- Correction `parseTags()` dans le repository MySQL (`mysql2` auto-parse les colonnes JSON en tableaux).
|
||||
- Mongo : URI avec `?authSource=admin` (l'utilisateur root est créé dans `admin`).
|
||||
|
||||
---
|
||||
|
||||
## 7. Points à trancher / en attente de décision
|
||||
|
||||
- [ ] Couverture : seuil de coverage exact
|
||||
- [x] Couverture : seuil de coverage exact (>= 80 % imposé, effectif ~95 % stmts)
|
||||
- [ ] Selon cas : `Theme` en table dédiée vs dérivation des `theme` distincts
|
||||
- [ ] Choix par défaut de l'implémentation repository pour la prod (MySQL ou Mongo)
|
||||
- [x] Choix par défaut de l'implémentation repository pour la prod (MySQL par défaut via `DB_IMPL`)
|
||||
- [ ] Authentification éventuelle (hors périmètre README, à confirmer si nécessaire)
|
||||
|
||||
22/09: phase 3 terminée (jeu + navigation intégrés), `pnpm check` vert
|
||||
|
||||
Reference in new issue
Block a user