Spaces:
Sleeping
Sleeping
File size: 1,593 Bytes
1906404 f2e0209 1906404 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | import { generateResume } from '../services/aiService.js';
import { saveResume, getLatestResume } from '../services/firebaseService.js';
/**
* POST /api/resume/generate
* Body: { github, linkedin, codolio, email, jobDesc, repos }
*/
export async function generateResumeHandler(req, res) {
try {
const { github, linkedin, codolio, email, jobDesc, repos } = req.body;
if (!github || !linkedin || !jobDesc) {
return res.status(400).json({ error: 'GitHub, LinkedIn, and job description are required.' });
}
const startTime = Date.now();
const latexContent = await generateResume({ github, linkedin, codolio, email, jobDesc, repos });
const timeTakenMs = Date.now() - startTime;
// Save to Firestore
const resumeId = await saveResume(req.user.uid, {
content: latexContent,
github,
linkedin,
});
res.json({
resumeId,
latex: latexContent,
timeTakenMs,
});
} catch (error) {
console.error('Resume generation error:', error);
res.status(500).json({ error: 'Failed to generate resume.', details: error.message });
}
}
/**
* GET /api/resume
* Returns the latest generated resume for the authenticated user.
*/
export async function getResume(req, res) {
try {
const resume = await getLatestResume(req.user.uid);
if (!resume) {
return res.status(404).json({ error: 'No resume found. Generate one first.' });
}
res.json({ resume });
} catch (error) {
console.error('Get resume error:', error);
res.status(500).json({ error: 'Failed to fetch resume.' });
}
}
|