From 736e3049e60afc4c3e855f14c15aa0893544c639 Mon Sep 17 00:00:00 2001
From: Bastien DUMONT <bdumont@grandlyon.com>
Date: Wed, 21 Jun 2023 15:34:11 +0000
Subject: [PATCH] fix: partial index warning messages

---
 src/services/consumption.service.ts               |  8 ++++++--
 src/services/ecogesture.service.ts                | 12 ++++++++++--
 src/services/enedisMonthlyAnalysisData.service.ts |  3 +++
 src/services/fluidsPrices.service.ts              |  4 ++--
 src/services/profileTypeEntity.service.ts         |  5 ++++-
 src/services/queryRunner.service.ts               |  6 +++---
 src/services/terms.service.ts                     |  2 ++
 src/services/usageEvent.service.ts                |  5 ++++-
 8 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/src/services/consumption.service.ts b/src/services/consumption.service.ts
index e92976296..48fb3f060 100644
--- a/src/services/consumption.service.ts
+++ b/src/services/consumption.service.ts
@@ -564,6 +564,7 @@ export default class ConsumptionDataManager {
   ): Promise<DataloadEntity[] | EnedisMonthlyAnalysisData[] | null> {
     const query: QueryDefinition = Q(doctype)
       .where({})
+      .indexFields(['year', 'month'])
       .sortBy([{ year: 'asc' }, { month: 'asc' }])
       .limitBy(1)
     const data = await this._client.query(query)
@@ -575,8 +576,11 @@ export default class ConsumptionDataManager {
   ): Promise<DataloadEntity | null> {
     const query: QueryDefinition = Q(doctype)
       .where({
-        price: {
-          $exists: false,
+        year: {
+          $gt: null,
+        },
+        month: {
+          $gt: null,
         },
       })
       .partialIndex({
diff --git a/src/services/ecogesture.service.ts b/src/services/ecogesture.service.ts
index b7e0ae588..0420aa509 100644
--- a/src/services/ecogesture.service.ts
+++ b/src/services/ecogesture.service.ts
@@ -121,11 +121,18 @@ export default class EcogestureService {
     if (seasonFilter && seasonFilter !== Season.NONE) {
       query = query
         .where({ season: { $ne: seasonFilter } })
+        .indexFields(['season'])
         .sortBy([{ season: 'desc' }])
     } else if (orderByID) {
-      query = query.where({}).sortBy([{ _id: 'asc' }])
+      query = query
+        .where({})
+        .indexFields(['_id'])
+        .sortBy([{ _id: 'asc' }])
     } else {
-      query = query.where({}).sortBy([{ season: 'desc' }])
+      query = query
+        .where({})
+        .indexFields(['season'])
+        .sortBy([{ season: 'desc' }])
     }
 
     const { data: ecogestures }: QueryResult<Ecogesture[]> =
@@ -136,6 +143,7 @@ export default class EcogestureService {
         await this._client.query(
           Q(ECOGESTURE_DOCTYPE)
             .where({ season: { $eq: seasonFilter } })
+            .indexFields(['season'])
             .sortBy([{ season: 'asc' }])
         )
       return [...ecogesturesWithSeason, ...ecogestures]
diff --git a/src/services/enedisMonthlyAnalysisData.service.ts b/src/services/enedisMonthlyAnalysisData.service.ts
index 70af4e00a..0eff9590f 100644
--- a/src/services/enedisMonthlyAnalysisData.service.ts
+++ b/src/services/enedisMonthlyAnalysisData.service.ts
@@ -49,6 +49,7 @@ export default class EnedisMonthlyAnalysisDataService {
   > {
     const query: QueryDefinition = Q(ENEDIS_MONTHLY_ANALYSIS_DATA_DOCTYPE)
       .where({})
+      .indexFields(['year', 'month'])
       .sortBy([{ year: 'desc' }, { month: 'desc' }])
       .limitBy(1)
     const data = await this._client.query(query)
@@ -115,6 +116,7 @@ export default class EnedisMonthlyAnalysisDataService {
   ): Promise<EnedisMonthlyAnalysisData[]> {
     const query: QueryDefinition = Q(ENEDIS_MONTHLY_ANALYSIS_DATA_DOCTYPE)
       .where({ year: year, month: month })
+      .indexFields(['year', 'month'])
       .sortBy([{ year: 'desc' }, { month: 'desc' }])
       .limitBy(1)
     const data = await this._client.query(query)
@@ -161,6 +163,7 @@ export default class EnedisMonthlyAnalysisDataService {
   ): Promise<MaxPowerEntity[]> {
     const query: QueryDefinition = Q(ENEDIS_MAXPOWER_DOCTYPE)
       .where({ year: year, month: month })
+      .indexFields(['year', 'month'])
       .sortBy([{ year: 'desc' }, { month: 'desc' }])
     const data = await this._client.query(query)
 
diff --git a/src/services/fluidsPrices.service.ts b/src/services/fluidsPrices.service.ts
index acbaf7419..7ea8c8fb3 100644
--- a/src/services/fluidsPrices.service.ts
+++ b/src/services/fluidsPrices.service.ts
@@ -40,13 +40,13 @@ export default class FluidPricesService {
     date: DateTime
   ): Promise<FluidPrice> {
     const query: QueryDefinition = Q(FLUIDSPRICES_DOCTYPE)
-      .indexFields(['startDate'])
       .where({
         startDate: {
           $lte: date.toISO({ suppressMilliseconds: true }).toString(),
         },
         fluidType,
       })
+      .indexFields(['startDate'])
       .sortBy([{ startDate: 'desc' }])
       .limitBy(1)
 
@@ -61,8 +61,8 @@ export default class FluidPricesService {
    */
   public async getAllLastPrices(): Promise<FluidPrice[]> {
     const query: QueryDefinition = Q(FLUIDSPRICES_DOCTYPE)
-      .indexFields(['fluidType'])
       .where({ endDate: { $eq: '' } })
+      .indexFields(['fluidType'])
       .sortBy([{ fluidType: 'asc' }])
       .limitBy(3)
 
diff --git a/src/services/profileTypeEntity.service.ts b/src/services/profileTypeEntity.service.ts
index b436858f0..bb68839a1 100644
--- a/src/services/profileTypeEntity.service.ts
+++ b/src/services/profileTypeEntity.service.ts
@@ -30,6 +30,7 @@ export default class ProfileTypeEntityService {
       }: QueryResult<ProfileType[]> = await this._client.query(
         query
           .where({ updateDate: { $lte: date.toString() } })
+          .indexFields(['updateDate'])
           .sortBy([{ updateDate: 'desc' }])
           .limitBy(1)
       )
@@ -65,7 +66,8 @@ export default class ProfileTypeEntityService {
         data: [profileType],
       }: QueryResult<ProfileType[]> = await this._client.query(
         query
-          .where({ _id: { $gt: null } })
+          .where({})
+          .indexFields(['updateDate'])
           .sortBy([{ updateDate: 'desc' }])
           .limitBy(1)
       )
@@ -96,6 +98,7 @@ export default class ProfileTypeEntityService {
               $gte: timePeriod.startDate.toString(),
             },
           })
+          .indexFields(['updateDate'])
           .sortBy([{ updateDate: 'asc' }])
           .limitBy(100)
       )
diff --git a/src/services/queryRunner.service.ts b/src/services/queryRunner.service.ts
index 6fa812869..dffb788de 100644
--- a/src/services/queryRunner.service.ts
+++ b/src/services/queryRunner.service.ts
@@ -58,14 +58,14 @@ export default class QueryRunner {
       return Q(doctype)
         .where(this.getPredicate(maxTimePeriod, TimeStep.HALF_AN_HOUR))
         .indexFields(['load'])
-        .limitBy(1)
         .sortBy([{ load: 'desc' }])
+        .limitBy(1)
     }
     return Q(doctype)
       .where(this.getPredicate(maxTimePeriod, timeStep))
       .indexFields(['load'])
-      .limitBy(limit)
       .sortBy([{ load: 'desc' }])
+      .limitBy(limit)
   }
 
   private buildFirstDateQuery(
@@ -472,7 +472,7 @@ export default class QueryRunner {
   public async getEntries(fluidType: FluidType, timeStep: TimeStep) {
     const doctype = this.getRelevantDoctype(fluidType, timeStep)
     try {
-      const query = Q(doctype).where({}).limitBy(1)
+      const query = Q(doctype).limitBy(1)
       const result = await this._client.query(query)
       return result
     } catch (error) {
diff --git a/src/services/terms.service.ts b/src/services/terms.service.ts
index bb063f147..c9c3061a9 100644
--- a/src/services/terms.service.ts
+++ b/src/services/terms.service.ts
@@ -21,6 +21,7 @@ export default class TermsService {
   public async getLastTerm(): Promise<Term> {
     const query: QueryDefinition = Q(TERMS_DOCTYPE)
       .where({})
+      .indexFields(['acceptedAt'])
       .sortBy([{ acceptedAt: 'desc' }])
       .limitBy(1)
     const {
@@ -36,6 +37,7 @@ export default class TermsService {
   public async isLastTermValidated(): Promise<boolean> {
     const query: QueryDefinition = Q(TERMS_DOCTYPE)
       .where({})
+      .indexFields(['acceptedAt'])
       .sortBy([{ acceptedAt: 'desc' }])
       .limitBy(1)
     const {
diff --git a/src/services/usageEvent.service.ts b/src/services/usageEvent.service.ts
index 9b18e59c4..33fb71ea2 100644
--- a/src/services/usageEvent.service.ts
+++ b/src/services/usageEvent.service.ts
@@ -80,10 +80,13 @@ export default class UsageEventService {
       // Get last Connection attempt Event
       const query: QueryDefinition = Q(USAGEEVENT_DOCTYPE)
         .where({
-          type: UsageEventType.KONNECTOR_ATTEMPT_EVENT,
           target: konnectorSlug,
+        })
+        .partialIndex({
+          type: UsageEventType.KONNECTOR_ATTEMPT_EVENT,
           result: 'error',
         })
+        .indexFields(['eventDate', 'type'])
         .sortBy([{ eventDate: 'desc' }])
         .limitBy(1)
       const {
-- 
GitLab