| const { PDFParse } = require("pdf-parse") |
| const { generateInterviewReport, generateResumePdf } = require("../services/ai.service") |
| const interviewReportModel = require("../models/interviewReport.model") |
|
|
|
|
| |
| |
| |
| |
| async function generateInterViewReportController(req, res) { |
| try { |
| if (!req.file) { |
| return res.status(400).json({ message: "Please upload a resume PDF file." }) |
| } |
|
|
| const pdfDoc = new PDFParse(Uint8Array.from(req.file.buffer)) |
| const resumeData = await pdfDoc.getText() |
| const resumeContent = resumeData.text || "" |
| const { selfDescription, jobDescription } = req.body |
|
|
| if (!jobDescription) { |
| return res.status(400).json({ message: "Job description is required." }) |
| } |
|
|
| const interViewReportByAi = await generateInterviewReport({ |
| resume: resumeContent, |
| selfDescription: selfDescription || "", |
| jobDescription |
| }) |
|
|
| const interviewReport = await interviewReportModel.create({ |
| user: req.user.id, |
| resume: resumeContent, |
| selfDescription: selfDescription || "", |
| jobDescription, |
| ...interViewReportByAi |
| }) |
|
|
| res.status(201).json({ |
| message: "Interview report generated successfully.", |
| interviewReport |
| }) |
| } catch (err) { |
| console.error("generateInterViewReportController error:", err) |
| res.status(500).json({ message: "Failed to generate interview report. Please try again.", error: err.message }) |
| } |
| } |
|
|
| |
| |
| |
| |
| async function getInterviewReportByIdController(req, res) { |
| try { |
| const { interviewId } = req.params |
|
|
| const interviewReport = await interviewReportModel.findOne({ _id: interviewId, user: req.user.id }) |
|
|
| if (!interviewReport) { |
| return res.status(404).json({ |
| message: "Interview report not found." |
| }) |
| } |
|
|
| res.status(200).json({ |
| message: "Interview report fetched successfully.", |
| interviewReport |
| }) |
| } catch (err) { |
| console.error("getInterviewReportByIdController error:", err) |
| res.status(500).json({ message: "Failed to fetch interview report." }) |
| } |
| } |
|
|
|
|
| |
| |
| |
| |
| async function getAllInterviewReportsController(req, res) { |
| try { |
| const interviewReports = await interviewReportModel |
| .find({ user: req.user.id }) |
| .sort({ createdAt: -1 }) |
| .select("-resume -selfDescription -jobDescription -__v -technicalQuestions -behavioralQuestions -technicalQuiz -skillGaps -preparationPlan") |
|
|
| res.status(200).json({ |
| message: "Interview reports fetched successfully.", |
| interviewReports |
| }) |
| } catch (err) { |
| console.error("getAllInterviewReportsController error:", err) |
| res.status(500).json({ message: "Failed to fetch interview reports." }) |
| } |
| } |
|
|
|
|
| |
| |
| |
| |
| async function generateResumePdfController(req, res) { |
| try { |
| const { interviewReportId } = req.params |
| const { candidateAnswers = [] } = req.body |
|
|
| const interviewReport = await interviewReportModel.findById(interviewReportId) |
|
|
| if (!interviewReport) { |
| return res.status(404).json({ |
| message: "Interview report not found." |
| }) |
| } |
|
|
| const { resume, jobDescription, selfDescription } = interviewReport |
|
|
| const pdfBuffer = await generateResumePdf({ resume, jobDescription, selfDescription, candidateAnswers }) |
|
|
| res.set({ |
| "Content-Type": "application/pdf", |
| "Content-Disposition": `attachment; filename=resume_${interviewReportId}.pdf` |
| }) |
|
|
| res.send(pdfBuffer) |
| } catch (err) { |
| console.error("generateResumePdfController error:", err) |
| res.status(500).json({ message: "Failed to generate resume PDF.", error: err.message }) |
| } |
| } |
|
|
| |
| |
| |
| |
| async function evaluateAnswerController(req, res) { |
| try { |
| const { question, answer } = req.body |
|
|
| if (!question || !answer) { |
| return res.status(400).json({ message: "Question and answer are required." }) |
| } |
|
|
| const { evaluateCandidateAnswer } = require("../services/ai.service") |
| const evaluation = await evaluateCandidateAnswer({ question, answer }) |
|
|
| res.status(200).json({ |
| message: "Answer evaluated successfully.", |
| evaluation |
| }) |
| } catch (err) { |
| console.error("evaluateAnswerController error:", err) |
| res.status(500).json({ message: "Failed to evaluate answer. Please try again." }) |
| } |
| } |
|
|
| module.exports = { |
| generateInterViewReportController, |
| getInterviewReportByIdController, |
| getAllInterviewReportsController, |
| generateResumePdfController, |
| evaluateAnswerController |
| } |