fix(chat): Correction race condition + Implémentation TODOs

## 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
This commit is contained in:
dahoud
2026-01-10 10:43:17 +00:00
parent 06031b01f2
commit 92612abbd7
321 changed files with 43137 additions and 4285 deletions

473
README.md
View File

@@ -1,4 +1,473 @@
# AfterWork Project
# 🎉 AfterWork - Application Mobile de Réseau Social d'Événements
<div align="center">
This project is structured according to best practices in Flutter development.
![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.
</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>