77 lines
2.1 KiB
TypeScript
Executable file
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
|
|
};
|
|
}
|