# Guide de Contribution

Merci de votre intérêt pour contribuer au projet COOP-CA AMIFOND ! Ce guide vous aidera à contribuer efficacement.

## 🚀 Démarrage Rapide

1. **Fork** le projet
2. **Clone** votre fork localement
3. **Configurez** l'environnement de développement
4. **Créez** une branche pour votre fonctionnalité
5. **Développez** et testez vos modifications
6. **Soumettez** une pull request

## 📋 Prérequis

- Python 3.11+
- Django 4.2+
- Git
- Connaissance de base en Django et DRF

## 🛠️ Configuration de l'Environnement

```bash
# 1. Cloner le projet
git clone https://github.com/tawounfouet/coopca-amifond-app.git
cd coopca-amifond-app

# 2. Configuration automatique
make setup

# 3. Activer l'environnement virtuel
source .venv/bin/activate

# 4. Démarrer le serveur
make dev
```

## 🏗️ Processus de Développement

### 1. Créer une Branche

```bash
git checkout -b feature/nouvelle-fonctionnalite
# ou
git checkout -b fix/correction-bug
# ou
git checkout -b docs/mise-a-jour-documentation
```

### 2. Conventions de Nommage

**Branches :**

- `feature/nom-fonctionnalite` : Nouvelles fonctionnalités
- `fix/nom-bug` : Corrections de bugs
- `docs/nom-documentation` : Mises à jour documentation
- `refactor/nom-refactoring` : Refactoring du code
- `test/nom-test` : Ajout/modification de tests

**Commits :**
Utilisez les conventions suivantes avec des emojis :

```bash
✨ feat: Ajouter nouvelle fonctionnalité de gestion des prêts
🐛 fix: Corriger l'erreur de validation des formulaires
📚 docs: Mettre à jour la documentation API
🔧 refactor: Réorganiser le module d'authentification
🧪 test: Ajouter tests pour le module de reporting
🎨 style: Améliorer le formatage du code
🚀 perf: Optimiser les requêtes de base de données
```

### 3. Standards de Code

**Python/Django :**

- Suivre PEP 8
- Utiliser Black pour le formatage
- Maximum 88 caractères par ligne
- Docstrings obligatoires pour les fonctions publiques

**Validation automatique :**

```bash
make lint          # Vérification qualité code
make format        # Formatage automatique
make type-check    # Vérification types
make test          # Lancement tests
```

## 🧪 Tests

### Exécution des Tests

```bash
make test              # Tous les tests
make test-app APP=users # Tests d'une app spécifique
make test-coverage     # Tests avec couverture
```

### Écriture des Tests

- **Tests unitaires** : Pour chaque fonction/méthode
- **Tests d'intégration** : Pour les workflows complets
- **Tests API** : Pour tous les endpoints
- **Coverage minimum** : 80% requis

Exemple de test :

```python
from django.test import TestCase
from rest_framework.test import APITestCase
from apps.users.models import User

class UserModelTest(TestCase):
    """Tests pour le modèle User"""

    def setUp(self):
        self.user = User.objects.create_user(
            email="test@amifond.cm",
            password="testpass123"
        )

    def test_user_creation(self):
        """Test de création d'utilisateur"""
        self.assertEqual(self.user.email, "test@amifond.cm")
        self.assertTrue(self.user.is_active)
```

## 📚 Documentation

### Mise à Jour de la Documentation

- **README.md** : Pour les changements majeurs
- **API Documentation** : Pour les nouveaux endpoints
- **Docstrings** : Pour toutes les fonctions publiques
- **CHANGELOG.md** : Pour toutes les modifications

### Format des Docstrings

```python
def create_user(email: str, password: str) -> User:
    """Créer un nouvel utilisateur.

    Args:
        email (str): Adresse email de l'utilisateur
        password (str): Mot de passe en texte brut

    Returns:
        User: Instance de l'utilisateur créé

    Raises:
        ValidationError: Si l'email est invalide
    """
    pass
```

## 🔄 Processus de Pull Request

### 1. Avant de Soumettre

```bash
# Vérifications obligatoires
make health-check      # Diagnostic complet
make validate-sessions # Validation configuration
make test             # Tests complets
make lint             # Qualité code
```

### 2. Template de PR

```markdown
## 📋 Description

Brève description des modifications apportées.

## 🎯 Type de Changement

- [ ] 🐛 Correction de bug
- [ ] ✨ Nouvelle fonctionnalité
- [ ] 💥 Changement cassant
- [ ] 📚 Documentation
- [ ] 🧪 Tests

## 🧪 Tests

- [ ] Tests existants passent
- [ ] Nouveaux tests ajoutés
- [ ] Coverage maintenue >80%

## 📋 Checklist

- [ ] Code suit les standards du projet
- [ ] Documentation mise à jour
- [ ] CHANGELOG.md mis à jour
- [ ] Tests ajoutés/modifiés
- [ ] Vérifications `make health-check` réussies
```

### 3. Critères d'Acceptation

- ✅ Tous les tests passent
- ✅ Coverage maintenue
- ✅ Code review approuvée
- ✅ Documentation à jour
- ✅ Standards de code respectés
- ✅ Pas de régression

## 🚫 Règles Importantes

### ❌ À Éviter

- Commits directement sur `main`
- Code non testé
- Modifications sans documentation
- Violations des standards de code
- Fonctionnalités non demandées

### ✅ Bonnes Pratiques

- Petites PRs focalisées
- Messages de commit descriptifs
- Tests complets
- Documentation à jour
- Code review constructive

## 🏷️ Types d'Issues

### 🐛 Rapports de Bugs

```markdown
**Description du Bug**
Description claire et concise du problème.

**Étapes pour Reproduire**

1. Aller à '...'
2. Cliquer sur '...'
3. Voir l'erreur

**Comportement Attendu**
Description du comportement attendu.

**Captures d'Écran**
Si applicable, ajoutez des captures d'écran.

**Environnement**

- OS: [e.g. macOS 14.5]
- Python: [e.g. 3.11.13]
- Django: [e.g. 4.2.23]
```

### ✨ Demandes de Fonctionnalités

```markdown
**Problème à Résoudre**
Description claire du problème.

**Solution Proposée**
Description de la solution souhaitée.

**Alternatives Considérées**
Autres solutions envisagées.

**Contexte Additionnel**
Informations supplémentaires pertinentes.
```

## 💬 Communication

- **GitHub Issues** : Pour les bugs et fonctionnalités
- **GitHub Discussions** : Pour les questions générales
- **Pull Requests** : Pour les reviews de code
- **Email** : contact@amifond.cm pour questions privées

## 🎉 Reconnaissance

Tous les contributeurs seront reconnus dans :

- README.md
- CHANGELOG.md
- Section Contributors GitHub

Merci de contribuer au projet COOP-CA AMIFOND ! 🚀
