## Corrections Critiques ### Race Condition - Statuts de Messages - Fix : Les icônes de statut (✓, ✓✓, ✓✓ bleu) ne s'affichaient pas - Cause : WebSocket delivery confirmations arrivaient avant messages locaux - Solution : Pattern Optimistic UI dans chat_bloc.dart - Création message temporaire immédiate - Ajout à la liste AVANT requête HTTP - Remplacement par message serveur à la réponse - Fichier : lib/presentation/state_management/chat_bloc.dart ## Implémentation TODOs (13/21) ### Social (social_header_widget.dart) - ✅ Copier lien du post dans presse-papiers - ✅ Partage natif via Share.share() - ✅ Dialogue de signalement avec 5 raisons ### Partage (share_post_dialog.dart) - ✅ Interface sélection d'amis avec checkboxes - ✅ Partage externe via Share API ### Média (media_upload_service.dart) - ✅ Parsing JSON réponse backend - ✅ Méthode deleteMedia() pour suppression - ✅ Génération miniature vidéo ### Posts (create_post_dialog.dart, edit_post_dialog.dart) - ✅ Extraction URL depuis uploads - ✅ Documentation chargement médias ### Chat (conversations_screen.dart) - ✅ Navigation vers notifications - ✅ ConversationSearchDelegate pour recherche ## Nouveaux Fichiers ### Configuration - build-prod.ps1 : Script build production avec dart-define - lib/core/constants/env_config.dart : Gestion environnements ### Documentation - TODOS_IMPLEMENTED.md : Documentation complète TODOs ## Améliorations ### Architecture - Refactoring injection de dépendances - Amélioration routing et navigation - Optimisation providers (UserProvider, FriendsProvider) ### UI/UX - Amélioration thème et couleurs - Optimisation animations - Meilleure gestion erreurs ### Services - Configuration API avec env_config - Amélioration datasources (events, users) - Optimisation modèles de données
474 lines
12 KiB
Markdown
474 lines
12 KiB
Markdown
# 🎉 AfterWork - Application Mobile de Réseau Social d'Événements
|
|
|
|
<div align="center">
|
|
|
|

|
|

|
|

|
|

|
|
|
|
Une application mobile multiplateforme permettant de créer, gérer et participer à des événements sociaux avec vos amis.
|
|
|
|
</div>
|
|
|
|
---
|
|
|
|
## 📋 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 <repository-url>
|
|
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
|
|
|
|
---
|
|
|
|
<div align="center">
|
|
|
|
**Fait avec Flutter 🚀**
|
|
|
|
</div>
|