Skip to content
This repository has been archived by the owner on Dec 10, 2023. It is now read-only.

Commit

Permalink
added csv route
Browse files Browse the repository at this point in the history
  • Loading branch information
Manas2403 committed Jul 7, 2023
1 parent 2f5bc43 commit f30d0c0
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 17 deletions.
44 changes: 38 additions & 6 deletions controllers/form.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
},
Expand All @@ -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);
Expand Down Expand Up @@ -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);
}
}
19 changes: 8 additions & 11 deletions controllers/formSubmission.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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,
Expand All @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions routes/form.routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
updateForm,
getForm,
getFormSubmissions,
generateCSV,
} from '../controllers/form.controller.js';
const router = Router();

Expand All @@ -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;

0 comments on commit f30d0c0

Please sign in to comment.