From 74c98af84b14f93c0704ea9972374340564c318e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Bitard?= <bitard.michael@gmail.com>
Date: Tue, 9 Jul 2024 15:58:04 +0200
Subject: [PATCH] =?UTF-8?q?fix(api):=20ne=20v=C3=A9rifie=20plus=20avec=20T?=
 =?UTF-8?q?DE=20quand=20on=20a=20une=20machine=20(#1315)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 packages/api/src/api/rest/etapes.ts           | 17 ++++-----
 packages/api/src/business/daily.ts            |  2 -
 .../titre-demarche-etat-validate.ts           |  4 +-
 ...tre-etape-type-and-status-validate.test.ts | 10 ++---
 .../titre-etape-type-and-status-validate.ts   |  2 +-
 .../scripts/demarches-etape-statut-check.ts   | 11 ------
 .../src/tools/demarches/etape-statut-check.ts | 37 -------------------
 7 files changed, 16 insertions(+), 67 deletions(-)
 delete mode 100644 packages/api/src/scripts/demarches-etape-statut-check.ts
 delete mode 100644 packages/api/src/tools/demarches/etape-statut-check.ts

diff --git a/packages/api/src/api/rest/etapes.ts b/packages/api/src/api/rest/etapes.ts
index da733519c..5d18d29d0 100644
--- a/packages/api/src/api/rest/etapes.ts
+++ b/packages/api/src/api/rest/etapes.ts
@@ -1036,15 +1036,6 @@ const demarcheEtapesTypesGet = async (titreDemarcheId: DemarcheId, date: CaminoD
 
   if (titreEtapeId && !titreEtape) throw new Error("l'étape n'existe pas")
 
-  // si on modifie une étape
-  // vérifie que son type est possible sur la démarche
-  if (titreEtape) {
-    if (!isTDEExist(titre.typeId, titreDemarche.typeId, titreEtape.typeId)) {
-      const demarcheType = DemarchesTypes[titreDemarche.typeId]
-      throw new Error(`étape ${EtapesTypes[titreEtape.typeId].nom} inexistante pour une démarche ${demarcheType.nom} pour un titre ${titre.typeId}.`)
-    }
-  }
-
   const demarcheDefinition = demarcheDefinitionFind(titre.typeId, titreDemarche.typeId, titreDemarche.etapes, titreDemarche.id)
 
   const etapesTypes: EtapeTypeEtapeStatutWithMainStep[] = []
@@ -1053,6 +1044,14 @@ const demarcheEtapesTypesGet = async (titreDemarcheId: DemarcheId, date: CaminoD
     const etapes = titreDemarche.etapes.map(etape => titreEtapeForMachineValidator.parse(etape))
     etapesTypes.push(...etapesTypesPossibleACetteDateOuALaPlaceDeLEtape(demarcheDefinition.machine, etapes, titreEtapeId, date))
   } else {
+    // si on modifie une étape
+    // vérifie que son type est possible sur la démarche
+    if (titreEtape) {
+      if (!isTDEExist(titre.typeId, titreDemarche.typeId, titreEtape.typeId)) {
+        const demarcheType = DemarchesTypes[titreDemarche.typeId]
+        throw new Error(`étape ${EtapesTypes[titreEtape.typeId].nom} inexistante pour une démarche ${demarcheType.nom} pour un titre ${titre.typeId}.`)
+      }
+    }
     // dans un premier temps on récupère toutes les étapes possibles pour cette démarche
     let etapesTypesTDE = getEtapesTDE(titre.typeId, titreDemarche.typeId)
 
diff --git a/packages/api/src/business/daily.ts b/packages/api/src/business/daily.ts
index 1a5726035..f16af0cde 100644
--- a/packages/api/src/business/daily.ts
+++ b/packages/api/src/business/daily.ts
@@ -19,7 +19,6 @@ import { titresActivitesRelanceSend } from './processes/titres-activites-relance
 import type { Pool } from 'pg'
 import { demarchesDefinitionsCheck } from '../tools/demarches/definitions-check.js'
 import { titreTypeDemarcheTypeEtapeTypeCheck } from '../tools/demarches/tde-check.js'
-import { etapeStatutCheck } from '../tools/demarches/etape-statut-check.js'
 
 export const daily = async (pool: Pool) => {
   try {
@@ -49,7 +48,6 @@ export const daily = async (pool: Pool) => {
 
     await demarchesDefinitionsCheck()
     await titreTypeDemarcheTypeEtapeTypeCheck()
-    await etapeStatutCheck()
 
     logsUpdate({
       titresEtapesOrdreUpdated,
diff --git a/packages/api/src/business/validations/titre-demarche-etat-validate.ts b/packages/api/src/business/validations/titre-demarche-etat-validate.ts
index a4594a612..48198be7b 100644
--- a/packages/api/src/business/validations/titre-demarche-etat-validate.ts
+++ b/packages/api/src/business/validations/titre-demarche-etat-validate.ts
@@ -4,7 +4,7 @@ import type { ITitre, ITitreEtape } from '../../types.js'
 
 import { demarcheDefinitionFind } from '../rules-demarches/definitions.js'
 import { titreEtapeForMachineValidator, toMachineEtapes } from '../rules-demarches/machine-common.js'
-import { titreEtapeTypeAndStatusValidate } from './titre-etape-type-and-status-validate.js'
+import { tdeOldTitreEtapeTypeAndStatusValidate } from './titre-etape-type-and-status-validate.js'
 import { DemarcheId } from 'camino-common/src/demarche.js'
 import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes.js'
 import { ETAPE_IS_BROUILLON } from 'camino-common/src/etape.js'
@@ -62,7 +62,7 @@ export const titreDemarcheUpdatedEtatValidate = (
       return []
     }
     // le type d'étape correspond à la démarche et au type de titre
-    const titreEtapeTypeAndStatusErrors = titreEtapeTypeAndStatusValidate(titre.typeId, titreDemarche.typeId, titreEtape.typeId, titreEtape.statutId)
+    const titreEtapeTypeAndStatusErrors = tdeOldTitreEtapeTypeAndStatusValidate(titre.typeId, titreDemarche.typeId, titreEtape.typeId, titreEtape.statutId)
     titreDemarchesErrors.push(...titreEtapeTypeAndStatusErrors)
 
     return titreDemarchesErrors
diff --git a/packages/api/src/business/validations/titre-etape-type-and-status-validate.test.ts b/packages/api/src/business/validations/titre-etape-type-and-status-validate.test.ts
index 5efd17091..a99ff78e3 100644
--- a/packages/api/src/business/validations/titre-etape-type-and-status-validate.test.ts
+++ b/packages/api/src/business/validations/titre-etape-type-and-status-validate.test.ts
@@ -1,19 +1,19 @@
-import { titreEtapeTypeAndStatusValidate } from './titre-etape-type-and-status-validate.js'
+import { tdeOldTitreEtapeTypeAndStatusValidate } from './titre-etape-type-and-status-validate.js'
 import { describe, test, expect } from 'vitest'
 
 describe("valide le type et le statut d'une étape en fonction du type de titre et du type de démarche", () => {
   test('le statut est obligatoire', () => {
-    expect(titreEtapeTypeAndStatusValidate('arm', 'oct', 'mdp', undefined)).toEqual(['le statut est obligatoire'])
+    expect(tdeOldTitreEtapeTypeAndStatusValidate('arm', 'oct', 'mdp', undefined)).toEqual(['le statut est obligatoire'])
   })
   test("le type et le statut de l'étape correspondent au type de titre et de démarche", () => {
-    expect(titreEtapeTypeAndStatusValidate('arm', 'oct', 'mdp', 'fai')).toHaveLength(0)
+    expect(tdeOldTitreEtapeTypeAndStatusValidate('arm', 'oct', 'mdp', 'fai')).toHaveLength(0)
   })
 
   test("le statut de l'étape ne correspond pas au type de titre et de démarche", () => {
-    expect(titreEtapeTypeAndStatusValidate('arm', 'oct', 'mdp', 'rej')).toEqual(['statut de l\'étape "rej" invalide pour une étape mdp pour une démarche de type octroi'])
+    expect(tdeOldTitreEtapeTypeAndStatusValidate('arm', 'oct', 'mdp', 'rej')).toEqual(['statut de l\'étape "rej" invalide pour une étape mdp pour une démarche de type octroi'])
   })
 
   test("le type de l'étape n'est pas compatible avec le type de titre et de démarche", () => {
-    expect(titreEtapeTypeAndStatusValidate('arm', 'oct', 'dex', 'fai')).toEqual(['étape "dex" invalide pour une démarche "octroi"'])
+    expect(tdeOldTitreEtapeTypeAndStatusValidate('arm', 'oct', 'dex', 'fai')).toEqual(['étape "dex" invalide pour une démarche "octroi"'])
   })
 })
diff --git a/packages/api/src/business/validations/titre-etape-type-and-status-validate.ts b/packages/api/src/business/validations/titre-etape-type-and-status-validate.ts
index c1c1a4a0c..09b2e9145 100644
--- a/packages/api/src/business/validations/titre-etape-type-and-status-validate.ts
+++ b/packages/api/src/business/validations/titre-etape-type-and-status-validate.ts
@@ -6,7 +6,7 @@ import { isTDEExist } from 'camino-common/src/static/titresTypes_demarchesTypes_
 import { DemarcheTypeId, DemarchesTypes } from 'camino-common/src/static/demarchesTypes.js'
 import { TitreTypeId } from 'camino-common/src/static/titresTypes.js'
 
-export const titreEtapeTypeAndStatusValidate = (titreTypeId: TitreTypeId, demarcheTypeId: DemarcheTypeId, etapeTypeId: EtapeTypeId, etapeStatutId: EtapeStatutId | undefined): string[] => {
+export const tdeOldTitreEtapeTypeAndStatusValidate = (titreTypeId: TitreTypeId, demarcheTypeId: DemarcheTypeId, etapeTypeId: EtapeTypeId, etapeStatutId: EtapeStatutId | undefined): string[] => {
   if (!etapeStatutId) {
     return [`le statut est obligatoire`]
   }
diff --git a/packages/api/src/scripts/demarches-etape-statut-check.ts b/packages/api/src/scripts/demarches-etape-statut-check.ts
deleted file mode 100644
index bca179b57..000000000
--- a/packages/api/src/scripts/demarches-etape-statut-check.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import '../init.js'
-import { etapeStatutCheck } from '../tools/demarches/etape-statut-check.js'
-
-etapeStatutCheck()
-  .then(() => {
-    process.exit()
-  })
-  .catch(err => {
-    console.error(err)
-    process.exit(1)
-  })
diff --git a/packages/api/src/tools/demarches/etape-statut-check.ts b/packages/api/src/tools/demarches/etape-statut-check.ts
deleted file mode 100644
index 94ed0c3dd..000000000
--- a/packages/api/src/tools/demarches/etape-statut-check.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { EtapesTypes } from 'camino-common/src/static/etapesTypes.js'
-import { titresEtapesGet } from '../../database/queries/titres-etapes.js'
-import { userSuper } from '../../database/user-super.js'
-import { getEtapesStatuts } from 'camino-common/src/static/etapesTypesEtapesStatuts.js'
-import { isTDEExist } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/index.js'
-
-export const etapeStatutCheck = async () => {
-  console.info()
-  console.info('- - -')
-  console.info('vérification des statuts des étapes en bdd')
-  console.info()
-
-  const etapes = await titresEtapesGet(
-    {},
-    {
-      fields: {
-        demarche: { titre: { id: {} } },
-      },
-    },
-    userSuper
-  )
-
-  let errorsNb = 0
-
-  etapes.forEach(etape => {
-    const tdeExists = isTDEExist(etape.demarche!.titre!.typeId, etape.demarche!.typeId, etape.typeId)
-    const etapesStatuts = getEtapesStatuts(etape.typeId)
-
-    const etapeType = EtapesTypes[etape.typeId]
-
-    if (tdeExists && !etapesStatuts!.map(es => es.id).includes(etape.statutId)) {
-      console.info(`erreur sur le titre https://camino.beta.gouv.fr/titres/${etape.demarche!.titreId}, étape « ${etapeType.nom} » a un statut inconnu`)
-      errorsNb++
-    }
-  })
-  console.info(`erreurs : ${errorsNb} statuts inconnus`)
-}
-- 
GitLab