NeahNew/MISSION_DELETION_IDS_EMPTY_ANALYSIS.md
2026-01-04 16:25:38 +01:00

9.9 KiB

Analyse : IDs Vides lors de la Suppression de Mission

🔍 Problème

Lors de la suppression d'une mission, N8N reçoit des IDs vides :

{
  "repoName": "",
  "leantimeProjectId": 0,
  "documentationCollectionId": "",
  "rocketchatChannelId": "",
  "giteaRepositoryUrl": null,
  "outlineCollectionId": null,
  "rocketChatChannelId": null
}

Cela signifie que les IDs ne sont PAS sauvegardés en base lors de la création.


🔄 Flow de Création (Théorique)

1. POST /api/missions
   ↓
2. Crée mission en Prisma (sans IDs)
   ↓
3. Upload logo dans Minio
   ↓
4. POST N8N webhook (mission-created)
   ↓
5. N8N crée intégrations :
   - Gitea → retourne html_url
   - Leantime → retourne projectId
   - Outline → retourne collectionId
   - RocketChat → retourne channelId
   ↓
6. N8N → POST /mission-created (avec les IDs)
   ↓
7. Backend sauvegarde les IDs en base ✅

Problèmes Possibles

Problème 1: N8N n'appelle pas /mission-created

Symptôme : Les IDs ne sont jamais sauvegardés

Vérification :

  • Vérifier les logs N8N : le node "Save Mission To API" est-il exécuté ?
  • Vérifier les logs backend : y a-t-il des appels à /mission-created ?
  • Vérifier les erreurs N8N : le workflow s'arrête-t-il avant "Save Mission To API" ?

Solution :

  • Vérifier que le node "Save Mission To API" est bien connecté dans le workflow
  • Vérifier que l'URL est correcte : {{ MISSION_API_URL }}/mission-created
  • Vérifier que l'API key est correcte dans les headers

Problème 2: N8N appelle /mission-created mais sans missionId

Symptôme : L'endpoint ne trouve pas la mission

Vérification :

  • Vérifier les logs backend :
    === Mission Created Webhook Received ===
    Looking up mission by ID: ...
    Mission not found: ...
    
  • Vérifier le body reçu par /mission-created : contient-il missionId ?

Solution :

  • Modifier le workflow N8N pour inclure missionId dans le body :
    {
      "missionId": "={{ $node['Process Mission Data'].json.missionId }}",
      ...
    }
    

Problème 3: N8N appelle /mission-created mais les IDs sont vides

Symptôme : L'endpoint trouve la mission mais les IDs sont null ou vides

Vérification :

  • Vérifier les logs backend :
    Received mission-created data: {
      missionId: "...",
      gitRepoUrl: null,  // ❌ Vide
      leantimeProjectId: null,  // ❌ Vide
      ...
    }
    
  • Vérifier les logs N8N : les nodes de création retournent-ils bien les IDs ?

Solution :

  • Vérifier que les nodes N8N (Create Git Repository, Create Leantime Project, etc.) retournent bien les IDs
  • Vérifier que le node "Combine Results" combine correctement les IDs
  • Vérifier que le node "Save Mission To API" utilise les bons chemins pour les IDs

Problème 4: Mapping incorrect des champs

Symptôme : Les IDs sont envoyés mais avec des noms incorrects

Vérification :

  • Vérifier le body envoyé par N8N :
    {
      "gitRepoUrl": "...",  // ✅ Correct
      "leantimeProjectId": "...",  // ✅ Correct
      "documentationCollectionId": "...",  // ✅ Correct
      "rocketchatChannelId": "..."  // ✅ Correct
    }
    
  • Vérifier le mapping dans /mission-created :
    • gitRepoUrlgiteaRepositoryUrl
    • documentationCollectionIdoutlineCollectionId
    • rocketchatChannelIdrocketChatChannelId

Solution :

  • Vérifier que les noms de champs correspondent exactement

Problème 5: API Key incorrecte

Symptôme : L'endpoint retourne 401 Unauthorized

Vérification :

  • Vérifier les logs backend :
    Invalid API key: { received: '...', expected: '...' }
    
  • Vérifier que N8N_API_KEY est bien configuré dans l'environnement
  • Vérifier que N8N envoie bien x-api-key dans les headers

Solution :

  • Vérifier la variable d'environnement N8N_API_KEY
  • Vérifier que N8N utilise la bonne API key dans le header

🔍 Points de Vérification

1. Vérifier les Logs Backend

Lors de la création :

=== Starting N8N Workflow ===
Sending to N8N: { missionId: "...", ... }
N8N Workflow Result: { success: true, ... }

Lors de l'appel /mission-created :

=== Mission Created Webhook Received ===
Received mission-created data: { ... }
Looking up mission by ID: ...
Found mission: { id: "...", ... }
Mission updated successfully: { ... }

Si ces logs n'apparaissent pas → N8N n'appelle pas /mission-created


2. Vérifier les Logs N8N

Dans le workflow N8N :

  • Le node "Save Mission To API" est-il exécuté ?
  • Y a-t-il des erreurs dans ce node ?
  • Le body envoyé contient-il les IDs ?

Vérifier le body du node "Save Mission To API" :

{
  "missionId": "={{ $node['Process Mission Data'].json.missionId }}",
  "gitRepoUrl": "={{ $node['Combine Results'].json.gitRepo?.html_url }}",
  "leantimeProjectId": "={{ $node['Combine Results'].json.leantimeProject?.result?.[0] }}",
  "documentationCollectionId": "={{ $node['Combine Results'].json.docCollection?.data?.id }}",
  "rocketchatChannelId": "={{ $node['Combine Results'].json.rocketChatChannel?.channel?._id }}"
}

3. Vérifier la Base de Données

Requête SQL :

SELECT 
  id, 
  name, 
  giteaRepositoryUrl, 
  leantimeProjectId, 
  outlineCollectionId, 
  rocketChatChannelId,
  createdAt,
  updatedAt
FROM Mission 
WHERE name = 'Creation'
ORDER BY createdAt DESC
LIMIT 1;

Résultat attendu :

id: cd0225cf-8dfd-4bf0-a20a-6aa9c04ebb42
name: Creation
giteaRepositoryUrl: https://gite.slm-lab.net/alma/creation  ✅
leantimeProjectId: 123  ✅
outlineCollectionId: collection-456  ✅
rocketChatChannelId: channel-789  ✅

Si tous les IDs sont null → Ils ne sont pas sauvegardés


📋 Checklist de Diagnostic

Étape 1: Vérifier que N8N reçoit missionId

  • Les logs backend montrent missionId dans n8nData
  • N8N reçoit bien missionId dans le webhook

Étape 2: Vérifier que N8N crée les intégrations

  • Les logs N8N montrent que les nodes de création sont exécutés
  • Les nodes retournent bien les IDs (html_url, projectId, etc.)

Étape 3: Vérifier que N8N combine les résultats

  • Le node "Combine Results" contient les IDs
  • Les IDs sont accessibles via les chemins corrects

Étape 4: Vérifier que N8N appelle /mission-created

  • Les logs backend montrent des appels à /mission-created
  • Le node "Save Mission To API" est exécuté dans N8N
  • Pas d'erreur 401 (API key) ou 404 (mission not found)

Étape 5: Vérifier que les IDs sont sauvegardés

  • Les logs backend montrent "Mission updated successfully"
  • La base de données contient les IDs après création
  • Les IDs sont correctement mappés

🎯 Actions Recommandées (Sans Toucher au Code)

1. Vérifier les Logs Backend

# Chercher les appels à /mission-created
grep "Mission Created Webhook Received" logs.txt

# Chercher les erreurs
grep "Mission not found" logs.txt
grep "Invalid API key" logs.txt

2. Vérifier le Workflow N8N

  1. Ouvrir le workflow NeahMissionCreate
  2. Vérifier que le node "Save Mission To API" :
    • Est bien connecté après "Combine Results"
    • Contient missionId dans le body
    • Utilise les bons chemins pour les IDs
    • A l'URL correcte : {{ MISSION_API_URL }}/mission-created
    • A l'API key correcte dans les headers

3. Tester Manuellement

Appel manuel à /mission-created :

curl -X POST https://hub.slm-lab.net/api/missions/mission-created \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "missionId": "cd0225cf-8dfd-4bf0-a20a-6aa9c04ebb42",
    "name": "Creation",
    "creatorId": "user-id",
    "gitRepoUrl": "https://gite.slm-lab.net/alma/creation",
    "leantimeProjectId": "123",
    "documentationCollectionId": "collection-456",
    "rocketchatChannelId": "channel-789"
  }'

Vérifier la réponse :

  • 200 OK → L'endpoint fonctionne
  • 401 Unauthorized → Problème d'API key
  • 404 Not Found → Problème de recherche de mission
  • 400 Bad Request → Problème de validation

4. Vérifier la Base de Données

-- Vérifier une mission spécifique
SELECT * FROM Mission WHERE id = 'cd0225cf-8dfd-4bf0-a20a-6aa9c04ebb42';

-- Vérifier les missions récentes sans IDs
SELECT id, name, createdAt 
FROM Mission 
WHERE giteaRepositoryUrl IS NULL 
  AND leantimeProjectId IS NULL 
  AND outlineCollectionId IS NULL 
  AND rocketChatChannelId IS NULL
ORDER BY createdAt DESC
LIMIT 10;

🔧 Solutions Probables

Solution 1: Ajouter missionId dans N8N

Dans le node "Save Mission To API" :

{
  "missionId": "={{ $node['Process Mission Data'].json.missionId }}",
  ...
}

Solution 2: Vérifier les Chemins des IDs dans N8N

Vérifier que les chemins sont corrects :

  • gitRepo.html_url (pas gitRepo.body.html_url)
  • leantimeProject.result[0] (array avec index 0)
  • docCollection.data.id (pas docCollection.id)
  • rocketChatChannel.channel._id (pas rocketChatChannel._id)

Solution 3: Vérifier l'API Key

Vérifier que :

  • N8N_API_KEY est configuré dans .env
  • N8N utilise la même clé dans le header x-api-key

📝 Résumé

Le problème est que les IDs ne sont pas sauvegardés en base.

Causes possibles :

  1. N8N n'appelle pas /mission-created
  2. N8N appelle mais sans missionId → mission non trouvée
  3. N8N appelle mais les IDs sont vides dans le body
  4. API key incorrecte → 401 Unauthorized
  5. Mapping incorrect des champs

Action immédiate :

  1. Vérifier les logs backend pour voir si /mission-created est appelé
  2. Vérifier le workflow N8N pour voir si missionId est inclus
  3. Vérifier la base de données pour voir si les IDs sont sauvegardés

Date: $(date) Status: Analyse sans modification de code Action Requise: Vérification des logs et du workflow N8N