Added level report
This commit is contained in:
@@ -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}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user