From cbe554d299aada2717e68e4bfa76e38524c21ce3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Pailharey?= <rpailharey@grandlyon.com>
Date: Mon, 11 Sep 2023 15:50:27 +0200
Subject: [PATCH] feat(splash): init fluidPrices for latest data

---
 src/components/Splash/SplashRoot.tsx   |  2 +-
 src/services/initialization.service.ts | 30 ++++++++++++++++++++++----
 2 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/src/components/Splash/SplashRoot.tsx b/src/components/Splash/SplashRoot.tsx
index a0cfaf2a2..cd571ee64 100644
--- a/src/components/Splash/SplashRoot.tsx
+++ b/src/components/Splash/SplashRoot.tsx
@@ -204,7 +204,7 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
         if (subscribed) dispatch(updateTermsStatus(termsStatus))
 
         // Init fluidPrices
-        await initializationService.initFluidPrices()
+        await initializationService.initFluidPrices(client)
 
         // Init profile and update ecogestures, challenges, analysis
         const profile = await initializationService.initProfile()
diff --git a/src/services/initialization.service.ts b/src/services/initialization.service.ts
index a209b48de..8097121fd 100644
--- a/src/services/initialization.service.ts
+++ b/src/services/initialization.service.ts
@@ -1,5 +1,5 @@
 import * as Sentry from '@sentry/react'
-import { Client } from 'cozy-client'
+import { Client, Q, QueryDefinition, QueryResult } from 'cozy-client'
 import logger from 'cozy-logger'
 import challengeEntityData from 'db/challengeEntity.json'
 import duelEntityData from 'db/duelEntity.json'
@@ -29,6 +29,7 @@ import {
   ProfileEcogesture,
   ProfileType,
   TermsStatus,
+  Trigger,
   UserChallenge,
 } from 'models'
 import React from 'react'
@@ -161,14 +162,13 @@ export default class InitializationService {
     }
   }
 
-  public async initFluidPrices(): Promise<boolean> {
+  public async initFluidPrices(client: Client): Promise<boolean> {
     const startTime = performance.now()
     const fpService = new FluidPricesService(this._client)
     // Populate data if none ecogesture exists
     const loadedPrices = await fpService.getAllPrices()
     if (loadedPrices?.length) {
       logDuration('[Initialization] FluidPrices db already created', startTime)
-      return true
     } else {
       try {
         const fluidTypes: FluidType[] = [
@@ -192,7 +192,6 @@ export default class InitializationService {
           await fpService.createPrice(price)
         }
         logDuration('[Initialization] FluidPrices db created', startTime)
-        return true
       } catch (error) {
         const errorMessage = `Initialization error - initFluidPrices: ${JSON.stringify(
           error
@@ -203,6 +202,29 @@ export default class InitializationService {
         return false
       }
     }
+    // Launching fluidPrices service to apply new price to latest data
+    logDuration('[Initialization] Launching fluidPrices service', startTime)
+    const triggerQuery: QueryDefinition = Q('io.cozy.triggers').where({
+      'message.name': 'fluidsPrices',
+    })
+    const {
+      data: [trigger],
+    }: QueryResult<Array<Trigger>> = await client.query(triggerQuery)
+    if (trigger?._id) {
+      client
+        .getStackClient()
+        .fetchJSON('POST', `/jobs/triggers/${trigger._id}/launch`)
+      logDuration(
+        '[Initialization] fluidPrices service launched successfully',
+        startTime
+      )
+    } else {
+      logDuration(
+        '[Initialization] FluidPrices service trigger not found',
+        startTime
+      )
+    }
+    return true
   }
 
   public async initChallengeEntity(hash: string): Promise<string> {
-- 
GitLab