# Networking Participants API Guide

## 🎯 **Fonctionnalité Participants de Networking**

La table `networking_participants` permet de gérer les participants dans les sessions de networking, avec des rôles, statuts et tracking en temps réel.

## 🗂️ **Structure de la Table**

### **networking_participants**
- `networking_id` - Lien vers la session de networking
- `user_id` - Utilisateur participant
- `role` - Rôle: `organizer`, `participant`, `moderator`, `speaker`
- `status` - Statut: `invited`, `confirmed`, `declined`, `attended`, `no_show`
- `invited_at`, `confirmed_at`, `joined_at`, `left_at` - Timestamps de tracking
- `notes` - Notes sur le participant
- `preferences` - Préférences JSON
- `is_active` - Participant actif dans la session

## 🛣️ **API Routes Participants**

### **Gestion des Participants**
```php
// Récupérer tous les participants d'une session
GET /api/v1/networking/{networking_id}/participants

// Ajouter des participants à une session
POST /api/v1/networking/{networking_id}/participants
{
  "participants": [
    {
      "user_id": 123,
      "role": "participant", // ou "organizer", "moderator", "speaker"
      "notes": "Expert en traitement d'eau"
    }
  ]
}

// Modifier un participant
PUT /api/v1/networking/{networking_id}/participants/{participant_id}
{
  "role": "moderator",
  "status": "confirmed",
  "notes": "Nouveau modérateur"
}

// Supprimer un participant
DELETE /api/v1/networking/{networking_id}/participants/{participant_id}

// Récupérer les participants actifs
GET /api/v1/networking/{networking_id}/participants/active
```

### **Actions des Participants**
```php
// Confirmer la participation
POST /api/v1/networking/{networking_id}/confirm-participation

// Décliner la participation
POST /api/v1/networking/{networking_id}/decline-participation

// Rejoindre la session (temps réel)
POST /api/v1/networking/{networking_id}/join-session

// Quitter la session
POST /api/v1/networking/{networking_id}/leave-session
```

## 🎮 **Exemples d'Utilisation**

### **1. Créer une Session avec Participants**
```javascript
// 1. Créer la session de networking
const networking = await fetch('/api/v1/networking', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    receiver_id: 123,
    subject: "Session Innovation Eau",
    type: "meeting",
    date_of_meeting: "2025-08-10 14:00:00",
    duration_meeting: 90
  })
});

// 2. Ajouter des participants
const participants = await fetch(`/api/v1/networking/${networking.id}/participants`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    participants: [
      { user_id: 456, role: "speaker", notes: "Expert en purification" },
      { user_id: 789, role: "moderator", notes: "Modérateur expérimenté" },
      { user_id: 321, role: "participant" }
    ]
  })
});
```

### **2. Interface de Gestion des Participants**
```javascript
// Récupérer les participants
const getParticipants = async (networkingId) => {
  const response = await fetch(`/api/v1/networking/${networkingId}/participants`);
  return response.json();
};

// Confirmer participation (utilisateur)
const confirmParticipation = async (networkingId) => {
  return fetch(`/api/v1/networking/${networkingId}/confirm-participation`, {
    method: 'POST'
  });
};

// Rejoindre session en temps réel
const joinSession = async (networkingId) => {
  return fetch(`/api/v1/networking/${networkingId}/join-session`, {
    method: 'POST'
  });
};
```

### **3. Tracking en Temps Réel**
```javascript
// Récupérer les participants actifs
const getActiveParticipants = async (networkingId) => {
  const response = await fetch(`/api/v1/networking/${networkingId}/participants/active`);
  return response.json();
};

// Interface temps réel
const updateActiveParticipants = () => {
  setInterval(async () => {
    const active = await getActiveParticipants(networkingId);
    updateParticipantsList(active.active_participants);
  }, 5000); // Mise à jour toutes les 5 secondes
};
```

## 🎭 **Rôles et Permissions**

### **Organizer (Organisateur)**
- Peut ajouter/supprimer des participants
- Peut modifier les rôles
- Accès complet à la gestion

### **Moderator (Modérateur)**
- Peut ajouter des participants
- Peut modérer les discussions
- Accès aux statistiques

### **Speaker (Intervenant)**
- Participant avec privilèges de présentation
- Peut partager des ressources

### **Participant**
- Participation standard
- Peut confirmer/décliner

## 📊 **Statuts de Participation**

1. **invited** - Invité (initial)
2. **confirmed** - Confirmé par l'utilisateur
3. **declined** - Décliné
4. **attended** - A participé (marqué automatiquement)
5. **no_show** - Absent sans justification

## 🔄 **Workflow Complet**

### **Organisateur crée une session:**
```php
1. POST /api/v1/networking (créer session)
2. POST /api/v1/networking/{id}/participants (ajouter participants)
3. Participants reçoivent invitation
```

### **Participants répondent:**
```php
1. GET /api/v1/networking/my/pending (voir invitations)
2. POST /api/v1/networking/{id}/confirm-participation (confirmer)
   OU
   POST /api/v1/networking/{id}/decline-participation (décliner)
```

### **Session en cours:**
```php
1. POST /api/v1/networking/{id}/join-session (rejoindre)
2. GET /api/v1/networking/{id}/participants/active (voir actifs)
3. POST /api/v1/networking/{id}/leave-session (quitter)
```

## 📱 **Interface Frontend Suggérée**

### **Page de Gestion des Participants**
- Liste des participants avec rôles
- Boutons d'action (ajouter, modifier, supprimer)
- Statuts visuels (confirmé, en ligne, etc.)

### **Widget Participants Actifs**
- Avatars des participants en ligne
- Indicateur de statut temps réel
- Compteur de participants

### **Panel d'Invitation**
- Recherche d'utilisateurs
- Sélection de rôles
- Envoi d'invitations groupées

## 🚀 **Prêt à Utiliser!**

La fonctionnalité `networking_participants` est maintenant complète avec:
- ✅ Gestion des rôles et permissions
- ✅ Tracking en temps réel
- ✅ Statuts de participation
- ✅ API complète
- ✅ Interface de gestion

**Migration déjà exécutée!** Vous pouvez maintenant utiliser toutes les fonctionnalités de participants. 🎉
