diff --git a/packages/api/src/database/queries/titres-etapes.queries.ts b/packages/api/src/database/queries/titres-etapes.queries.ts index 6d2fdc8dd70e856207ecce63c57852ddca2fd1f3..f4cc9f320fa23dc772655a7c1a5ec58be99ae62d 100644 --- a/packages/api/src/database/queries/titres-etapes.queries.ts +++ b/packages/api/src/database/queries/titres-etapes.queries.ts @@ -64,7 +64,7 @@ import { CommuneId } from 'camino-common/src/static/communes' import { EtapeStatutId, etapeStatutIdValidator } from 'camino-common/src/static/etapesStatuts' import { contenuValidator, FlattenedContenu, heritageContenuValidator } from 'camino-common/src/etape-form' import { DemarcheTypeId, demarcheTypeIdValidator } from 'camino-common/src/static/demarchesTypes' -import { Effect, Match, Option, pipe } from 'effect' +import { Effect, Option, pipe } from 'effect' import { CaminoError } from 'camino-common/src/zod-tools' import { callAndExit, shortCircuitError, zodParseEffectTyped } from '../../tools/fp-tools' import { TempDocumentName } from 'camino-common/src/document' @@ -526,19 +526,7 @@ export const getDocumentsByEtapeId = ( demarche: CanReadDemarche ): Effect.Effect<EtapeDocument[], CaminoError<GetDocumentsByEtapeIdErrors>> => getEtapeDocumentLargeObjectIdsByEtapeId(titre_etape_id, pool, user, titreTypeId, titresAdministrationsLocales, entreprisesTitulairesOuAmodiataires, etapeTypeId, demarche).pipe( - Effect.flatMap(result => - zodParseEffectTyped(z.array(etapeDocumentValidator), result).pipe( - Effect.mapError(caminoError => - Match.value(caminoError.message).pipe( - Match.when('Problème de validation de données', () => ({ - ...caminoError, - message: errorParseGetDocumentsByEtapeId, - })), - Match.exhaustive - ) - ) - ) - ) + Effect.flatMap(result => zodParseEffectTyped(z.array(etapeDocumentValidator), result, errorParseGetDocumentsByEtapeId)) ) const getEtapesWithAutomaticStatutValidator = z.object({ diff --git a/packages/api/src/tools/fp-tools.ts b/packages/api/src/tools/fp-tools.ts index 4fedc8aeacce18e2a3b76b2ee4b34c92e806ef3a..b670998c55db688ec376adf1c39af32f85ab9c74 100644 --- a/packages/api/src/tools/fp-tools.ts +++ b/packages/api/src/tools/fp-tools.ts @@ -3,8 +3,14 @@ import { Cause, Effect, Exit, pipe } from 'effect' import { ZodTypeAny } from 'zod' import { fromError, isZodErrorLike } from 'zod-validation-error' +/** + * @deprecated use more precise message + */ export type ZodUnparseable = 'Problème de validation de données' +/** + * @deprecated use zodParseEffectTyped + */ export const zodParseEffectCallback = <T extends ZodTypeAny>(validator: T) => (value: unknown): Effect.Effect<T['_output'], CaminoError<ZodUnparseable>> => @@ -20,6 +26,9 @@ const zodErrorToDetail = (myError: unknown): string | undefined => { return undefined } +/** + * @deprecated use zodParseEffectTyped + */ export const zodParseEffect = <T extends ZodTypeAny>(validator: T, item: unknown): Effect.Effect<T['_output'], CaminoError<ZodUnparseable>> => { return Effect.try({ try: () => validator.parse(item), @@ -27,10 +36,10 @@ export const zodParseEffect = <T extends ZodTypeAny>(validator: T, item: unknown }) } -export const zodParseEffectTyped = <T extends ZodTypeAny>(validator: T, item: T['_output']): Effect.Effect<T['_output'], CaminoError<ZodUnparseable>> => { +export const zodParseEffectTyped = <T extends ZodTypeAny, U extends string>(validator: T, item: T['_output'], errorMessage: U): Effect.Effect<T['_output'], CaminoError<U>> => { return Effect.try({ try: () => validator.parse(item), - catch: myError => ({ message: 'Problème de validation de données', detail: zodErrorToDetail(myError), zodErrorReadableMessage: zodErrorToReadableMessage(myError) }), + catch: myError => ({ message: errorMessage, detail: zodErrorToDetail(myError), zodErrorReadableMessage: zodErrorToReadableMessage(myError) }), }) }