From 317655b593cc7b9bd4cbe0023b821aaf18ff50b4 Mon Sep 17 00:00:00 2001
From: Bastien DUMONT <bdumont@grandlyon.com>
Date: Wed, 24 Jul 2024 16:25:37 +0200
Subject: [PATCH] parallelize steps

---
 src/components/Splash/SplashRoot.tsx    | 41 +++++++++++++------------
 src/models/initialisationSteps.model.ts |  6 ++--
 src/services/initialization.service.ts  |  1 +
 3 files changed, 26 insertions(+), 22 deletions(-)

diff --git a/src/components/Splash/SplashRoot.tsx b/src/components/Splash/SplashRoot.tsx
index 068f256c1..77bead74a 100644
--- a/src/components/Splash/SplashRoot.tsx
+++ b/src/components/Splash/SplashRoot.tsx
@@ -19,7 +19,6 @@ import {
   PartnersInfo,
   Profile,
   ProfileType,
-  UserChallenge,
 } from 'models'
 import React, { ReactNode, useCallback, useEffect, useState } from 'react'
 import ActionService from 'services/action.service'
@@ -194,19 +193,24 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
       const startTime = performance.now()
       const transaction = Sentry.startTransaction({ name: 'Initialize app' })
       try {
-        // init Terms
-        const termsStatus = await initializationService.initConsent()
+        // Load app in parallel
+        const [
+          termsStatus,
+          ,
+          profile,
+          profileType,
+          profileEcogesture,
+          fluidStatus,
+        ] = await Promise.all([
+          initializationService.initConsent(),
+          initializationService.initFluidPrices(),
+          initializationService.initProfile(),
+          initializationService.initProfileType(),
+          initializationService.initProfileEcogesture(),
+          initializationService.initFluidStatus(),
+        ])
         if (subscribed) dispatch(updateTermsStatus(termsStatus))
 
-        // Init fluidPrices
-        await initializationService.initFluidPrices()
-
-        // Init profile and update ecogestures, challenges, analysis
-        const profile = await initializationService.initProfile()
-        const profileType = await initializationService.initProfileType()
-        const profileEcogesture =
-          await initializationService.initProfileEcogesture()
-
         const migrationsResult = await ms.runMigrations(migrations)
         // Init last release notes when they exist
         dispatch(
@@ -249,11 +253,11 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
           }
           dispatch(toggleAnalysisNotification(!profile.haveSeenLastAnalysis))
         }
-        // Init Fluid status && lastDate for the chart
-        const fluidStatus = await initializationService.initFluidStatus()
+
+        // Process fluids status
         if (subscribed) {
           dispatch(setFluidStatus(fluidStatus))
-          let lastDataDate: DateTime | null = DateTime.fromISO('0001-01-01')
+          let lastDataDate = DateTime.fromISO('0001-01-01')
           for (const fluid of fluidStatus) {
             if (fluid.lastDataDate && fluid.lastDataDate > lastDataDate) {
               lastDataDate = fluid.lastDataDate
@@ -281,10 +285,9 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
             UserActionState.ONGOING
           ) {
             const actionService = new ActionService(client)
-            const updatedUserChallenge: UserChallenge | null =
-              await actionService.isActionDone(
-                filteredCurrentOngoingChallenge[0]
-              )
+            const updatedUserChallenge = await actionService.isActionDone(
+              filteredCurrentOngoingChallenge[0]
+            )
             if (updatedUserChallenge) {
               dispatch(updateUserChallengeList(updatedUserChallenge))
             }
diff --git a/src/models/initialisationSteps.model.ts b/src/models/initialisationSteps.model.ts
index fd9cb97b4..9ccccf4f4 100644
--- a/src/models/initialisationSteps.model.ts
+++ b/src/models/initialisationSteps.model.ts
@@ -1,10 +1,10 @@
 export enum InitSteps {
-  MIGRATION,
   CONSENT,
+  PRICES,
   PROFILE,
-  CHALLENGES,
-  PRICES, // never used
   CONSOS,
+  MIGRATION,
+  CHALLENGES,
 }
 export enum InitStepsErrors {
   MIGRATION_ERROR = 'migration_error',
diff --git a/src/services/initialization.service.ts b/src/services/initialization.service.ts
index b30bb683a..e01b9dd78 100644
--- a/src/services/initialization.service.ts
+++ b/src/services/initialization.service.ts
@@ -160,6 +160,7 @@ export default class InitializationService {
 
   public async initFluidPrices(): Promise<void> {
     const startTime = performance.now()
+    this._setInitStep(InitSteps.PRICES)
     logDuration('[Initialization] Launching fluidPrices service', startTime)
     const triggerQuery: QueryDefinition = Q(TRIGGERS_DOCTYPE).where({
       'message.name': 'fluidsPrices',
-- 
GitLab