/** * 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 (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 = { 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.'; }