semblance/src/hooks/usePersonaStorage.ts
2025-12-19 19:26:16 +00:00

77 lines
2.1 KiB
TypeScript
Executable file

import { useState, useEffect } from 'react';
import { Persona } from '@/types/persona';
import { personasApi } from '@/lib/api';
import { toast } from 'sonner';
export const GENERATED_PERSONAS_KEY = 'ai-recruiter-generated-personas';
export function usePersonaStorage() {
const [storedPersonas, setStoredPersonas] = useState<Persona[]>([]);
const savePersonas = async (personas: Persona[]) => {
const savedPersonas = [];
for (const persona of personas) {
// Clean up any local-specific properties before sending to API
const personaToSave = { ...persona };
if (personaToSave._id && typeof personaToSave._id === 'string' && personaToSave._id.startsWith('local-')) {
delete personaToSave._id;
}
const result = await personasApi.create(personaToSave);
console.log('Persona saved to database:', result.data);
// Add the database ID to the persona
savedPersonas.push({
...persona,
id: result.data._id || result.data.id,
_id: result.data._id || result.data.id,
isDbPersona: true
});
}
setStoredPersonas(savedPersonas);
};
const loadPersonas = async (): Promise<Persona[]> => {
const response = await personasApi.getAll();
if (response && response.data && Array.isArray(response.data)) {
console.log('Personas loaded from database:', response.data.length);
return response.data.map(p => ({
...p,
id: p._id || p.id,
isDbPersona: true
}));
}
return [];
};
// Load personas from database or localStorage on component mount
useEffect(() => {
const fetchPersonas = async () => {
const personas = await loadPersonas();
setStoredPersonas(personas);
};
fetchPersonas();
}, []);
const clearPersonas = async () => {
// Clear all personas from database
const personas = await loadPersonas();
for (const persona of personas) {
if (persona._id) {
await personasApi.delete(persona._id);
}
}
setStoredPersonas([]);
};
return {
storedPersonas,
savePersonas,
loadPersonas,
clearPersonas
};
}