183 lines
4.8 KiB
TypeScript
183 lines
4.8 KiB
TypeScript
/**
|
|
* API pour la gestion des dossiers par hash
|
|
*/
|
|
|
|
const API_BASE_URL = '/api'
|
|
|
|
export interface FolderResult {
|
|
fileHash: string
|
|
document: {
|
|
id: string
|
|
fileName: string
|
|
mimeType: string
|
|
fileSize: number
|
|
uploadTimestamp: number
|
|
}
|
|
classification: {
|
|
documentType: string
|
|
language: string
|
|
}
|
|
extraction: {
|
|
text: {
|
|
raw: string
|
|
processed: string
|
|
}
|
|
entities: {
|
|
persons: string[]
|
|
addresses: string[]
|
|
companies: string[]
|
|
}
|
|
}
|
|
metadata: {
|
|
quality: {
|
|
globalConfidence: number
|
|
}
|
|
}
|
|
status: {
|
|
timestamp: number
|
|
}
|
|
}
|
|
|
|
export interface FolderResponse {
|
|
success: boolean
|
|
folderHash: string
|
|
results: FolderResult[]
|
|
pending: Array<{
|
|
fileHash: string
|
|
folderHash: string
|
|
timestamp: string
|
|
status: string
|
|
}>
|
|
hasPending: boolean
|
|
count: number
|
|
}
|
|
|
|
export interface CreateFolderResponse {
|
|
success: boolean
|
|
folderHash: string
|
|
message: string
|
|
}
|
|
|
|
// Créer un nouveau dossier
|
|
export async function createFolder(): Promise<CreateFolderResponse> {
|
|
const response = await fetch(`${API_BASE_URL}/folders`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
})
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Erreur lors de la création du dossier: ${response.statusText}`)
|
|
}
|
|
|
|
return response.json()
|
|
}
|
|
|
|
// Créer le dossier par défaut avec les fichiers de test
|
|
export async function createDefaultFolder(): Promise<CreateFolderResponse> {
|
|
const response = await fetch(`${API_BASE_URL}/folders/default`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
})
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Erreur lors de la création du dossier par défaut: ${response.statusText}`)
|
|
}
|
|
|
|
return response.json()
|
|
}
|
|
|
|
// Utiliser le dossier par défaut existant (sans créer de nouveau dossier)
|
|
export async function getDefaultFolder(): Promise<CreateFolderResponse> {
|
|
// Utiliser le dossier par défaut existant avec les fichiers de test
|
|
return {
|
|
success: true,
|
|
folderHash: '7d99a85daf66a0081a0e881630e6b39b',
|
|
message: 'Dossier par défaut récupéré',
|
|
}
|
|
}
|
|
|
|
// Récupérer les résultats d'un dossier
|
|
export async function getFolderResults(folderHash: string): Promise<FolderResponse> {
|
|
console.log(`[API] Appel getFolderResults pour le dossier: ${folderHash}`)
|
|
console.log(`[API] API_BASE_URL: ${API_BASE_URL}`)
|
|
console.log(`[API] URL complète: ${API_BASE_URL}/folders/${folderHash}/results`)
|
|
|
|
try {
|
|
// Créer un AbortController pour gérer le timeout
|
|
const controller = new AbortController()
|
|
const timeoutId = setTimeout(() => {
|
|
console.log(`[API] Timeout après 10 secondes`)
|
|
controller.abort()
|
|
}, 10000)
|
|
|
|
console.log(`[API] Début de la requête fetch...`)
|
|
const url = `${API_BASE_URL}/folders/${folderHash}/results?t=${Date.now()}`
|
|
console.log(`[API] URL finale: ${url}`)
|
|
const response = await fetch(url, {
|
|
signal: controller.signal,
|
|
headers: {
|
|
Accept: 'application/json',
|
|
'Content-Type': 'application/json',
|
|
},
|
|
})
|
|
|
|
clearTimeout(timeoutId)
|
|
console.log(`[API] Réponse reçue:`, response.status, response.statusText)
|
|
console.log(`[API] Headers:`, Object.fromEntries(response.headers.entries()))
|
|
|
|
if (!response.ok) {
|
|
console.error(`[API] Erreur HTTP:`, response.status, response.statusText)
|
|
throw new Error(
|
|
`Erreur lors de la récupération des résultats du dossier: ${response.statusText}`,
|
|
)
|
|
}
|
|
|
|
console.log(`[API] Début du parsing JSON...`)
|
|
const data = await response.json()
|
|
console.log(`[API] Données reçues:`, data)
|
|
console.log(`[API] Nombre de résultats:`, data.results?.length || 0)
|
|
|
|
return data
|
|
} catch (error) {
|
|
if (error instanceof Error && error.name === 'AbortError') {
|
|
console.error(`[API] Requête annulée (timeout)`)
|
|
throw new Error('Timeout: La requête a pris trop de temps')
|
|
}
|
|
console.error(`[API] Erreur lors de l'appel API:`, error)
|
|
throw error
|
|
}
|
|
}
|
|
|
|
// Récupérer un fichier original depuis un dossier
|
|
export async function getFolderFile(folderHash: string, fileHash: string): Promise<Blob> {
|
|
const response = await fetch(`${API_BASE_URL}/folders/${folderHash}/files/${fileHash}`)
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Erreur lors de la récupération du fichier: ${response.statusText}`)
|
|
}
|
|
|
|
return response.blob()
|
|
}
|
|
|
|
// Uploader un fichier dans un dossier
|
|
export async function uploadFileToFolder(file: File, folderHash: string): Promise<FolderResult> {
|
|
const formData = new FormData()
|
|
formData.append('document', file)
|
|
formData.append('folderHash', folderHash)
|
|
|
|
const response = await fetch(`${API_BASE_URL}/extract`, {
|
|
method: 'POST',
|
|
body: formData,
|
|
})
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Erreur lors de l'upload: ${response.statusText}`)
|
|
}
|
|
|
|
return response.json()
|
|
}
|