feat: auto-activation après paiement Wave — plus de page d'attente

- auth_bloc: quand onboardingState==VALIDATED, refresh token et vérifier
  si statutCompte==ACTIF → dashboard direct (pas d'écran d'attente)
- Edge case: si activation backend échouée, fallback vers AwaitingValidationPage
  avec polling 15s
- onboarding_bloc: séparer VALIDATED de AWAITING_VALIDATION dans le switch
This commit is contained in:
dahoud
2026-04-18 08:07:30 +00:00
parent f96ab6e86e
commit 33f5b5a707
2 changed files with 57 additions and 7 deletions

View File

@@ -17,7 +17,7 @@ abstract class OnboardingEvent extends Equatable {
/// Démarre le workflow (charge les formules + état courant si souscription existante)
class OnboardingStarted extends OnboardingEvent {
final String? existingSouscriptionId;
final String initialState; // NO_SUBSCRIPTION | AWAITING_PAYMENT | PAYMENT_INITIATED | AWAITING_VALIDATION
final String initialState; // NO_SUBSCRIPTION | AWAITING_PAYMENT | PAYMENT_INITIATED | AWAITING_VALIDATION | VALIDATED
final String? typeOrganisation;
final String? organisationId;
const OnboardingStarted({
@@ -155,7 +155,7 @@ class OnboardingPaiementEchoue extends OnboardingState {
List<Object?> get props => [message, souscription, waveLaunchUrl];
}
/// Étape 5 : en attente de validation SuperAdmin
/// Étape 5 : en attente d'activation (paiement reçu, activation en cours)
class OnboardingStepAttente extends OnboardingState {
final SouscriptionStatusModel? souscription;
const OnboardingStepAttente({this.souscription});
@@ -233,10 +233,17 @@ class OnboardingBloc extends Bloc<OnboardingEvent, OnboardingState> {
}
case 'AWAITING_VALIDATION':
case 'VALIDATED': // Paiement confirmé mais activation compte non encore effective
final sosc = await _datasource.getMaSouscription();
_souscription = sosc;
emit(OnboardingStepAttente(souscription: sosc));
final soscAwait = await _datasource.getMaSouscription();
_souscription = soscAwait;
emit(OnboardingStepAttente(souscription: soscAwait));
case 'VALIDATED':
// Paiement confirmé, souscription validée, mais activation pas encore effective
// (edge case : auth_bloc a déjà tenté un refresh sans succès).
// Afficher la page d'attente avec polling 15s (AwaitingValidationPage).
final soscValidated = await _datasource.getMaSouscription();
_souscription = soscValidated;
emit(OnboardingStepAttente(souscription: soscValidated));
case 'REJECTED':
final sosc = await _datasource.getMaSouscription();