This commit is contained in:
nBiqoz
2025-07-28 21:15:41 +02:00
parent dc734e08f0
commit 7a086c4749
4 changed files with 169 additions and 27 deletions

View File

@@ -54,7 +54,9 @@ export const useAnonymization = ({
const textToProcess = sourceText || fileContent || "";
if (!textToProcess.trim()) {
setError("Veuillez saisir du texte à anonymiser ou télécharger un fichier");
setError(
"Veuillez saisir du texte à anonymiser ou télécharger un fichier"
);
return;
}
@@ -69,7 +71,11 @@ export const useAnonymization = ({
const formData = new FormData();
if (uploadedFile) {
console.log("📁 Traitement fichier:", uploadedFile.name);
console.log("📁 Traitement fichier:", {
name: uploadedFile.name,
type: uploadedFile.type,
size: uploadedFile.size
});
formData.append("file", uploadedFile);
} else {
console.log("📝 Traitement texte saisi");
@@ -79,13 +85,45 @@ export const useAnonymization = ({
}
console.log("🔍 Appel à /api/process-document avec Presidio...");
console.log("📦 FormData préparée:", Array.from(formData.entries()));
const response = await fetch("/api/process-document", {
method: "POST",
body: formData,
});
console.log("📡 Réponse reçue:", {
ok: response.ok,
status: response.status,
statusText: response.statusText,
headers: Object.fromEntries(response.headers.entries())
});
if (!response.ok) {
throw new Error(`Erreur API: ${response.status}`);
let errorMessage = `Erreur HTTP: ${response.status}`;
try {
const responseText = await response.text();
console.log("📄 Contenu de l'erreur:", responseText);
if (responseText.trim()) {
try {
const errorData = JSON.parse(responseText);
if (errorData.error) {
errorMessage = errorData.error;
console.log("✅ Message détaillé récupéré:", errorMessage);
}
} catch (jsonError) {
console.error("❌ Erreur parsing JSON:", jsonError); // ✅ Utiliser la variable
console.error("❌ Réponse non-JSON:", responseText);
errorMessage = `Erreur ${response.status}: Réponse invalide du serveur`;
}
}
} catch (readError) {
console.error("❌ Impossible de lire la réponse:", readError);
}
throw new Error(errorMessage);
}
const data: ProcessDocumentResponse = await response.json();
@@ -98,30 +136,34 @@ export const useAnonymization = ({
if (data.anonymizedText) {
console.log("✅ Anonymisation réussie avec Presidio");
setOutputText(data.anonymizedText);
// Extraire les mappings depuis les résultats Presidio (plus d'erreur 'any')
if (data.analyzerResults && data.text) {
const mappings: EntityMapping[] = data.analyzerResults.map((entity: PresidioAnalyzerResult, index: number) => ({
originalValue: data.text!.substring(entity.start, entity.end),
anonymizedValue: `[${entity.entity_type}${index + 1}]`,
entityType: entity.entity_type,
startIndex: entity.start,
endIndex: entity.end
}));
const mappings: EntityMapping[] = data.analyzerResults.map(
(entity: PresidioAnalyzerResult, index: number) => ({
originalValue: data.text!.substring(entity.start, entity.end),
anonymizedValue: `[${entity.entity_type}${index + 1}]`,
entityType: entity.entity_type,
startIndex: entity.start,
endIndex: entity.end,
})
);
setEntityMappings(mappings);
console.log("📋 Entités détectées:", mappings.length);
console.log("🔍 Détails des entités:", mappings);
}
} else if (data.text) {
console.log("⚠️ Fallback: Presidio non disponible, texte original retourné");
console.log(
"⚠️ Fallback: Presidio non disponible, texte original retourné"
);
setOutputText(data.text);
setError("Presidio temporairement indisponible. Texte non anonymisé.");
}
} catch (error) {
console.error("❌ Erreur anonymisation:", error);
console.error("❌ Erreur anonymisation complète:", error);
setError(
error instanceof Error
? `Erreur Presidio: ${error.message}`
? error.message
: "Erreur lors de l'anonymisation avec Presidio"
);
} finally {
@@ -130,4 +172,4 @@ export const useAnonymization = ({
};
return { anonymizeData, isProcessing };
};
};