# UnionFlow

Système de gestion intégré pour les unions et associations Lions Club de Côte d'Ivoire.

## 📋 Description

UnionFlow est une plateforme complète de gestion pour les organisations Lions Club, comprenant :
- Gestion des membres et cotisations
- Organisation d'événements
- Système de solidarité
- Gestion des organisations
- Authentification sécurisée via Keycloak

## 🏗️ Architecture

Le projet est composé de deux applications principales :

### Backend - Quarkus (Java)
- **Framework** : Quarkus 3.x
- **Base de données** : PostgreSQL
- **Authentification** : Keycloak (OIDC)
- **API** : REST (JAX-RS)
- **ORM** : Hibernate avec Panache

### Mobile - Flutter
- **Framework** : Flutter 3.x
- **Architecture** : Clean Architecture + BLoC
- **Authentification** : Keycloak WebView
- **HTTP Client** : Dio
- **State Management** : flutter_bloc

## 🚀 Démarrage Rapide

### Prérequis

- Java 17+
- Maven 3.8+
- PostgreSQL 14+
- Keycloak 23+
- Flutter 3.x
- Dart 3.x

### Backend

```bash
cd unionflow-server-impl-quarkus

# Configuration de la base de données
# Créer une base PostgreSQL nommée 'unionflow'
# Modifier src/main/resources/application.properties si nécessaire

# Démarrage en mode développement
mvn clean quarkus:dev

# L'API sera disponible sur http://localhost:8080
```

### Mobile

```bash
cd unionflow-mobile-apps

# Installation des dépendances
flutter pub get

# Génération du code (models, etc.)
flutter pub run build_runner build --delete-conflicting-outputs

# Lancement de l'application
flutter run
```

## 📦 Configuration

### Backend - application.properties

```properties
# Base de données
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/unionflow
quarkus.datasource.username=unionflow
quarkus.datasource.password=unionflow123

# Keycloak
quarkus.oidc.auth-server-url=http://localhost:8180/realms/unionflow
quarkus.oidc.client-id=unionflow-server
quarkus.oidc.credentials.secret=unionflow-secret-2025
```

### Mobile - Configuration

Modifier `lib/core/network/dio_client.dart` pour l'URL du backend :
```dart
static const String _baseUrl = 'http://192.168.1.11:8080';
```

Modifier `lib/core/auth/keycloak_config.dart` pour Keycloak :
```dart
static const String authority = 'http://192.168.1.11:8180/realms/unionflow';
static const String clientId = 'unionflow-mobile';
```

## 🗄️ Base de Données

### Mode Développement

Pour charger les données initiales (membres, cotisations, événements) :

1. Modifier `application.properties` :
```properties
quarkus.hibernate-orm.database.generation=drop-and-create
```

2. Redémarrer Quarkus - Le fichier `import.sql` sera exécuté automatiquement

3. Remettre en mode production :
```properties
quarkus.hibernate-orm.database.generation=update
```

### Mode Production

En production, utilisez toujours `update` pour préserver les données.

## 📱 Fonctionnalités

### Gestion des Membres
- Inscription et profils des membres
- Gestion des statuts (actif, inactif, suspendu)
- Historique des adhésions

### Cotisations
- Différents types : mensuelle, annuelle, adhésion, événement, formation, projet, solidarité
- Suivi des paiements (payée, en attente, en retard, partiellement payée)
- Rappels automatiques

### Événements
- Types variés : assemblée générale, réunion, formation, conférence, atelier, séminaire, événement social, manifestation, célébration
- Gestion des inscriptions
- Capacité et tarification
- Statuts : planifié, confirmé, en cours, terminé, annulé, reporté

### Organisations
- Gestion des clubs et unions
- Hiérarchie organisationnelle
- Statistiques et rapports

## 🔐 Sécurité

- Authentification via Keycloak (OAuth 2.0 / OIDC)
- Tokens JWT stockés de manière sécurisée (FlutterSecureStorage)
- Contrôle d'accès basé sur les rôles (RBAC)
- Refresh automatique des tokens

## 🛠️ Développement

### Structure du Backend

```
unionflow-server-impl-quarkus/
├── src/main/java/dev/lions/unionflow/server/
│   ├── entity/          # Entités JPA
│   ├── resource/        # Endpoints REST
│   ├── service/         # Logique métier
│   ├── dto/             # Data Transfer Objects
│   └── repository/      # Repositories (si nécessaire)
└── src/main/resources/
    ├── application.properties
    ├── import.sql       # Données initiales
    └── db/migration/    # Migrations Flyway (si utilisé)
```

### Structure du Mobile

```
unionflow-mobile-apps/
├── lib/
│   ├── core/            # Configuration, réseau, auth
│   ├── features/        # Modules par fonctionnalité
│   │   ├── auth/
│   │   ├── members/
│   │   ├── events/
│   │   ├── cotisations/
│   │   └── organisations/
│   └── main.dart
```

## 📝 API Documentation

Une fois le backend démarré, la documentation OpenAPI est disponible sur :
- Swagger UI : http://localhost:8080/q/swagger-ui
- OpenAPI JSON : http://localhost:8080/q/openapi

## 🧪 Tests

### Backend
```bash
mvn test
```

### Mobile
```bash
flutter test
```

## 📄 Licence

Propriétaire - Lions Club Côte d'Ivoire

## 👥 Équipe

UnionFlow Team - Lions Club Côte d'Ivoire

## 📞 Support

Pour toute question ou problème, contactez l'équipe de développement.

---

**Version** : 1.0.0  
**Dernière mise à jour** : 2025-10-05

