|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export interface AnalyzedDocument { |
|
|
id: string |
|
|
filename: string |
|
|
analyzedAt: string |
|
|
type: "bias-detection" | "letter-generation" |
|
|
result: { |
|
|
totalSentences?: number |
|
|
biasedCount?: number |
|
|
neutralCount?: number |
|
|
success: boolean |
|
|
} |
|
|
sessionId?: string |
|
|
} |
|
|
|
|
|
const CACHE_KEY = "setu_analyzed_documents" |
|
|
const MAX_CACHE_SIZE = 100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function getCachedDocuments(): AnalyzedDocument[] { |
|
|
try { |
|
|
const cached = localStorage.getItem(CACHE_KEY) |
|
|
if (!cached) return [] |
|
|
return JSON.parse(cached) |
|
|
} catch (error) { |
|
|
console.error("Error reading document cache:", error) |
|
|
return [] |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function addDocumentToCache(document: Omit<AnalyzedDocument, "id" | "analyzedAt">): void { |
|
|
try { |
|
|
const documents = getCachedDocuments() |
|
|
|
|
|
const newDocument: AnalyzedDocument = { |
|
|
...document, |
|
|
id: generateDocumentId(), |
|
|
analyzedAt: new Date().toISOString(), |
|
|
} |
|
|
|
|
|
|
|
|
documents.unshift(newDocument) |
|
|
|
|
|
|
|
|
if (documents.length > MAX_CACHE_SIZE) { |
|
|
documents.splice(MAX_CACHE_SIZE) |
|
|
} |
|
|
|
|
|
localStorage.setItem(CACHE_KEY, JSON.stringify(documents)) |
|
|
} catch (error) { |
|
|
console.error("Error adding document to cache:", error) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function getDocumentStats() { |
|
|
const documents = getCachedDocuments() |
|
|
|
|
|
const biasDocuments = documents.filter(d => d.type === "bias-detection") |
|
|
const totalAnalyzed = biasDocuments.length |
|
|
|
|
|
let totalInclusive = 0 |
|
|
let totalFlagged = 0 |
|
|
|
|
|
biasDocuments.forEach(doc => { |
|
|
if (doc.result.biasedCount === 0) { |
|
|
totalInclusive++ |
|
|
} else if (doc.result.biasedCount && doc.result.biasedCount > 0) { |
|
|
totalFlagged++ |
|
|
} |
|
|
}) |
|
|
|
|
|
const letterDocuments = documents.filter(d => d.type === "letter-generation") |
|
|
const totalLetters = letterDocuments.length |
|
|
|
|
|
return { |
|
|
totalAnalyzed, |
|
|
totalInclusive, |
|
|
totalFlagged, |
|
|
totalLetters, |
|
|
allDocuments: documents, |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function clearDocumentCache(): void { |
|
|
try { |
|
|
localStorage.removeItem(CACHE_KEY) |
|
|
} catch (error) { |
|
|
console.error("Error clearing document cache:", error) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function removeDocumentFromCache(documentId: string): void { |
|
|
try { |
|
|
const documents = getCachedDocuments() |
|
|
const filtered = documents.filter(d => d.id !== documentId) |
|
|
localStorage.setItem(CACHE_KEY, JSON.stringify(filtered)) |
|
|
} catch (error) { |
|
|
console.error("Error removing document from cache:", error) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function generateDocumentId(): string { |
|
|
return `doc_${Date.now()}_${Math.random().toString(36).substr(2, 9)}` |
|
|
} |
|
|
|