Added level report

This commit is contained in:
Joao Ramos
2024-01-04 22:20:00 +00:00
parent 432f4a735f
commit 7a297a6f6c
6 changed files with 310 additions and 110 deletions

View File

@@ -14,16 +14,14 @@ import { withIronSessionApiRoute } from "iron-session/next";
import { sessionOptions } from "@/lib/session";
import ReactPDF from "@react-pdf/renderer";
import PDFReport from "@/exams/pdf";
import {
ref,
uploadBytes,
} from "firebase/storage";
import { ref, uploadBytes } from "firebase/storage";
import { Stat } from "@/interfaces/user";
import { User } from "@/interfaces/user";
import { Module } from "@/interfaces";
import { ModuleScore } from "@/interfaces/module.scores";
import qrcode from 'qrcode';
import qrcode from "qrcode";
import { SkillExamDetails } from "@/exams/pdf/details/skill.exam";
import { LevelExamDetails } from "@/exams/pdf/details/level.exam";
const db = getFirestore(app);
export default withIronSessionApiRoute(handler, sessionOptions);
@@ -122,7 +120,7 @@ const generateQRCode = async (link: string) => {
const qrCodeDataURL = await qrcode.toDataURL(link);
return qrCodeDataURL;
} catch (error) {
console.error('Error generating QR code:', error);
console.error("Error generating QR code:", error);
return null;
}
};
@@ -157,7 +155,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
const stats = docsSnap.docs.map((d) => d.data());
const results = stats.reduce((accm: ModuleScore[], { module, score }) => {
const fixedModuleStr = module[0].toUpperCase() + module.substring(1)
const fixedModuleStr = module[0].toUpperCase() + module.substring(1);
if (accm.find((e: ModuleScore) => e.module === fixedModuleStr)) {
return accm.map((e: ModuleScore) => {
if (e.module === fixedModuleStr) {
@@ -192,9 +190,22 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
const overallResult = overallScore / overallTotal;
const performanceSummary = getPerformanceSummary("level", overallResult);
const qrcode = await generateQRCode((req.headers.origin || '') + req.url);
const qrcode = await generateQRCode((req.headers.origin || "") + req.url);
if(qrcode) {
const overallDetail = {
module: "Overall",
score: overallScore,
total: overallTotal,
} as ModuleScore;
const testDetails = [overallDetail, ...results];
const renderDetails = () => {
if (stats[0].module === "level") {
return <LevelExamDetails detail={overallDetail} />;
}
return <SkillExamDetails testDetails={testDetails} />;
};
if (qrcode) {
const pdfStream = await ReactPDF.renderToStream(
<PDFReport
date={new Date(stat.date).toLocaleString()}
@@ -203,14 +214,8 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
id={user.id}
gender={user.demographicInformation?.gender}
summary={performanceSummary}
testDetails={[
{
module: "Overall",
score: overallScore,
total: overallTotal,
},
...results,
]}
testDetails={testDetails}
renderDetails={renderDetails()}
logo={"public/logo_title.png"}
qrcode={qrcode}
/>