# đ AfterWork - Application Mobile de RĂ©seau Social d'ĂvĂ©nements




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 đ**