# đŸ€ Guide de contribution - WalletTracker Merci de votre intĂ©rĂȘt pour contribuer Ă  WalletTracker ! Ce guide vous aidera Ă  dĂ©marrer. ## 📋 Table des matiĂšres - [Code de conduite](#code-de-conduite) - [Comment contribuer](#comment-contribuer) - [Structure du projet](#structure-du-projet) - [Standards de code](#standards-de-code) - [Process de dĂ©veloppement](#process-de-dĂ©veloppement) - [Soumettre une Pull Request](#soumettre-une-pull-request) ## Code de conduite En participant Ă  ce projet, vous acceptez de respecter notre code de conduite : - Soyez respectueux et inclusif - Acceptez les critiques constructives - Concentrez-vous sur ce qui est le mieux pour la communautĂ© - Faites preuve d'empathie envers les autres membres ## Comment contribuer ### Signaler un bug 1. VĂ©rifiez que le bug n'a pas dĂ©jĂ  Ă©tĂ© signalĂ© dans les [Issues](https://github.com/yourusername/wallettracker/issues) 2. CrĂ©ez une nouvelle issue avec le template "Bug Report" 3. Incluez : - Description claire du problĂšme - Steps to reproduce - Comportement attendu vs actuel - Screenshots si applicable - Version de l'app et de l'OS ### Proposer une fonctionnalitĂ© 1. VĂ©rifiez que la fonctionnalitĂ© n'a pas dĂ©jĂ  Ă©tĂ© proposĂ©e 2. CrĂ©ez une issue avec le template "Feature Request" 3. Expliquez : - Le problĂšme que cela rĂ©sout - La solution proposĂ©e - Des alternatives considĂ©rĂ©es - Des mockups si applicable ### Contribuer au code 1. Fork le projet 2. CrĂ©ez une branche pour votre fonctionnalitĂ© (`git checkout -b feature/AmazingFeature`) 3. Committez vos changements (`git commit -m 'Add some AmazingFeature'`) 4. Push vers la branche (`git push origin feature/AmazingFeature`) 5. Ouvrez une Pull Request ## Structure du projet ``` WalletTracker/ ├── src/ │ ├── components/ # Composants rĂ©utilisables │ ├── config/ # Configuration (Firebase, etc.) │ ├── hooks/ # Custom hooks │ ├── navigation/ # Configuration de navigation │ ├── screens/ # Écrans de l'application │ ├── services/ # Services (API, Firebase) │ ├── types/ # Types TypeScript │ └── utils/ # Fonctions utilitaires ├── assets/ # Images, fonts, etc. └── App.tsx # Point d'entrĂ©e ``` ## Standards de code ### TypeScript - Utilisez TypeScript strict - DĂ©finissez des types explicites - Évitez `any`, utilisez `unknown` si nĂ©cessaire - Utilisez des interfaces pour les objets ```typescript // ✅ Bon interface User { id: string; email: string; displayName?: string; } // ❌ Mauvais const user: any = { ... }; ``` ### Naming Conventions - **Composants** : PascalCase (`LoginScreen`, `Button`) - **Fonctions** : camelCase (`formatCurrency`, `getUserData`) - **Constantes** : UPPER_SNAKE_CASE (`API_URL`, `MAX_RETRIES`) - **Fichiers** : MĂȘme nom que le composant principal ### Composants React - Utilisez des functional components avec hooks - DĂ©structurez les props - Utilisez TypeScript pour typer les props ```typescript // ✅ Bon interface ButtonProps { title: string; onPress: () => void; variant?: 'primary' | 'secondary'; } export const Button: React.FC = ({ title, onPress, variant = 'primary' }) => { return ( {title} ); }; ``` ### Styles - Utilisez StyleSheet.create() - Groupez les styles par composant - Utilisez les constantes pour les couleurs et espacements ```typescript import { COLORS, SPACING } from '../utils/constants'; const styles = StyleSheet.create({ container: { padding: SPACING.lg, backgroundColor: COLORS.white } }); ``` ### Imports Organisez les imports dans cet ordre : 1. React et React Native 2. BibliothĂšques tierces 3. Composants locaux 4. Services et utils 5. Types 6. Styles ```typescript import React, { useState, useEffect } from 'react'; import { View, Text } from 'react-native'; import { useNavigation } from '@react-navigation/native'; import { Button } from '../components/Button'; import { authService } from '../services/authService'; import { formatDate } from '../utils/helpers'; import { User } from '../types'; import styles from './styles'; ``` ### Commentaires - Commentez le "pourquoi", pas le "quoi" - Utilisez JSDoc pour les fonctions publiques - Évitez les commentaires Ă©vidents ```typescript /** * Calcule la prochaine date de paiement basĂ©e sur la frĂ©quence * @param currentDate - Date actuelle du paiement * @param frequency - FrĂ©quence de l'abonnement * @returns La prochaine date de paiement */ export const calculateNextPaymentDate = ( currentDate: Date, frequency: SubscriptionFrequency ): Date => { // ... }; ``` ## Process de dĂ©veloppement ### 1. Setup ```bash git clone https://github.com/yourusername/wallettracker.git cd wallettracker npm install ``` ### 2. CrĂ©er une branche ```bash git checkout -b feature/nom-de-la-fonctionnalite ``` Types de branches : - `feature/` : Nouvelle fonctionnalitĂ© - `fix/` : Correction de bug - `refactor/` : Refactoring - `docs/` : Documentation - `test/` : Tests ### 3. DĂ©velopper - Écrivez du code propre et testĂ© - Suivez les standards de code - Testez sur iOS et Android - VĂ©rifiez qu'il n'y a pas d'erreurs TypeScript ### 4. Tester ```bash # Lancer l'app npm start # VĂ©rifier TypeScript npx tsc --noEmit # Linter (si configurĂ©) npm run lint ``` ### 5. Committer Utilisez des messages de commit clairs : ```bash git commit -m "feat: add dark mode support" git commit -m "fix: resolve crash on transaction deletion" git commit -m "docs: update README with new features" ``` Format des commits : - `feat:` Nouvelle fonctionnalitĂ© - `fix:` Correction de bug - `docs:` Documentation - `style:` Formatage, pas de changement de code - `refactor:` Refactoring - `test:` Ajout de tests - `chore:` Maintenance ## Soumettre une Pull Request ### Checklist avant soumission - [ ] Le code compile sans erreurs - [ ] Les tests passent - [ ] Le code suit les standards du projet - [ ] La documentation est Ă  jour - [ ] Les commits sont bien formatĂ©s - [ ] La PR a une description claire ### Template de PR ```markdown ## Description BrĂšve description des changements ## Type de changement - [ ] Bug fix - [ ] Nouvelle fonctionnalitĂ© - [ ] Breaking change - [ ] Documentation ## Comment tester 1. Étape 1 2. Étape 2 3. RĂ©sultat attendu ## Screenshots (si applicable) [Ajouter des screenshots] ## Checklist - [ ] Code testĂ© sur iOS - [ ] Code testĂ© sur Android - [ ] Documentation mise Ă  jour - [ ] Pas de console.log ``` ### Review process 1. Un mainteneur reviewera votre PR 2. Des changements peuvent ĂȘtre demandĂ©s 3. Une fois approuvĂ©e, la PR sera mergĂ©e 4. Votre contribution sera ajoutĂ©e au CHANGELOG ## 🎹 Design Guidelines ### UI/UX - Suivez les guidelines Material Design (Android) et Human Interface (iOS) - Utilisez des animations fluides - Assurez l'accessibilitĂ© (contraste, taille de texte) - Testez sur diffĂ©rentes tailles d'Ă©cran ### Couleurs Utilisez les couleurs dĂ©finies dans `src/utils/constants.ts` ### Espacements Utilisez les espacements standardisĂ©s (8, 12, 16, 24, 32px) ## đŸ§Ș Tests ### Tests manuels Utilisez le guide dans `TESTING.md` ### Tests automatisĂ©s (Ă  venir) ```bash npm test ``` ## 📝 Documentation - Mettez Ă  jour le README si nĂ©cessaire - Documentez les nouvelles fonctionnalitĂ©s - Ajoutez des exemples d'utilisation - Mettez Ă  jour le CHANGELOG ## 🐛 Debugging ### Outils utiles - React Native Debugger - Flipper - Reactotron - Firebase Console ### Logs ```typescript // DĂ©veloppement console.log('Debug info'); // Production // Utilisez un service de logging (Sentry, etc.) ``` ## 💡 Bonnes pratiques ### Performance - Utilisez `React.memo` pour les composants lourds - Évitez les re-renders inutiles - Optimisez les images - Utilisez FlatList pour les longues listes ### SĂ©curitĂ© - Ne hardcodez jamais de secrets - Validez toutes les entrĂ©es utilisateur - Utilisez HTTPS uniquement - Suivez les rĂšgles de sĂ©curitĂ© Firebase ### AccessibilitĂ© - Ajoutez des labels accessibles - Testez avec VoiceOver/TalkBack - Assurez un contraste suffisant - Supportez les grandes tailles de texte ## 🆘 Besoin d'aide ? - Consultez la [documentation](./README.md) - Posez vos questions dans les [Discussions](https://github.com/yourusername/wallettracker/discussions) - Rejoignez notre [Discord](https://discord.gg/wallettracker) (si applicable) ## 🙏 Remerciements Merci Ă  tous les contributeurs qui rendent ce projet possible ! --- **Happy coding! 🚀**