/** * Utility för att parse HTTP-responses och extrahera tydliga felmeddelanden */ export async function parseErrorResponse(response: Response): Promise { const status = response.status; try { const data = await response.json(); // Om backend skickade ett felmeddelande if (data.message) { 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 = { 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.`; } /** * Hämta data från API med bra felhantering */ export async function fetchWithErrorHandling( url: string, options?: RequestInit, ): Promise { try { const response = await fetch(url, options); if (!response.ok) { const errorMessage = await parseErrorResponse(response); throw new Error(errorMessage); } return await response.json(); } catch (err) { if (err instanceof Error) { throw err; } throw new Error('Ett okänt fel inträffade.'); } }