feat: WebSocket temps réel + Finance Workflow + corrections

- Task #6: WebSocket /ws/dashboard + Kafka events (5 topics)
  * Backend: KafkaEventProducer, KafkaEventConsumer
  * Mobile: WebSocketService (reconnection, heartbeat, typed events)
  * DashboardBloc: Auto-refresh depuis WebSocket events

- Finance Workflow: approbations + budgets (backend + mobile)
  * Backend: entities, services, resources, migrations Flyway V6
  * Mobile: features finance_workflow complète avec BLoC

- Corrections DI: interfaces IRepository partout
  * IProfileRepository, IOrganizationRepository, IMembreRepository
  * GetIt configuré avec @injectable

- Spec-Kit: constitution + templates mis à jour
  * .specify/memory/constitution.md enrichie
  * Templates agent, plan, spec, tasks, checklist

- Nettoyage: fichiers temporaires supprimés

Signed-off-by: lions dev Team
This commit is contained in:
dahoud
2026-03-15 02:12:17 +00:00
parent bbc409de9d
commit e8ad874015
635 changed files with 58160 additions and 20674 deletions

View File

@@ -6,24 +6,28 @@ alwaysApply: false
# UnionFlow Mobile (Flutter)
## Structure
## Structure (alignée sur linventaire)
- Architecture feature-first avec Bloc
- `lib/features/{feature}/` : data/, domain/, presentation/, di/
- Design system partagé dans `lib/shared/design_system/`
- **Point dentrée** : `main.dart` → `AppConfig.initialize()`, `configureDependencies()`, `UnionFlowApp`.
- **App** : `app/app.dart`, `app/router/app_router.dart`. Routes : `MaterialApp` avec `Map<String, WidgetBuilder>` (`/`, `/login`, `/dashboard`).
- **Core** : `core/config/environment.dart` (AppConfig, Environment), `core/di/injection.dart`, `injection_container.dart`, `injection.config.dart`, `register_module.dart`, `core/network/api_client.dart`, `core/navigation/main_navigation_layout.dart`, `more_page.dart`.
- **Features** : `lib/features/<nom>/` avec `data/` (models, repositories, services), `domain/` (quand présent), `presentation/` (bloc, pages, widgets). Pas de sous-dossier `di/` dédié par feature ; DI centralisé dans `core/di/`.
- **Design system** : `lib/shared/design_system/`, `lib/shared/widgets/`.
Référence détaillée : `.specify/memory/inventaire-code.md` (section 4). Ne pas inventer de route, feature ou classe non listée.
## Conventions
- Bloc pour la gestion d'état
- Injectable/GetIt pour l'injection de dépendances
- Modèles avec json_serializable
- Tests: bloc_test, mockito
- Bloc pour la gestion détat.
- GetIt + Injectable pour linjection de dépendances (enregistrements dans `injection.config.dart`).
- Modèles avec `json_serializable` quand nécessaire.
- Tests : `bloc_test`, `mockito`.
## Backend
- API: unionflow-server-impl-quarkus
- Auth: Keycloak OAuth2, JWT via flutter_secure_storage
- API : unionflow-server-impl-quarkus. Client HTTP : `ApiClient` (Dio), `baseUrl` via `AppConfig.apiBaseUrl`.
- Auth : Keycloak OAuth2, JWT via `flutter_secure_storage` (clé `kc_access`), refresh et déconnexion forcée gérés dans `ApiClient`.
## Référence
Voir `CONSTITUTION.md` section 13 (Mobile Integration).
Voir `CONSTITUTION.md` section 13 (Mobile Integration) et `.specify/memory/inventaire-code.md` § 4.