# 🤝 Guide de Contribution - AfterWork Merci de votre intérêt pour contribuer au projet AfterWork ! Ce document vous guidera à travers le processus de contribution. ## 📋 Table des Matières - [Code de Conduite](#code-de-conduite) - [Comment Contribuer](#comment-contribuer) - [Standards de Code](#standards-de-code) - [Processus de Pull Request](#processus-de-pull-request) - [Conventions de Commit](#conventions-de-commit) - [Architecture du Projet](#architecture-du-projet) --- ## 📜 Code de Conduite En participant à ce projet, vous acceptez de respecter notre code de conduite : - Être respectueux envers tous les contributeurs - Accepter les critiques constructives - Se concentrer sur ce qui est le mieux pour la communauté - Faire preuve d'empathie envers les autres membres --- ## 🚀 Comment Contribuer ### 1. Fork et Clone ```bash # Fork le repository sur GitHub # Puis clone votre fork git clone https://github.com/votre-username/afterwork.git cd afterwork ``` ### 2. Créer une Branche ```bash # Créer une branche pour votre feature/fix git checkout -b feature/nom-de-votre-feature # Ou pour un bugfix git checkout -b fix/nom-du-bug ``` ### 3. Développer - Écrivez du code propre et testé - Suivez les standards de code du projet - Ajoutez des tests pour les nouvelles fonctionnalités - Documentez votre code ### 4. Tester ```bash # Lancer les tests flutter test # Vérifier le linting flutter analyze # Formater le code dart format . ``` ### 5. Commit ```bash # Ajouter vos changements git add . # Commit avec un message descriptif git commit -m "feat: ajouter fonctionnalité X" ``` ### 6. Push et Pull Request ```bash # Push vers votre fork git push origin feature/nom-de-votre-feature # Créer une Pull Request sur GitHub ``` --- ## 💻 Standards de Code ### Formatage - **Indentation** : 2 espaces - **Ligne max** : 80 caractères (flexible pour la lisibilité) - **Trailing commas** : Obligatoires pour les listes multi-lignes ### Conventions de Nommage ```dart // Classes : PascalCase class UserProfile {} // Fichiers : snake_case // user_profile.dart // Variables et fonctions : camelCase String userName = 'John'; void getUserById() {} // Constantes : lowerCamelCase const String apiBaseUrl = 'https://api.example.com'; // Constantes privées : _lowerCamelCase const String _privateKey = 'secret'; ``` ### Widgets ```dart // Toujours utiliser const pour les widgets immuables const Text('Hello World'); // Préférer les constructeurs const class MyWidget extends StatelessWidget { const MyWidget({super.key}); @override Widget build(BuildContext context) { return const Placeholder(); } } // Trailing comma pour meilleure lisibilité return Container( padding: const EdgeInsets.all(16), child: Column( children: [ const Text('Title'), const SizedBox(height: 8), const Text('Subtitle'), ], ), ); ``` ### Documentation ```dart /// Récupère un utilisateur par son ID. /// /// [userId] L'identifiant unique de l'utilisateur. /// /// Retourne un [User] ou null si non trouvé. /// /// Throws [ServerException] si l'API est inaccessible. Future getUserById(String userId) async { // Implementation } ``` ### Gestion des Erreurs ```dart // Utiliser try-catch pour les opérations à risque try { final result = await apiCall(); return Right(result); } on ServerException catch (e) { return Left(ServerFailure(e.message)); } catch (e) { return Left(UnexpectedFailure()); } ``` --- ## 🔄 Processus de Pull Request ### Checklist avant PR - [ ] Le code compile sans erreur - [ ] Tous les tests passent (`flutter test`) - [ ] Le linting est propre (`flutter analyze`) - [ ] Le code est formaté (`dart format .`) - [ ] Les nouvelles fonctionnalités ont des tests - [ ] La documentation est à jour - [ ] Les commits suivent les conventions ### Template de PR ```markdown ## Description Brève description des changements ## Type de changement - [ ] Bug fix - [ ] Nouvelle fonctionnalité - [ ] Breaking change - [ ] Documentation ## Tests - [ ] Tests unitaires ajoutés/mis à jour - [ ] Tests d'intégration ajoutés/mis à jour - [ ] Tests manuels effectués ## Captures d'écran (si applicable) Ajoutez des captures d'écran ici ## Checklist - [ ] Mon code suit les standards du projet - [ ] J'ai effectué une auto-review - [ ] J'ai commenté les parties complexes - [ ] J'ai mis à jour la documentation - [ ] Mes changements ne génèrent pas de warnings - [ ] J'ai ajouté des tests - [ ] Tous les tests passent ``` --- ## 📝 Conventions de Commit Nous utilisons les [Conventional Commits](https://www.conventionalcommits.org/) : ### Format ``` ():