From f30d0c0dc8e3322c7b48449c00a20d69e8ab0158 Mon Sep 17 00:00:00 2001 From: "guptamanas149@gmail.com" Date: Fri, 7 Jul 2023 18:17:59 +0530 Subject: [PATCH] added csv route --- controllers/form.controller.js | 44 ++++++++++++++++++++---- controllers/formSubmission.controller.js | 19 +++++----- routes/form.routes.js | 2 ++ 3 files changed, 48 insertions(+), 17 deletions(-) diff --git a/controllers/form.controller.js b/controllers/form.controller.js index 7406c8c..e7cf0b9 100644 --- a/controllers/form.controller.js +++ b/controllers/form.controller.js @@ -207,8 +207,14 @@ export async function getFormSubmissions(req, res) { try { const { formId } = req.params; const { limit, skip } = req.query; - - const formSubmissions = await prisma.formSubmission.findMany({ + const submissionCountPromise = prisma.formSubmission.count({ + where: { + formId: formId, + }, + }); + const formSubmissionsPromise = prisma.formSubmission.findMany({ + take: parseInt(limit), + skip: parseInt(skip), where: { formId: formId, }, @@ -220,11 +226,15 @@ export async function getFormSubmissions(req, res) { data: true, createdAt: true, }, - take: limit, - skip: skip, }); - - return response_200(res, 'OK', formSubmissions); + let [submissionCount, formSubmissions] = await Promise.all([ + submissionCountPromise, + formSubmissionsPromise, + ]); + return response_200(res, 'OK', { + submissions: formSubmissions, + totalSubmissions: submissionCount, + }); } catch (error) { console.log(error); return response_500(res, 'Server Error', error); @@ -280,3 +290,25 @@ export async function generateSubmissionLink(req, res) { return response_500(res, 'Server Error', error); } } +export async function generateCSV(req, res) { + try { + const { formId } = req.params; + const formSubmissions = await prisma.formSubmission.findMany({ + where: { + formId: formId, + }, + select: { + data: true, + }, + }); + let csv = 'data:text/csv;charset=utf-8,'; + csv += Object.keys(formSubmissions[0].data).join(',') + '\n'; + formSubmissions.forEach((submission) => { + csv += Object.values(submission.data).join(',') + '\n'; + }); + let encodeUri = encodeURI(csv); + return response_200(res, 'OK', { encodeUri }); + } catch (error) { + return response_500(res, 'Server Error', error); + } +} diff --git a/controllers/formSubmission.controller.js b/controllers/formSubmission.controller.js index f51a520..96a0249 100644 --- a/controllers/formSubmission.controller.js +++ b/controllers/formSubmission.controller.js @@ -14,7 +14,6 @@ import { verifySubmissionRecaptcha } from '../utils/recaptcha.js'; export async function createFormSubmission(req, res) { try { - const grcToken = req.body['grc-token']; const encryptedStr = req.query.formRef; const decryptedStr = dcryptString(encryptedStr); @@ -23,13 +22,11 @@ export async function createFormSubmission(req, res) { const form = await Form.findOne({ formId: formId }).populate('project'); if (!form) return response_400(res, 'Form not found'); - let incomingTime = new Date(form.submisssionLinkGeneratedAt).getTime(); if (incomingTime !== submisssionLinkGeneratedAt) return response_400(res, 'Link expired'); - - if (form.project.allowRecaptcha) { + if (form.project.allowRecaptcha && form.hasRecaptchaVerificatio) { if (!grcToken) return response_401(res, 'Recaptcha token not found'); const recaptcha = await verifySubmissionRecaptcha( grcToken, @@ -38,13 +35,13 @@ export async function createFormSubmission(req, res) { if (!recaptcha) return response_401(res, 'Recaptcha verification failed'); } - - const allowedOrigins = form.project.allowedOrigins; - if (allowedOrigins.length > 0) { - const origin = req.headers.origin; - if (!allowedOrigins.includes(origin)) - return response_401(res, 'Origin not allowed'); - } + // const allowedOrigins = form.project.allowedOrigins; + // console.log(allowedOrigins); + // if (allowedOrigins.length > 0) { + // const origin = req.headers.origin; + // if (!allowedOrigins.includes(origin)) + // return response_401(res, 'Origin not allowed'); + // } const schema = form.schema; const submissionData = req.body; diff --git a/routes/form.routes.js b/routes/form.routes.js index 3bb1c6e..ff50a93 100644 --- a/routes/form.routes.js +++ b/routes/form.routes.js @@ -8,6 +8,7 @@ import { updateForm, getForm, getFormSubmissions, + generateCSV, } from '../controllers/form.controller.js'; const router = Router(); @@ -18,4 +19,5 @@ router.patch('/update/:id', verifiedMiddleware, updateForm); router.delete('/', verifiedMiddleware, deleteForm); router.get('/dashboard/:formId', verifiedMiddleware, getForm); router.get('/submissions/:formId', verifiedMiddleware, getFormSubmissions); +router.get('/csv/:formId', verifiedMiddleware, generateCSV); export default router;