# 🎉 AfterWork - Application Mobile de RĂ©seau Social d'ÉvĂ©nements
![Flutter](https://img.shields.io/badge/Flutter-3.5.1-02569B?logo=flutter) ![Dart](https://img.shields.io/badge/Dart-3.5.1-0175C2?logo=dart) ![License](https://img.shields.io/badge/License-Private-red) ![Status](https://img.shields.io/badge/Status-En%20Développement-yellow) Une application mobile multiplateforme permettant de créer, gérer et participer à des événements sociaux avec vos amis.
--- ## 📋 Table des MatiĂšres - [À propos](#-Ă -propos) - [FonctionnalitĂ©s](#-fonctionnalitĂ©s) - [Architecture](#-architecture) - [Technologies](#-technologies) - [Installation](#-installation) - [Configuration](#-configuration) - [Structure du Projet](#-structure-du-projet) - [DĂ©veloppement](#-dĂ©veloppement) - [Tests](#-tests) - [DĂ©ploiement](#-dĂ©ploiement) - [Contribution](#-contribution) - [Documentation API](#-documentation-api) --- ## 🎯 À propos **AfterWork** est une plateforme sociale mobile complĂšte qui permet aux utilisateurs de : - Organiser et dĂ©couvrir des Ă©vĂ©nements sociaux - Se connecter avec des amis et Ă©tendre leur rĂ©seau - Partager des moments via des stories et posts - GĂ©rer leurs participations et rĂ©servations - Explorer des Ă©tablissements et lieux d'intĂ©rĂȘt L'application est construite avec Flutter pour assurer une expĂ©rience native sur toutes les plateformes (iOS, Android, Web, Windows, Linux, macOS). --- ## ✹ FonctionnalitĂ©s ### đŸŽȘ Gestion des ÉvĂ©nements - ✅ CrĂ©ation d'Ă©vĂ©nements avec images, catĂ©gories et localisation - ✅ Visualisation des Ă©vĂ©nements personnels et des amis - ✅ SystĂšme de participation/dĂ©sistement - ✅ Fermeture et rĂ©ouverture d'Ă©vĂ©nements - ✅ RĂ©actions, commentaires et partages - ✅ Filtrage par catĂ©gorie et recherche avancĂ©e ### đŸ‘„ RĂ©seau Social - ✅ SystĂšme d'amis complet (envoi, acceptation, blocage) - ✅ Posts sociaux avec images - ✅ Stories avec support vidĂ©o - ✅ Notifications en temps rĂ©el - ✅ Profils utilisateurs enrichis avec statistiques ### 📍 Localisation - ✅ IntĂ©gration Google Maps - ✅ SĂ©lecteur de localisation intuitif - ✅ Exploration d'Ă©tablissements ### 🎹 Personnalisation - ✅ ThĂšme clair/sombre avec persistance - ✅ Images de profil personnalisĂ©es - ✅ ParamĂštres utilisateur avancĂ©s --- ## 🏗 Architecture Le projet suit les principes de **Clean Architecture** pour assurer la maintenabilitĂ©, la testabilitĂ© et la scalabilitĂ© : ``` lib/ ├── core/ # Noyau commun de l'application │ ├── constants/ # Constantes (couleurs, URLs, config) │ ├── errors/ # Gestion des erreurs et exceptions │ ├── theme/ # ThĂšmes et styles │ └── utils/ # Utilitaires rĂ©utilisables │ ├── domain/ # Couche mĂ©tier (logique pure) │ ├── entities/ # EntitĂ©s mĂ©tier (User, Event, Friend) │ ├── repositories/ # Interfaces des repositories │ └── usecases/ # Cas d'utilisation mĂ©tier │ ├── data/ # Couche de donnĂ©es │ ├── datasources/ # Sources de donnĂ©es (API, cache) │ ├── models/ # DTOs et modĂšles de donnĂ©es │ ├── repositories/ # ImplĂ©mentations des repositories │ ├── services/ # Services (storage, sĂ©curitĂ©) │ └── providers/ # Providers pour l'Ă©tat global │ └── presentation/ # Couche prĂ©sentation (UI) ├── screens/ # Écrans de l'application ├── widgets/ # Widgets rĂ©utilisables ├── state_management/ # BLoC et gestion d'Ă©tat └── routes/ # Gestion de la navigation ``` ### Principes AppliquĂ©s - **Separation of Concerns** : SĂ©paration claire des responsabilitĂ©s - **Dependency Inversion** : Les couches de haut niveau ne dĂ©pendent pas des dĂ©tails - **Single Responsibility** : Chaque classe a une seule raison de changer - **Interface Segregation** : Interfaces spĂ©cifiques plutĂŽt que gĂ©nĂ©rales --- ## 🛠 Technologies ### Framework & Langage - **Flutter** 3.5.1+ - Framework UI multiplateforme - **Dart** 3.5.1+ - Langage de programmation ### Gestion d'État - **flutter_bloc** 8.1.6 - Pattern BLoC pour la gestion d'Ă©tat - **provider** 6.1.2 - Gestion d'Ă©tat simple - **equatable** 2.0.5 - Comparaison d'objets facilitĂ©e ### RĂ©seau & API - **http** 1.2.1 - Client HTTP pour les requĂȘtes API ### Stockage & Persistance - **shared_preferences** 2.2.3 - PrĂ©fĂ©rences utilisateur - **flutter_secure_storage** 9.2.2 - Stockage sĂ©curisĂ© (credentials) - **path_provider** 2.1.3 - AccĂšs aux chemins de fichiers ### MĂ©dias & CamĂ©ra - **image_picker** 1.1.1 - SĂ©lection d'images - **camerawesome** 2.1.0 - FonctionnalitĂ©s camĂ©ra avancĂ©es - **video_player** 2.8.6 - Lecture vidĂ©o ### Cartes & Localisation - **google_maps_flutter** 2.7.0 - IntĂ©gration Google Maps - **permission_handler** 11.3.1 - Gestion des permissions ### SĂ©curitĂ© - **encrypt** 5.0.3 - Chiffrement de donnĂ©es - **flutter_bcrypt** 1.0.8 - Hachage de mots de passe ### UI & Animations - **flutter_spinkit** 5.2.1 - Indicateurs de chargement - **carousel_slider** 5.0.0 - Carrousels d'images - **loading_icon_button** 0.0.6 - Boutons avec Ă©tat de chargement ### Utilitaires - **intl** 0.19.0 - Internationalisation (dates en français) - **logger** 2.3.0 - Logging avancĂ© - **dartz** 0.10.1 - Programmation fonctionnelle - **get_it** 7.7.0 - Injection de dĂ©pendances --- ## đŸ’» Installation ### PrĂ©requis - Flutter SDK 3.5.1 ou supĂ©rieur - Dart SDK 3.5.1 ou supĂ©rieur - Android Studio / Xcode (pour le dĂ©veloppement mobile) - Git ### Étapes d'installation 1. **Cloner le repository** ```bash git clone cd afterwork ``` 2. **Installer les dĂ©pendances** ```bash flutter pub get ``` 3. **VĂ©rifier l'installation** ```bash flutter doctor ``` 4. **Configurer l'environnement** (voir section Configuration) 5. **Lancer l'application** ```bash # Mode dĂ©veloppement flutter run # Mode release flutter run --release ``` --- ## ⚙ Configuration ### Variables d'Environnement CrĂ©ez un fichier `.env` Ă  la racine du projet (copiez `.env.example`) : ```env API_BASE_URL=http://192.168.1.145:8080 ENVIRONMENT=development GOOGLE_MAPS_API_KEY=your_google_maps_api_key_here ``` ### Configuration Build Pour passer les variables au moment du build : ```bash flutter run --dart-define=API_BASE_URL=https://api.production.com \ --dart-define=ENVIRONMENT=production ``` ### Configuration API Backend L'URL de l'API backend est configurĂ©e dans `lib/core/constants/env_config.dart`. **Endpoints principaux :** - Authentification : `POST /users/authenticate` - ÉvĂ©nements : `GET /events`, `POST /events`, `PUT /events/{id}` - Amis : endpoints de gestion des relations d'amitiĂ© Voir la [Documentation API](#-documentation-api) pour plus de dĂ©tails. --- ## 📁 Structure du Projet ``` afterwork/ ├── android/ # Configuration Android ├── ios/ # Configuration iOS ├── web/ # Configuration Web ├── windows/ # Configuration Windows ├── linux/ # Configuration Linux ├── macos/ # Configuration macOS ├── lib/ # Code source Dart │ ├── main.dart # Point d'entrĂ©e de l'application │ ├── core/ # Code partagĂ© │ ├── domain/ # Logique mĂ©tier │ ├── data/ # Couche de donnĂ©es │ └── presentation/ # UI et Ă©crans ├── test/ # Tests unitaires et widgets ├── assets/ # Ressources (images, fonts, etc.) ├── pubspec.yaml # DĂ©pendances du projet ├── analysis_options.yaml # Configuration du linter └── README.md # Ce fichier ``` --- ## đŸ‘šâ€đŸ’» DĂ©veloppement ### Standards de Code Le projet utilise des rĂšgles de linting strictes dĂ©finies dans `analysis_options.yaml` : - Utilisation obligatoire de `const` pour les widgets immuables - Typage fort et infĂ©rence stricte - Trailing commas pour une meilleure lisibilitĂ© - Documentation des APIs publiques ### Formatage du Code ```bash # Formater tout le code dart format . # Analyser le code flutter analyze # Appliquer les corrections automatiques dart fix --apply ``` ### Conventions de Nommage - **Classes** : `PascalCase` (ex: `EventScreen`, `UserProvider`) - **Fichiers** : `snake_case` (ex: `event_screen.dart`, `user_provider.dart`) - **Variables/Fonctions** : `camelCase` (ex: `userId`, `getUserById`) - **Constants** : `lowerCamelCase` (ex: `apiBaseUrl`) ### Git Workflow 1. CrĂ©er une branche pour chaque feature : `feature/nom-feature` 2. Commit avec des messages descriptifs 3. Pull request pour review avant merge --- ## đŸ§Ș Tests ### Lancer les Tests ```bash # Tous les tests flutter test # Tests avec coverage flutter test --coverage # Tests spĂ©cifiques flutter test test/domain/entities/user_test.dart ``` ### Types de Tests - **Tests Unitaires** : Logique mĂ©tier et utilitaires - **Tests Widgets** : Composants UI isolĂ©s - **Tests d'IntĂ©gration** : Flux utilisateur complets --- ## 🚀 DĂ©ploiement ### Android ```bash # Build APK flutter build apk --release # Build App Bundle (recommandĂ© pour Play Store) flutter build appbundle --release ``` ### iOS ```bash # Build IPA flutter build ios --release ``` ### Web ```bash # Build web flutter build web --release ``` --- ## đŸ€ Contribution Les contributions sont les bienvenues ! Pour contribuer : 1. Fork le projet 2. CrĂ©er une branche feature (`git checkout -b feature/AmazingFeature`) 3. Commit vos changements (`git commit -m 'Add: Amazing Feature'`) 4. Push vers la branche (`git push origin feature/AmazingFeature`) 5. Ouvrir une Pull Request ### Guidelines de Contribution - Respecter les standards de code du projet - Ajouter des tests pour les nouvelles fonctionnalitĂ©s - Documenter les changements dans le README si nĂ©cessaire - S'assurer que `flutter analyze` ne retourne aucune erreur --- ## 📖 Documentation API ### Base URL ``` http://192.168.1.145:8080 ``` ### Authentification #### POST /users/authenticate Authentifie un utilisateur **Body:** ```json { "email": "user@example.com", "password": "hashedPassword" } ``` **Response:** ```json { "userId": "123", "firstName": "John", "lastName": "Doe", "email": "user@example.com", "token": "jwt_token_here" } ``` ### ÉvĂ©nements #### GET /events RĂ©cupĂšre tous les Ă©vĂ©nements #### POST /events CrĂ©e un nouvel Ă©vĂ©nement **Body:** ```json { "title": "After-work Tech", "description": "SoirĂ©e networking", "startDate": "2024-01-15T19:00:00Z", "location": "Paris, France", "category": "Networking", "creatorEmail": "user@example.com" } ``` #### GET /events/{id} RĂ©cupĂšre un Ă©vĂ©nement spĂ©cifique #### PUT /events/{id} Met Ă  jour un Ă©vĂ©nement #### DELETE /events/{id} Supprime un Ă©vĂ©nement #### PATCH /events/{id}/close Ferme un Ă©vĂ©nement #### PATCH /events/{id}/reopen RĂ©ouvre un Ă©vĂ©nement Pour plus de dĂ©tails, consultez la documentation Swagger de l'API backend. --- ## 📝 Changelog ### Version 1.0.0 (En dĂ©veloppement) - ✅ Architecture Clean implĂ©mentĂ©e - ✅ Gestion des Ă©vĂ©nements complĂšte - ✅ SystĂšme d'amis fonctionnel - ✅ Stories et posts sociaux - ✅ ThĂšme clair/sombre - ✅ IntĂ©gration Google Maps - 🔄 Tests en cours d'implĂ©mentation --- ## 📄 License Ce projet est propriĂ©taire. Tous droits rĂ©servĂ©s. --- ## đŸ‘„ Équipe DĂ©veloppĂ© avec ❀ par l'Ă©quipe AfterWork --- ## 📞 Support Pour toute question ou problĂšme : - Ouvrir une issue sur le repository - Contacter l'Ă©quipe de dĂ©veloppement ---
**Fait avec Flutter 🚀**