# 📊 Script de Population - t_user_competences

## 🎯 Objectif
Créer des données de test réalistes pour tester **2 types de suggestions de relations** :
1. **Compétences similaires** : Collaborateurs potentiels (même domaine)
2. **Compétences complémentaires** : Aide mutuelle (domaines différents)

---

## 📋 Structure des données

### **CAS 1 : COMPÉTENCES SIMILAIRES** (Collaboration entre pairs)

#### **Groupe 1 : Auteurs** (Users 1, 2, 3)
**Compétences communes :**
- Roman (compétence #1)
- Science-Fiction (compétence #9)
- Poésie (compétence #3)

**Résultat attendu :**
- User 1 ↔ User 2 : 2 compétences communes (Roman, SF)
- User 1 ↔ User 3 : 2 compétences communes (Roman, Poésie)
- User 2 ↔ User 3 : 1 compétence commune (Roman)

**Use case :** Groupe d'écriture, échange de bonnes pratiques, bêta-lecture mutuelle

---

#### **Groupe 2 : Éditeurs** (Users 4, 5)
**Compétences communes :**
- Correction orthographique (#15)
- Relecture critique (#17)
- Révision manuscrits (#18)

**Résultat attendu :**
- User 4 ↔ User 5 : 3 compétences communes
- Niveau différent (senior/junior)

**Use case :** Mentorat, collaboration sur gros projets, échange de clients

---

#### **Groupe 3 : Designers** (Users 6, 7)
**Compétences communes :**
- Illustration couverture (#34)
- Mise en page PAO (#35)

**Résultat attendu :**
- User 6 ↔ User 7 : 2 compétences communes
- Expert vs Junior

**Use case :** Collaboration sur projets, partage de templates, freelance groupé

---

### **CAS 2 : COMPÉTENCES COMPLÉMENTAIRES** (Recherche d'aide)

#### **Scénario A : Auteur cherche Éditeur**
| User | Profil | Compétences | Besoin |
|------|--------|-------------|--------|
| **8** | Auteur débutant | Roman niveau 2 | Correction professionnelle |
| **4, 5** | Éditeurs | Correction niveau 4-5 | Clients auteurs |

**Suggestion :** User 8 → Users 4, 5 (compétences complémentaires)

---

#### **Scénario B : Auteur cherche Designer**
| User | Profil | Compétences | Besoin |
|------|--------|-------------|--------|
| **9** | Auteur confirmé | Polar/Thriller niveau 5 | Couverture professionnelle |
| **6, 7** | Designers | Illustration niveau 4-5 | Projets de couvertures |

**Suggestion :** User 9 → Users 6, 7

---

#### **Scénario C : Auteur cherche Marketeur**
| User | Profil | Compétences | Besoin |
|------|--------|-------------|--------|
| **11** | Auteur best-seller | Écriture niveau 5 | Promotion/visibilité |
| **12** | Marketeur | CM, BookTube niveau 5 | Auteurs à promouvoir |

**Suggestion bidirectionnelle :** User 11 ↔ User 12

---

#### **Scénario D : Éditeur cherche Traducteur**
| User | Profil | Compétences | Besoin |
|------|--------|-------------|--------|
| **13** | Éditeur international | Editing niveau 5 | Traduction EN/ES |
| **10, 14** | Traducteurs | Traduction niveau 5 | Projets éditoriaux |

**Suggestion :** User 13 → Users 10, 14

---

#### **Scénario E : Auteur cherche Mentor**
| User | Profil | Compétences | Besoin |
|------|--------|-------------|--------|
| **15** | Auteur débutant | Écriture niveau 1 | Formation/mentorat |
| **16** | Formateur | Ateliers niveau 5 | Étudiants à former |

**Suggestion :** User 15 → User 16 (mentoring)

---

#### **Scénario F : Auteur cherche Développeur Web**
| User | Profil | Compétences | Besoin |
|------|--------|-------------|--------|
| **17** | Auteur indépendant | Roman niveau 4 | Site web auteur |
| **18** | Développeur | Web, SEO niveau 5 | Clients auteurs |

**Suggestion :** User 17 → User 18

---

#### **Scénario G : Auteur cherche Juriste**
| User | Profil | Compétences | Besoin |
|------|--------|-------------|--------|
| **19** | Auteur multi-publié | SF niveau 4 | Contrats d'édition |
| **20** | Juriste | Droit auteur niveau 5 | Clients auteurs |

**Suggestion :** User 19 → User 20 (conseil juridique)

---

#### **Scénario H : Profils Hybrides**
| User | Profil | Compétences | Suggestions |
|------|--------|-------------|-------------|
| **21** | Auteur-Marketeur | Écriture + CM | Similaires ET complémentaires |
| **22** | Éditeur-Formateur | Correction + Ateliers | Éditeurs ET auteurs débutants |

**Résultat :** Matching complexe avec plusieurs types de suggestions

---

#### **Scénario I : Compétences Rares**
| User | Profil | Compétences | Rareté |
|------|--------|-------------|--------|
| **23** | Expert IA | IA écriture niveau 5 | Unique |
| **24** | Auteur curieux | Roman niveau 3 | Cherche IA |
| **25** | Développeur RA | Réalité augmentée niveau 5 | Unique |

**Suggestion :** Matching sur compétences rares très demandées

---

## 🔍 Requêtes de test incluses

### **1. Statistiques générales**
```sql
SELECT COUNT(*) FROM t_user_competences;
-- Résultat attendu : ~100 associations
```

### **2. Compétences par utilisateur**
```sql
SELECT user_id, COUNT(*) as nb_competences, AVG(niveau) as niveau_moyen
FROM t_user_competences
GROUP BY user_id;
```

### **3. Matching similaire**
Trouve les paires d'utilisateurs avec 2+ compétences communes
```sql
-- Résultat attendu :
-- User 1 ↔ User 2 : 2 compétences
-- User 4 ↔ User 5 : 3 compétences
-- User 6 ↔ User 7 : 2 compétences
```

### **4. Matching complémentaire**
Trouve les utilisateurs avec compétences dans catégories différentes
```sql
-- Résultat attendu :
-- User 8 (Auteur) → User 4 (Éditeur)
-- User 9 (Auteur) → User 6 (Designer)
-- User 15 (Débutant) → User 16 (Mentor)
```

---

## 📊 Répartition des données

| Type de profil | Nombre d'utilisateurs | Compétences moyennes |
|----------------|----------------------|---------------------|
| Auteurs | 8 | 3-4 |
| Éditeurs | 3 | 4-5 |
| Designers | 2 | 3-4 |
| Traducteurs | 2 | 3-4 |
| Marketeurs | 1 | 5 |
| Formateurs | 1 | 4 |
| Développeurs | 2 | 4 |
| Juristes | 1 | 4 |
| Hybrides | 2 | 3-4 |
| Spécialistes | 3 | 4-5 |

**Total : 25 utilisateurs avec profils variés**

---

## 🎯 Algorithmes de suggestion à implémenter

### **Type 1 : Compétences similaires**
```sql
-- Trouver utilisateurs avec compétences communes
SELECT 
    u2.user_ID,
    COUNT(DISTINCT uc2.competence_id) as common_competences
FROM t_user_competences uc1
JOIN t_user_competences uc2 ON uc1.competence_id = uc2.competence_id
JOIN t_users u2 ON uc2.user_id = u2.user_ID
WHERE uc1.user_id = :current_user_id
  AND uc2.user_id != :current_user_id
  AND u2.user_actif = 1
GROUP BY u2.user_ID
HAVING common_competences >= 2
ORDER BY common_competences DESC
LIMIT 10;
```

### **Type 2 : Compétences complémentaires**
```sql
-- Trouver utilisateurs avec compétences dans catégories différentes
-- Mais utiles pour le profil de l'utilisateur
SELECT DISTINCT
    u2.user_ID,
    c2.competence_name,
    cc2.category_name,
    uc2.niveau
FROM t_user_competences uc1
JOIN t_competences c1 ON uc1.competence_id = c1.competence_id
JOIN t_competence_categories cc1 ON c1.category_id = cc1.category_ID
JOIN t_competences c2 ON c1.category_id != c2.category_id
JOIN t_user_competences uc2 ON uc2.competence_id = c2.competence_id
JOIN t_competence_categories cc2 ON c2.category_id = cc2.category_ID
JOIN t_users u2 ON uc2.user_id = u2.user_ID
WHERE uc1.user_id = :current_user_id
  AND uc2.user_id != :current_user_id
  AND uc2.niveau >= 4
  AND u2.user_actif = 1
ORDER BY uc2.niveau DESC
LIMIT 10;
```

### **Scoring pondéré**
```sql
-- Combiner les deux types avec scoring
SELECT 
    u.user_ID,
    u.user_name,
    -- Score similaire (40%)
    (COUNT(DISTINCT common.competence_id) * 0.4) +
    -- Score complémentaire (40%)
    (COUNT(DISTINCT comp.competence_id) * 0.4) +
    -- Score niveau (20%)
    (AVG(uc.niveau) * 0.2) as match_score
FROM t_users u
LEFT JOIN (/* compétences communes */) common
LEFT JOIN (/* compétences complémentaires */) comp
JOIN t_user_competences uc ON u.user_ID = uc.user_id
WHERE u.user_ID != :current_user_id
GROUP BY u.user_ID
ORDER BY match_score DESC
LIMIT 20;
```

---

## 🚀 Utilisation

### **1. Exécuter le script**
```bash
mysql -u root -p livreconnect < populate_user_competences.sql
```

### **2. Vérifier les données**
Les requêtes de vérification sont automatiquement exécutées à la fin du script.

### **3. Tester les suggestions**
Utiliser les requêtes d'exemple ci-dessus avec différents user_id.

---

## 🎨 Cas d'usage dans l'interface

### **Page "Réseau" - Onglet "Suggestions"**

**Section 1 : Collaborateurs potentiels**
> "Ces utilisateurs ont des compétences similaires aux vôtres"
- User 1 voit Users 2, 3 (autres auteurs)
- User 4 voit User 5 (autres éditeurs)

**Section 2 : Trouvez de l'aide**
> "Ces utilisateurs peuvent vous aider"
- User 8 (débutant) voit Users 4, 5 (éditeurs)
- User 15 voit User 16 (mentor)

**Section 3 : Offrez vos services**
> "Ces utilisateurs cherchent vos compétences"
- User 4 (éditeur) voit Users 8, 15 (auteurs débutants)
- User 16 (mentor) voit User 15 (cherchant formation)

---

## ✅ Points clés

- ✅ **25 utilisateurs** avec profils variés
- ✅ **~100 associations** user-compétences
- ✅ **8 scénarios** de matching complémentaire
- ✅ **3 groupes** de matching similaire
- ✅ **Niveaux réalistes** (1 à 5)
- ✅ **Descriptions personnalisées** pour réalisme
- ✅ **Années d'expérience** cohérentes
- ✅ **Requêtes de test** incluses

---

**Le script est prêt à être utilisé pour développer et tester les fonctionnalités de suggestions de relations ! 🚀**
