mission-tab deletemission

This commit is contained in:
alma 2026-01-04 16:25:38 +01:00
parent 96738a341f
commit 0a660bf7f9
2 changed files with 381 additions and 0 deletions

View File

@ -0,0 +1,377 @@
# Analyse : IDs Vides lors de la Suppression de Mission
## 🔍 Problème
Lors de la suppression d'une mission, N8N reçoit des IDs vides :
```json
{
"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 :
```json
{
"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 :
```json
{
"gitRepoUrl": "...", // ✅ Correct
"leantimeProjectId": "...", // ✅ Correct
"documentationCollectionId": "...", // ✅ Correct
"rocketchatChannelId": "..." // ✅ Correct
}
```
- Vérifier le mapping dans `/mission-created` :
- `gitRepoUrl``giteaRepositoryUrl`
- `documentationCollectionId``outlineCollectionId`
- `rocketchatChannelId``rocketChatChannelId`
**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"** :
```json
{
"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** :
```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
```bash
# 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`** :
```bash
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
```sql
-- 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"** :
```json
{
"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

View File

@ -110,6 +110,10 @@ export class N8nService {
guardians: data.guardians || {},
volunteers: Array.isArray(data.volunteers) ? data.volunteers : [],
creatorId: data.creatorId,
missionId: data.missionId, // ✅ Include missionId so N8N can use it
logoPath: data.logoPath, // Include logoPath if present
logoUrl: data.logoUrl, // Include logoUrl if present
logo: data.logo, // Include logo data if present
config: {
...data.config, // Preserve original config
N8N_API_KEY: this.apiKey,