# Guide de dépannage - API Externe

## Problème : "Connection refused" sur le port 1500

### Solution 1 : Démarrer le serveur Laravel

Le serveur Laravel doit être démarré sur le port 1500 pour que l'API soit accessible.

**Commande pour démarrer le serveur :**

```bash
php artisan serve --host=127.0.0.1 --port=1500
```

**Pour Windows PowerShell :**

```powershell
php artisan serve --host=127.0.0.1 --port=1500
```

**Vérifier que le serveur est en cours d'exécution :**

```bash
netstat -an | findstr ":1500"
```

Vous devriez voir :
```
TCP    127.0.0.1:1500         0.0.0.0:0              LISTENING
```

### Solution 2 : Vérifier la configuration

1. **Vérifier que la variable `DASHBOARD_API_KEY` est définie dans `.env` :**

```env
DASHBOARD_API_KEY=gCw4Xnm4euKRoyUCB5aN81AsFlTCEAhMAoZumr6R
```

2. **Vérifier que les routes API sont bien chargées :**

Le fichier `routes/api.php` doit exister et être configuré dans `bootstrap/app.php`.

3. **Vérifier que le middleware est enregistré :**

Dans `bootstrap/app.php`, le middleware `api.key` doit être enregistré :

```php
$middleware->alias([
    'user.active' => \App\Http\Middleware\CheckUserActive::class,
    'api.key' => \App\Http\Middleware\ApiKeyAuth::class,
]);
```

### Solution 3 : Tester l'API manuellement

**Avec cURL (depuis un autre terminal) :**

```bash
curl -X POST http://127.0.0.1:1500/api/external/users \
  -H "Content-Type: application/json" \
  -H "X-API-Key: gCw4Xnm4euKRoyUCB5aN81AsFlTCEAhMAoZumr6R" \
  -d "{
    \"full_name\": \"Test User\",
    \"email\": \"test@example.com\",
    \"phone\": \"+221 77 000 00 01\",
    \"password\": \"password@2026\",
    \"company_id\": 1,
    \"role\": \"admin\"
  }"
```

**Avec PowerShell :**

```powershell
$body = @{
    full_name = "Test User"
    email = "test@example.com"
    phone = "+221 77 000 00 01"
    password = "password@2026"
    company_id = 1
    role = "admin"
} | ConvertTo-Json

$headers = @{
    "Content-Type" = "application/json"
    "X-API-Key" = "gCw4Xnm4euKRoyUCB5aN81AsFlTCEAhMAoZumr6R"
}

Invoke-RestMethod -Uri "http://127.0.0.1:1500/api/external/users" -Method POST -Headers $headers -Body $body
```

### Solution 4 : Vérifier les logs

Consultez les logs Laravel pour voir les erreurs détaillées :

```bash
tail -f storage/logs/laravel.log
```

Ou sur Windows :

```powershell
Get-Content storage/logs/laravel.log -Tail 50 -Wait
```

## Problème : Erreur 401 Unauthorized

### Causes possibles :

1. **Clé API manquante ou incorrecte**
   - Vérifiez que le header `X-API-Key` est présent dans la requête
   - Vérifiez que la clé correspond à `DASHBOARD_API_KEY` dans `.env`

2. **Format du header incorrect**
   - Utilisez : `X-API-Key: votre_clé`
   - Ou : `Authorization: Bearer votre_clé`

## Problème : Erreur 422 Validation failed

### Causes possibles :

1. **Email déjà utilisé**
   - L'email doit être unique dans la table `users`

2. **Champs requis manquants**
   - `full_name` est requis
   - `password` est requis (minimum 8 caractères)

3. **Company ID invalide**
   - Le `company_id` doit exister dans la table `companies`

4. **Rôle invalide**
   - Le `role` doit exister dans la table `roles` (admin, superAdmin, gestionnaire)

## Vérification rapide

1. ✅ Serveur démarré sur le port 1500
2. ✅ Variable `DASHBOARD_API_KEY` définie dans `.env`
3. ✅ Routes API configurées dans `bootstrap/app.php`
4. ✅ Middleware `api.key` enregistré
5. ✅ Rôles Spatie créés dans la base de données

## Commandes utiles

**Démarrer le serveur en arrière-plan (Windows) :**

```powershell
Start-Process powershell -ArgumentList "-NoExit", "-Command", "cd '$PWD'; php artisan serve --host=127.0.0.1 --port=1500"
```

**Vérifier les processus PHP :**

```bash
tasklist | findstr php
```

**Arrêter tous les serveurs Laravel :**

```bash
taskkill /F /IM php.exe
```

