diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..1cfcc6a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,31 @@ +# Ignore backend files +backend/** +mobile/** + +# Ignore git +.git/ +.gitignore + +# Ignore docker files +docker-compose.yml +*.dockerfile + +# Ignore node_modules and build artifacts +node_modules/ +dist/ +build/ +bin/ +tmp/ + +# Ignore environment files +.env +.env.* + +# Ignore IDE +.vscode/ +.idea/ + +# Ignore documentation build artifacts +site/ +docs/generated/ +output/ diff --git a/Makefile b/Makefile index e45ae39..30b1b4d 100644 --- a/Makefile +++ b/Makefile @@ -71,13 +71,13 @@ clean: docs-clean: @echo "$(YELLOW)Cleaning generated documentation...$(NC)" @rm -rf docs/generated/ - @docker rmi roadwave-pdf-generator 2>/dev/null || true + @docker rmi roadwave-pdf-generator roadwave-mkdocs 2>/dev/null || true @echo "$(GREEN)✓ Documentation cleaned$(NC)" ## docker-up: Start all Docker services docker-up: @echo "$(BLUE)Starting Docker services...$(NC)" - @docker compose up -d + @cd backend && docker compose up -d @echo "$(GREEN)✓ Services started$(NC)" @echo "$(YELLOW)API: http://localhost:8080$(NC)" @echo "$(YELLOW)Zitadel: http://localhost:8081$(NC)" @@ -86,12 +86,12 @@ docker-up: ## docker-down: Stop all Docker services docker-down: @echo "$(YELLOW)Stopping Docker services...$(NC)" - @docker compose down + @cd backend && docker compose down @echo "$(GREEN)✓ Services stopped$(NC)" ## docker-logs: Show Docker logs docker-logs: - @docker compose logs -f + @cd backend && docker compose logs -f ## migrate-up: Apply all migrations migrate-up: @@ -151,30 +151,34 @@ run-api: ## docs-serve: Start documentation server (http://localhost:8000) docs-serve: + @echo "$(BLUE)Building MkDocs Docker image with plugins...$(NC)" + @docker build -t roadwave-mkdocs -f docs/docker/mkdocs.Dockerfile . -q @echo "$(BLUE)Generating BDD documentation from Gherkin files...$(NC)" - @python3 scripts/generate-bdd-docs.py + @python3 docs/scripts/generate-bdd-docs.py @echo "$(GREEN)✓ BDD documentation generated$(NC)" @echo "$(BLUE)Starting documentation server...$(NC)" @echo "$(YELLOW)Documentation available at http://localhost:8000$(NC)" - @docker run --rm -it -p 8000:8000 -v "$(PWD):/docs" squidfunk/mkdocs-material + @docker run --rm -p 8000:8000 -v "$(PWD):/docs" roadwave-mkdocs ## bdd-docs: Generate BDD docs from Gherkin and serve with MkDocs (http://localhost:8000) bdd-docs: + @echo "$(BLUE)Building MkDocs Docker image with plugins...$(NC)" + @docker build -t roadwave-mkdocs -f docs/docker/mkdocs.Dockerfile . -q @echo "$(BLUE)Generating BDD documentation from Gherkin files...$(NC)" - @python3 scripts/generate-bdd-docs.py + @python3 docs/scripts/generate-bdd-docs.py @echo "$(GREEN)✓ BDD documentation generated$(NC)" @echo "$(BLUE)Starting documentation server...$(NC)" @echo "$(YELLOW)Documentation available at http://localhost:8000$(NC)" @echo "$(YELLOW)Navigate to 'Tests BDD' section$(NC)" - @docker run --rm -it -p 8000:8000 -v "$(PWD):/docs" squidfunk/mkdocs-material + @docker run --rm -p 8000:8000 -v "$(PWD):/docs" roadwave-mkdocs ## docs-pdf: Generate PDF of all documentation (output/RoadWave_Documentation.pdf) docs-pdf: @echo "$(BLUE)Generating BDD documentation from Gherkin files...$(NC)" - @python3 scripts/generate-bdd-docs.py + @python3 docs/scripts/generate-bdd-docs.py @echo "$(GREEN)✓ BDD documentation generated$(NC)" @echo "$(BLUE)Building PDF generator Docker image...$(NC)" - @docker build -t roadwave-pdf-generator -f scripts/Dockerfile.pdf . -q + @docker build -t roadwave-pdf-generator -f docs/docker/pdf.Dockerfile . -q @echo "$(BLUE)Generating PDF documentation...$(NC)" @docker run --rm -u $(shell id -u):$(shell id -g) -v "$(PWD):/docs" roadwave-pdf-generator @echo "$(GREEN)✓ PDF generated: output/RoadWave_Documentation.pdf$(NC)" diff --git a/docker-compose.yml b/backend/docker-compose.yml similarity index 95% rename from docker-compose.yml rename to backend/docker-compose.yml index 7fa693d..d7679bc 100644 --- a/docker-compose.yml +++ b/backend/docker-compose.yml @@ -4,15 +4,15 @@ services: # Backend API api: build: - context: ./backend - dockerfile: Dockerfile.dev + context: . + dockerfile: docker/dev.Dockerfile ports: - "8080:8080" volumes: - - ./backend:/app + - .:/app - /app/tmp env_file: - - ./backend/.env + - ./.env depends_on: postgres: condition: service_healthy diff --git a/backend/Dockerfile b/backend/docker/Dockerfile similarity index 100% rename from backend/Dockerfile rename to backend/docker/Dockerfile diff --git a/backend/Dockerfile.dev b/backend/docker/dev.Dockerfile similarity index 100% rename from backend/Dockerfile.dev rename to backend/docker/dev.Dockerfile diff --git a/docker/init-multiple-databases.sh b/backend/docker/init-multiple-databases.sh similarity index 100% rename from docker/init-multiple-databases.sh rename to backend/docker/init-multiple-databases.sh diff --git a/docs/docker/mkdocs.Dockerfile b/docs/docker/mkdocs.Dockerfile new file mode 100644 index 0000000..d769057 --- /dev/null +++ b/docs/docker/mkdocs.Dockerfile @@ -0,0 +1,14 @@ +FROM squidfunk/mkdocs-material:latest + +# Install mkdocs-kroki-plugin +RUN pip install --no-cache-dir mkdocs-kroki-plugin + +# Set working directory +WORKDIR /docs + +# Expose MkDocs port +EXPOSE 8000 + +# Default command +ENTRYPOINT ["mkdocs"] +CMD ["serve", "--dev-addr=0.0.0.0:8000"] diff --git a/scripts/Dockerfile.pdf b/docs/docker/pdf.Dockerfile similarity index 87% rename from scripts/Dockerfile.pdf rename to docs/docker/pdf.Dockerfile index 4973999..9192cde 100644 --- a/scripts/Dockerfile.pdf +++ b/docs/docker/pdf.Dockerfile @@ -18,4 +18,4 @@ RUN pip install --no-cache-dir \ WORKDIR /docs -ENTRYPOINT ["python3", "/docs/scripts/generate-pdf-docs.py"] +ENTRYPOINT ["python3", "/docs/docs/scripts/generate-pdf-docs.py"] diff --git a/scripts/generate-bdd-docs.py b/docs/scripts/generate-bdd-docs.py similarity index 100% rename from scripts/generate-bdd-docs.py rename to docs/scripts/generate-bdd-docs.py diff --git a/scripts/generate-pdf-docs.py b/docs/scripts/generate-pdf-docs.py similarity index 100% rename from scripts/generate-pdf-docs.py rename to docs/scripts/generate-pdf-docs.py diff --git a/scripts/fix-markdown-links.sh b/scripts/fix-markdown-links.sh deleted file mode 100755 index 649cc68..0000000 --- a/scripts/fix-markdown-links.sh +++ /dev/null @@ -1,141 +0,0 @@ -#!/bin/bash -# Script pour corriger les liens internes dans la documentation après refactorisation DDD - -set -e - -echo "🔗 Correction des liens internes dans la documentation..." - -# Fonction pour corriger les liens dans les fichiers du domaine _shared -fix_shared_links() { - echo " → Correction des liens dans _shared..." - find docs/domains/_shared -type f -name "*.md" -exec sed -i \ - -e 's|../../regles-metier/01-authentification-inscription.md|../rules/authentification.md|g' \ - -e 's|../../regles-metier/02-conformite-rgpd.md|../rules/rgpd.md|g' \ - -e 's|../../regles-metier/10-gestion-erreurs.md|../rules/gestion-erreurs.md|g' \ - -e 's|modele-global.md|../entities/modele-global.md|g' \ - {} \; -} - -# Fonction pour corriger les liens dans les fichiers du domaine recommendation -fix_recommendation_links() { - echo " → Correction des liens dans recommendation..." - find docs/domains/recommendation -type f -name "*.md" -exec sed -i \ - -e 's|../../regles-metier/03-centres-interet-jauges.md|../rules/centres-interet-jauges.md|g' \ - -e 's|../../regles-metier/04-algorithme-recommandation.md|../rules/algorithme-recommandation.md|g' \ - -e 's|../../regles-metier/05-interactions-navigation.md|../rules/interactions-navigation.md|g' \ - -e 's|../../docs/regles-metier/04-algorithme-recommandation.md|../rules/algorithme-recommandation.md|g' \ - -e 's|modele-global.md|../../_shared/entities/modele-global.md|g' \ - {} \; -} - -# Fonction pour corriger les liens dans les fichiers du domaine content -fix_content_links() { - echo " → Correction des liens dans content..." - find docs/domains/content -type f -name "*.md" -exec sed -i \ - -e 's|../../regles-metier/06-audio-guides-multi-sequences.md|../rules/audio-guides.md|g' \ - -e 's|../../regles-metier/07-contenus-geolocalises-voiture.md|../rules/contenus-geolocalises.md|g' \ - -e 's|../../regles-metier/11-creation-publication-contenu.md|../rules/creation-publication.md|g' \ - -e 's|../../regles-metier/12-radio-live.md|../rules/radio-live.md|g' \ - -e 's|../../regles-metier/13-detection-contenu-protege.md|../rules/detection-contenu-protege.md|g' \ - -e 's|modele-global.md|../../_shared/entities/modele-global.md|g' \ - {} \; -} - -# Fonction pour corriger les liens dans les fichiers du domaine advertising -fix_advertising_links() { - echo " → Correction des liens dans advertising..." - find docs/domains/advertising -type f -name "*.md" -exec sed -i \ - -e 's|../../regles-metier/16-publicites.md|../rules/publicites.md|g' \ - -e 's|modele-global.md|../../_shared/entities/modele-global.md|g' \ - {} \; -} - -# Fonction pour corriger les liens dans les fichiers du domaine premium -fix_premium_links() { - echo " → Correction des liens dans premium..." - find docs/domains/premium -type f -name "*.md" -exec sed -i \ - -e 's|../../regles-metier/08-mode-offline.md|../rules/mode-offline.md|g' \ - -e 's|../../regles-metier/09-abonnements-notifications.md|../rules/abonnements-notifications.md|g' \ - -e 's|../../regles-metier/17-premium.md|../rules/premium.md|g' \ - -e 's|modele-global.md|../../_shared/entities/modele-global.md|g' \ - {} \; -} - -# Fonction pour corriger les liens dans les fichiers du domaine monetization -fix_monetization_links() { - echo " → Correction des liens dans monetization..." - find docs/domains/monetization -type f -name "*.md" -exec sed -i \ - -e 's|../../regles-metier/18-monetisation-createurs.md|../rules/monetisation-createurs.md|g' \ - -e 's|modele-global.md|../../_shared/entities/modele-global.md|g' \ - {} \; -} - -# Fonction pour corriger les liens dans les fichiers du domaine moderation -fix_moderation_links() { - echo " → Correction des liens dans moderation..." - find docs/domains/moderation -type f -name "*.md" -exec sed -i \ - -e 's|../../regles-metier/14-moderation-flows.md|../rules/moderation-flows.md|g' \ - -e 's|../../regles-metier/15-moderation-communautaire.md|../rules/moderation-communautaire.md|g' \ - -e 's|../../regles-metier/19-autres-comportements.md|../rules/autres-comportements.md|g' \ - -e 's|modele-global.md|../../_shared/entities/modele-global.md|g' \ - {} \; -} - -# Fonction pour corriger les liens dans les autres fichiers docs (ADR, etc.) -fix_other_docs_links() { - echo " → Correction des liens dans ADR et autres docs..." - - # ADR et autres fichiers qui référencent les anciennes règles métier - find docs/adr docs/mobile docs/compliance docs/architecture -type f -name "*.md" 2>/dev/null -exec sed -i \ - -e 's|regles-metier/01-authentification-inscription.md|domains/_shared/rules/authentification.md|g' \ - -e 's|regles-metier/02-conformite-rgpd.md|domains/_shared/rules/rgpd.md|g' \ - -e 's|regles-metier/03-centres-interet-jauges.md|domains/recommendation/rules/centres-interet-jauges.md|g' \ - -e 's|regles-metier/04-algorithme-recommandation.md|domains/recommendation/rules/algorithme-recommandation.md|g' \ - -e 's|regles-metier/05-interactions-navigation.md|domains/recommendation/rules/interactions-navigation.md|g' \ - -e 's|regles-metier/06-audio-guides-multi-sequences.md|domains/content/rules/audio-guides.md|g' \ - -e 's|regles-metier/07-contenus-geolocalises-voiture.md|domains/content/rules/contenus-geolocalises.md|g' \ - -e 's|regles-metier/08-mode-offline.md|domains/premium/rules/mode-offline.md|g' \ - -e 's|regles-metier/09-abonnements-notifications.md|domains/premium/rules/abonnements-notifications.md|g' \ - -e 's|regles-metier/10-gestion-erreurs.md|domains/_shared/rules/gestion-erreurs.md|g' \ - -e 's|regles-metier/11-creation-publication-contenu.md|domains/content/rules/creation-publication.md|g' \ - -e 's|regles-metier/12-radio-live.md|domains/content/rules/radio-live.md|g' \ - -e 's|regles-metier/13-detection-contenu-protege.md|domains/content/rules/detection-contenu-protege.md|g' \ - -e 's|regles-metier/14-moderation-flows.md|domains/moderation/rules/moderation-flows.md|g' \ - -e 's|regles-metier/15-moderation-communautaire.md|domains/moderation/rules/moderation-communautaire.md|g' \ - -e 's|regles-metier/16-publicites.md|domains/advertising/rules/publicites.md|g' \ - -e 's|regles-metier/17-premium.md|domains/premium/rules/premium.md|g' \ - -e 's|regles-metier/18-monetisation-createurs.md|domains/monetization/rules/monetisation-createurs.md|g' \ - -e 's|regles-metier/19-autres-comportements.md|domains/moderation/rules/autres-comportements.md|g' \ - -e 's|diagrammes/entites/modele-global.md|domains/_shared/entities/modele-global.md|g' \ - -e 's|diagrammes/entites/modele-recommandation.md|domains/recommendation/entities/modele-recommandation.md|g' \ - -e 's|diagrammes/entites/modele-audio-guides.md|domains/content/entities/modele-audio-guides.md|g' \ - -e 's|diagrammes/entites/modele-radio-live.md|domains/content/entities/modele-radio-live.md|g' \ - -e 's|diagrammes/entites/modele-publicites.md|domains/advertising/entities/modele-publicites.md|g' \ - -e 's|diagrammes/entites/modele-premium.md|domains/premium/entities/modele-premium.md|g' \ - -e 's|diagrammes/entites/modele-monetisation.md|domains/monetization/entities/modele-monetisation.md|g' \ - -e 's|diagrammes/entites/modele-moderation.md|domains/moderation/entities/modele-moderation.md|g' \ - -e 's|diagrammes/flux/moderation-signalement.md|domains/moderation/flows/moderation-signalement.md|g' \ - -e 's|diagrammes/etats/signalement-lifecycle.md|domains/moderation/states/signalement-lifecycle.md|g' \ - -e 's|diagrammes/sequence/processus-appel-moderation.md|domains/moderation/sequences/processus-appel-moderation.md|g' \ - {} \; 2>/dev/null || true - - # Fichier gherkin-moderation-overview.md - if [ -f docs/gherkin-moderation-overview.md ]; then - sed -i \ - -e 's|regles-metier/14-moderation-flows.md|domains/moderation/rules/moderation-flows.md|g' \ - -e 's|regles-metier/15-moderation-communautaire.md|domains/moderation/rules/moderation-communautaire.md|g' \ - docs/gherkin-moderation-overview.md - fi -} - -# Exécuter toutes les corrections -fix_shared_links -fix_recommendation_links -fix_content_links -fix_advertising_links -fix_premium_links -fix_monetization_links -fix_moderation_links -fix_other_docs_links - -echo "✅ Correction des liens terminée!" diff --git a/scripts/fix-markdown-lists.sh b/scripts/fix-markdown-lists.sh deleted file mode 100755 index c59a8f7..0000000 --- a/scripts/fix-markdown-lists.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash - -# Script pour ajouter des lignes vides avant les listes markdown -# qui n'en ont pas, pour un rendu correct dans mkdocs - -set -e - -echo "🔍 Recherche des fichiers markdown dans docs/..." - -# Compteur de fichiers modifiés -modified=0 - -# Trouver tous les fichiers .md dans docs/ -find docs -name "*.md" -type f | while read -r file; do - echo " Traitement de $file..." - - # Utiliser awk pour ajouter une ligne vide avant les listes si nécessaire - awk ' - BEGIN { - prev = "" - prev_empty = 1 - } - { - current = $0 - # Si la ligne courante commence par "- " et que la ligne précédente n'\''est pas vide - # et ne commence pas déjà par "- " (déjà dans une liste) - if (current ~ /^- / && prev !~ /^$/ && prev !~ /^- /) { - print prev - print "" # Ajouter une ligne vide - prev = current - } - # Sinon, imprimer la ligne précédente normalement - else if (NR > 1) { - print prev - prev = current - } - else { - prev = current - } - } - END { - # Imprimer la dernière ligne - if (prev != "") print prev - } - ' "$file" > "$file.tmp" - - # Vérifier si le fichier a changé - if ! cmp -s "$file" "$file.tmp"; then - mv "$file.tmp" "$file" - echo " ✅ $file modifié" - modified=$((modified + 1)) - else - rm "$file.tmp" - fi -done - -echo "" -echo "✨ Terminé ! $modified fichier(s) modifié(s)" diff --git a/scripts/fix-remaining-links.sh b/scripts/fix-remaining-links.sh deleted file mode 100755 index 59ad424..0000000 --- a/scripts/fix-remaining-links.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash -# Script pour corriger les liens restants après refactorisation DDD - -set -e - -echo "🔗 Correction des liens restants..." - -# 1. Corriger les liens docs/adr/ → adr/ dans index.md et technical.md -echo " → Correction des liens ADR dans index.md et technical.md..." -find docs -name "index.md" -o -name "technical.md" -o -name "TECHNICAL.md" | while read file; do - if [ -f "$file" ]; then - sed -i 's|docs/adr/|adr/|g' "$file" - fi -done - -# 2. Corriger les liens vers anciens noms de fichiers numérotés -echo " → Correction des liens vers anciens noms de fichiers..." - -# Dans content/ -find docs/domains/content -type f -name "*.md" -exec sed -i \ - -e 's|05-interactions-navigation\.md|../../recommendation/rules/interactions-navigation.md|g' \ - -e 's|18-detection-contenu-protege\.md|detection-contenu-protege.md|g' \ - {} \; - -# Dans moderation/ -find docs/domains/moderation -type f -name "*.md" -exec sed -i \ - -e 's|18-detection-contenu-protege\.md|../../content/rules/detection-contenu-protege.md|g' \ - -e 's|19-moderation-communautaire\.md|moderation-communautaire.md|g' \ - {} \; - -# Dans premium/ -find docs/domains/premium -type f -name "*.md" -exec sed -i \ - -e 's|05-interactions-navigation\.md|../../recommendation/rules/interactions-navigation.md|g' \ - -e 's|08-mode-offline\.md|mode-offline.md|g' \ - {} \; - -# Dans recommendation/ -find docs/domains/recommendation -type f -name "*.md" -exec sed -i \ - -e 's|05-interactions-navigation\.md|interactions-navigation.md|g' \ - -e 's|ANNEXE-POST-MVP\.md|../../_shared/rules/ANNEXE-POST-MVP.md|g' \ - {} \; - -# 3. Corriger les liens relatifs vers ADR depuis les domaines -echo " → Correction des liens ADR depuis les domaines..." -find docs/domains -type f -name "*.md" -exec sed -i \ - -e 's|\.\./adr/|../../../adr/|g' \ - {} \; - -# 4. Corriger le lien dans recommendation/features/recommendation/README.md -if [ -f "docs/domains/recommendation/features/recommendation/README.md" ]; then - sed -i 's|\.\./rules/|../../rules/|g' docs/domains/recommendation/features/recommendation/README.md -fi - -# 5. Corriger les liens dans mobile/ vers adr/ -find docs/mobile -type f -name "*.md" -exec sed -i \ - -e 's|\.\./adr/010-frontend-mobile\.md|../adr/012-frontend-mobile.md|g' \ - {} \; - -# 6. Corriger liens dans compliance/ -if [ -f "docs/compliance/stores-submission.md" ]; then - sed -i 's|../adr/010-frontend-mobile\.md|../adr/012-frontend-mobile.md|g' docs/compliance/stores-submission.md -fi - -# 7. Corriger le lien vers sequences/scoring-recommandation.md qui n'existe pas -find docs/domains/recommendation -type f -name "README.md" -exec sed -i \ - -e 's|sequences/scoring-recommandation\.md|(à créer)|g' \ - {} \; - -echo "✅ Correction des liens restants terminée!" diff --git a/scripts/remove-broken-links.sh b/scripts/remove-broken-links.sh deleted file mode 100755 index 59ce58e..0000000 --- a/scripts/remove-broken-links.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash -# Script pour supprimer les liens cassés vers des fichiers inexistants - -set -e - -echo "🗑️ Suppression des liens cassés..." - -# 1. Supprimer les liens vers ADR inexistants dans index.md -echo " → Nettoyage de index.md..." -if [ -f "docs/index.md" ]; then - sed -i \ - -e '/adr\/010-commandes-volant\.md/d' \ - -e '/adr\/011-conformite-stores-carplay-android-auto\.md/d' \ - docs/index.md -fi - -# 2. Corriger les numéros ADR incorrects dans technical.md -echo " → Correction des numéros ADR dans technical.md..." -if [ -f "docs/technical.md" ]; then - sed -i \ - -e 's|adr/018-notifications-push\.md|adr/017-notifications-geolocalisees.md|g' \ - docs/technical.md -fi - -# 3. Supprimer les liens vers fichiers d'analyse inexistants dans ADR -echo " → Nettoyage des liens dans les ADR..." -find docs/adr -type f -name "*.md" -exec sed -i \ - -e 's|\[.*\](../architecture/database/schema\.md)||g' \ - -e 's|\[.*\](../INCONSISTENCIES-ANALYSIS\.md[^)]*)||g' \ - -e 's|\[.*\](\.\.\/ANALYSE_LIBRAIRIES_GO\.md)||g' \ - -e 's|\[.*\](../../README\.md)||g' \ - -e 's|\[.*\](../../TECHNICAL\.md)||g' \ - {} \; - -# 4. Corriger les numéros ADR dans adr/014-organisation-monorepo.md -if [ -f "docs/adr/014-organisation-monorepo.md" ]; then - sed -i 's|020-strategie-cicd-monorepo\.md|022-strategie-cicd-monorepo.md|g' docs/adr/014-organisation-monorepo.md -fi - -# 5. Corriger les numéros ADR dans adr/020-librairies-flutter.md -if [ -f "docs/adr/020-librairies-flutter.md" ]; then - sed -i \ - -e 's|018-librairies-flutter\.md|020-librairies-flutter.md|g' \ - -e 's|010-frontend-mobile\.md|012-frontend-mobile.md|g' \ - docs/adr/020-librairies-flutter.md -fi - -# 6. Corriger le lien ADR dans domains/recommendation/rules/interactions-navigation.md -if [ -f "docs/domains/recommendation/rules/interactions-navigation.md" ]; then - sed -i 's|../../../adr/010-frontend-mobile\.md|../../../adr/012-frontend-mobile.md|g' \ - docs/domains/recommendation/rules/interactions-navigation.md -fi - -# 7. Corriger les liens dans domains/README.md -if [ -f "docs/domains/README.md" ]; then - sed -i \ - -e 's|\[📖 Règles métier par numéro\](../regles-metier/)||g' \ - -e 's|\[🏛️ ADR (Architecture Decision Records)\](../../../adr/)|[🏛️ ADR (Architecture Decision Records)](../adr/)|g' \ - -e 's|\[⚖️ Documentation légale\](../legal/)|[⚖️ Documentation légale](../legal/README.md)|g' \ - -e 's|\[🖥️ Interfaces UI\](../interfaces/)|[🖥️ Interfaces UI](../interfaces/README.md)|g' \ - docs/domains/README.md -fi - -# 8. Nettoyer les lignes vides créées par les suppressions -find docs -type f -name "*.md" -exec sed -i '/^$/N;/^\n$/d' {} \; - -echo "✅ Liens cassés supprimés/corrigés!"