Files
recipe-app/frontend/lib/error-handler.ts
T

55 lines
1.7 KiB
TypeScript

/**
* Utility för att parse HTTP-responses och extrahera tydliga felmeddelanden
*/
export async function parseErrorResponse(response: Response): Promise<string> {
const status = response.status;
try {
const data = await response.json();
// Om backend skickade ett felmeddelande
if (typeof data.message === 'string') {
// Produktnamns-dubblett
if (data.message.includes('Det finns redan en annan produkt med detta namn')) {
return 'Det finns redan en annan produkt med detta namn. Välj ett unikt namn.';
}
return data.message;
}
if (data.error) {
return data.error;
}
if (data.details) {
return data.details;
}
} catch {
// Inte JSON, försök text
try {
const text = await response.text();
if (text && text.length < 200) {
return text;
}
} catch {
// Inget text-innehål
}
}
// Fallback baserat på HTTP-status
const defaultMessages: Record<number, string> = {
400: 'Ogiltiga data. Kontrollera dina inmatningar.',
401: 'Du är inte autentiserad. Logga in.',
403: 'Du har inte behörighet till detta.',
404: 'Resursen hittades inte.',
409: 'Konflikten med befintlig data.',
422: 'Valideringen misslyckades. Kontrollera dina inmatningar.',
500: 'Serverfel. Försök igen senare.',
503: 'Tjänsten är inte tillgänglig.',
};
return defaultMessages[status] || `Fel (${status}). Försök igen senare.`;
}
// Prisma unique constraint: email
if (typeof data.message === 'string' && data.message.includes('User_email_key')) {
return 'E-postadressen används redan av en annan användare.';
}