Skip to content

refactor(server-nestjs): uniformiser la vérification du type des erreurs dans les utils #2629

Description

@shikanime

Description

La vérification du type des erreurs est incohérente entre les modules du server-nestjs. Chaque module client teste ses erreurs de façon ad hoc :

  • gitlab centralise déjà ses gardes typées dans gitlab.utils.ts (isGitbeakerNotFound, hasGitbeakerCause).
  • keycloak utilise un helper partagé getErrorResponseStatus.
  • vault et nexus dispersent des vérifications instanceof VaultError && error.kind === 'NotFound' / instanceof NexusError && error.status === 404 en dur dans les services et clients (plusieurs occurrences chacun).
  • registry et nexus.service répètent la même vérification VaultError NotFound.
  • gitlab-client teste un 401 via instanceof GitbeakerRequestError && error.cause?.response.status === 401 sans garde centralisée.

Cette duplication rend les contrôles fragiles (la sémantique de la 404 / du conflit est réimplémentée à chaque site) et difficile à faire évoluer.

Comportement attendu

Uniformiser la vérification du type des erreurs en exposant, dans chaque util de module, une garde typée (même forme que isGitbeakerNotFound) :

  • vault.utils.ts : isVaultNotFound, isVaultBadRequest.
  • nexus.utils.ts : isNexusNotFound.
  • gitlab.utils.ts : isGitbeakerUnauthorized.

Chaque site d'appel utilise la garde du module au lieu de réimplémenter instanceof + champ.

Définition du fini

  • vault.utils.ts expose isVaultNotFound et isVaultBadRequest ; tous les appels instanceof VaultError de la 404/400 les utilisent.
  • nexus.utils.ts expose isNexusNotFound ; tous les appels 404 de nexus-client l'utilisent.
  • gitlab.utils.ts expose isGitbeakerUnauthorized ; le contrôle 401 de gitlab-client l'utilise.
  • Les occurrences de registry.service et nexus.service sur la 404 Vault utilisent isVaultNotFound.
  • Tests unitaires sur les nouvelles gardes.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions