fix(errors) : humanize backend error messages for end users
Add centralized error translation layer (humanizeError) that converts raw Symfony/Doctrine/API Platform messages into user-friendly French. Fix useApi to extract errors from all backend response formats (violations, error, message, hydra:description, detail). Add toast deduplication to prevent double display. Replace error toast icon (X → CircleX) to distinguish from the dismiss button. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { ref } from 'vue'
|
||||
import { useToast } from './useToast'
|
||||
import { useApi } from './useApi'
|
||||
import { humanizeError } from '~/shared/utils/errorMessages'
|
||||
import { buildConstructeurRequestPayload, uniqueConstructeurIds } from '~/shared/constructeurUtils'
|
||||
import { useConstructeurs, type Constructeur } from './useConstructeurs'
|
||||
import { extractRelationId, normalizeRelationIds } from '~/shared/apiRelations'
|
||||
@@ -168,9 +169,9 @@ export function useProducts() {
|
||||
return result as ProductListResult
|
||||
} catch (err) {
|
||||
console.error('Erreur lors du chargement des produits:', err)
|
||||
const message = (err as Error)?.message ?? 'Erreur inconnue'
|
||||
const message = humanizeError((err as Error)?.message)
|
||||
error.value = message
|
||||
showError(`Impossible de charger les produits: ${message}`)
|
||||
showError(`Impossible de charger les produits.`)
|
||||
return { success: false, error: message }
|
||||
} finally {
|
||||
loading.value = false
|
||||
@@ -197,9 +198,9 @@ export function useProducts() {
|
||||
return { success: false, error: result.error }
|
||||
} catch (err) {
|
||||
console.error('Erreur lors de la création du produit:', err)
|
||||
const message = (err as Error)?.message ?? 'Erreur inconnue'
|
||||
const message = humanizeError((err as Error)?.message)
|
||||
error.value = message
|
||||
showError(message)
|
||||
showError('Impossible de créer le produit.')
|
||||
return { success: false, error: message }
|
||||
} finally {
|
||||
loading.value = false
|
||||
@@ -223,9 +224,9 @@ export function useProducts() {
|
||||
return { success: false, error: result.error }
|
||||
} catch (err) {
|
||||
console.error('Erreur lors de la mise à jour du produit:', err)
|
||||
const message = (err as Error)?.message ?? 'Erreur inconnue'
|
||||
const message = humanizeError((err as Error)?.message)
|
||||
error.value = message
|
||||
showError(message)
|
||||
showError('Impossible de mettre à jour le produit.')
|
||||
return { success: false, error: message }
|
||||
} finally {
|
||||
loading.value = false
|
||||
@@ -248,9 +249,9 @@ export function useProducts() {
|
||||
return { success: false, error: result.error }
|
||||
} catch (err) {
|
||||
console.error('Erreur lors de la suppression du produit:', err)
|
||||
const message = (err as Error)?.message ?? 'Erreur inconnue'
|
||||
const message = humanizeError((err as Error)?.message)
|
||||
error.value = message
|
||||
showError(message)
|
||||
showError('Impossible de supprimer le produit.')
|
||||
return { success: false, error: message }
|
||||
} finally {
|
||||
loading.value = false
|
||||
|
||||
Reference in New Issue
Block a user