corr add group

This commit is contained in:
alma 2026-01-14 12:47:48 +01:00
parent b033087a60
commit c552beffbe
2 changed files with 83 additions and 17 deletions

View File

@ -175,7 +175,21 @@ export async function POST(req: Request) {
return NextResponse.json({ message: "Non autorisé" }, { status: 401 });
}
const { name } = await req.json();
// Safely parse request body
let name: string;
try {
const body = await req.json();
name = body?.name;
} catch (parseError) {
logger.error('Error parsing request body', {
error: parseError instanceof Error ? parseError.message : String(parseError)
});
return NextResponse.json(
{ message: "Corps de requête invalide" },
{ status: 400 }
);
}
if (!name?.trim()) {
return NextResponse.json(
{ message: "Le nom du groupe est requis" },
@ -269,7 +283,36 @@ export async function POST(req: Request) {
);
}
const groupData = await response.json();
// Safely parse success response from Keycloak
let groupData: any;
try {
const text = await response.text();
if (!text || text.trim().length === 0) {
// If Keycloak returns empty response, create a group object with generated ID
logger.warn('Keycloak returned empty response for group creation', {
groupName: name
});
groupData = { id: `group-${Date.now()}` };
} else {
try {
groupData = JSON.parse(text);
} catch (parseError) {
logger.error('Failed to parse Keycloak success response as JSON', {
text: text.substring(0, 200),
error: parseError instanceof Error ? parseError.message : String(parseError)
});
// Fallback: create group object with generated ID
groupData = { id: `group-${Date.now()}` };
}
}
} catch (error) {
logger.error('Error reading Keycloak success response', {
error: error instanceof Error ? error.message : String(error)
});
// Fallback: create group object with generated ID
groupData = { id: `group-${Date.now()}` };
}
const groupId = groupData.id || Date.now().toString();
// Create calendar for the group creator

View File

@ -520,19 +520,28 @@ export default function EquipePage() {
}
// Only try to parse if we have text content
if (text && typeof text === 'string' && text.trim().length > 0) {
if (contentType.includes('application/json')) {
try {
const errorData = JSON.parse(text);
errorMessage = errorData.message || errorData.error || errorMessage;
} catch (parseError) {
// If JSON parsing fails, use the text (truncated if too long)
console.warn('Failed to parse error response as JSON:', parseError);
errorMessage = text.length > 200 ? text.substring(0, 200) + '...' : text;
if (text && typeof text === 'string') {
const trimmedText = text.trim();
if (trimmedText.length > 0) {
if (contentType.includes('application/json')) {
// Additional check: make sure it looks like JSON (starts with { or [)
if (trimmedText.startsWith('{') || trimmedText.startsWith('[')) {
try {
const errorData = JSON.parse(trimmedText);
errorMessage = errorData.message || errorData.error || errorMessage;
} catch (parseError) {
// If JSON parsing fails, use the text (truncated if too long)
console.warn('Failed to parse error response as JSON:', parseError);
errorMessage = trimmedText.length > 200 ? trimmedText.substring(0, 200) + '...' : trimmedText;
}
} else {
// Doesn't look like JSON, use as plain text
errorMessage = trimmedText.length > 200 ? trimmedText.substring(0, 200) + '...' : trimmedText;
}
} else {
// If there's text but not JSON, use it (truncated if too long)
errorMessage = trimmedText.length > 200 ? trimmedText.substring(0, 200) + '...' : trimmedText;
}
} else {
// If there's text but not JSON, use it (truncated if too long)
errorMessage = text.length > 200 ? text.substring(0, 200) + '...' : text;
}
}
} catch (error) {
@ -548,13 +557,27 @@ export default function EquipePage() {
let newGroup;
try {
const text = await response.text();
if (!text || text.trim().length === 0) {
const trimmedText = text?.trim() || '';
if (!trimmedText || trimmedText.length === 0) {
throw new Error("Réponse vide du serveur");
}
newGroup = JSON.parse(text);
// Make sure it looks like JSON before parsing
if (!trimmedText.startsWith('{') && !trimmedText.startsWith('[')) {
throw new Error("Réponse invalide du serveur (format non-JSON)");
}
try {
newGroup = JSON.parse(trimmedText);
} catch (parseError) {
console.error("Error parsing JSON:", parseError);
throw new Error("Erreur lors de la lecture de la réponse du serveur");
}
} catch (parseError) {
console.error("Error parsing success response:", parseError);
throw new Error("Erreur lors de la lecture de la réponse du serveur");
const errorMsg = parseError instanceof Error ? parseError.message : "Erreur lors de la lecture de la réponse du serveur";
throw new Error(errorMsg);
}
setGroups(prev => [...prev, newGroup]);