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

Commit

Permalink
Merge pull request #147 from GammaMicrowave/main
Browse files Browse the repository at this point in the history
fixed some bugs in edit form controller
  • Loading branch information
BuddyLongLegs committed Jul 10, 2023
2 parents f30d0c0 + 56e9ea6 commit 280c9bf
Showing 1 changed file with 90 additions and 35 deletions.
125 changes: 90 additions & 35 deletions controllers/form.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ import Form from '../models/form.model.js';
import Project from '../models/project.model.js';
import { generateRandomString } from '../utils/generateRandomString.js';
import { prisma } from '../config/sql.config.js';
import mongoose from 'mongoose';

export async function updateForm(req, res) {
const id = req.params.id;

const {
name,
hasRecaptcha,
Expand All @@ -26,53 +26,109 @@ export async function updateForm(req, res) {

if (
!name ||
!hasRecaptcha ||
!hasFileField ||
hasRecaptcha === undefined ||
hasFileField === undefined ||
!schema ||
!password ||
!recaptcha_token
) {
response_400(res, 'Fields missing for updation');
return response_400(res, 'Fields missing for updation');
}

if (!verifycaptcha(recaptcha_token))
return response_400(res, 'Captcha not verified');
password = await hash_password(password);
let form = await Form.findById(id);

form = form
.populate({
path: 'project',
select: 'owner',
})
.populate({
path: 'project.owner',
select: '_id name email passwordHash',
});

if (password !== form.project.owner.passwordHash)
response_400(res, 'User is not the owner');
const passwordHash = await hash_password(password);
let form = await Form.aggregate([
{
$match: {
formId: id,
},
},
{
$lookup: {
from: 'projects',
localField: 'project',
foreignField: '_id',
as: 'project',
},
},
{
$unwind: '$project',
},
{
$lookup: {
from: 'users',
localField: 'project.owner',
foreignField: '_id',
as: 'project.owner',
},
},
{
$unwind: '$project.owner',
},
{
$project: {
name: 1,
hasRecaptchaVerification: 1,
hasFileField: 1,
schema: 1,
project: {
owner: {
name: 1,
email: 1,
passwordHash: 1,
},
},
},
},
{
$match: {
'project.owner.passwordHash': passwordHash,
},
},
{
$project: {
name: 1,
hasRecaptchaVerification: 1,
hasFileField: 1,
schema: 1,
},
},
]);

form = await form.updateOne({
name: name,
hasRecaptchaVerification: hasRecaptcha,
hasFileField: hasFileField,
schema: schema,
});
if (!form) return response_400(res, 'User is not the owner');

form = await form.project({
formId: 1,
name: 1,
hasRecaptchaVerification: 1,
is_owner: { $eq: [req.user._id, '$$$project.owner._id'] },
owner: {
name: '$$$project.owner.name',
email: '$$$project.owner.email',
const updatedForm = await Form.findOneAndUpdate(
{ formId: id },
{
name: name,
hasRecaptchaVerification: hasRecaptcha,
hasFileField: hasFileField,
schema: schema,
},
{ new: true },
).select(
'formId name hasRecaptchaVerification hasFileField schema submisssionLinkGeneratedAt',
);

let submisssionLinkGeneratedAt = updatedForm.submisssionLinkGeneratedAt;
const { hostUrl } = req.body;
let encryptedStr = encryptString(
JSON.stringify({
formId: id,
submisssionLinkGeneratedAt,
}),
);
let url = `${hostUrl}/main/submit?formRef=${encryptedStr}`;
response_200(res, 'form sucessfully updated', {
...updatedForm,
submissionLink: url,
});
response_200(res, 'form sucessfully updated', form);
}



export async function createForm(req, res) {
if (!verifycaptcha(req.body.recaptcha_token))
return response_400(res, 'Captcha not verified');
Expand All @@ -88,7 +144,6 @@ export async function createForm(req, res) {
return response_400(res, 'Name cannot be an empty string');
const projectId = req.params.projectId;
const project = await Project.findOne({ projectId });
console.log(project);
if (!project) return response_400(res, 'No project found with this id');

//Mongoose object id cannot be equated directly so i converted them into string and checked that.
Expand Down Expand Up @@ -121,7 +176,6 @@ export async function createForm(req, res) {
formId: formId,
submisssionLinkGeneratedAt,
});
console.log(newForm);
Project.findByIdAndUpdate(
project._id,
{ forms: [...project.forms, newForm._id] },
Expand Down Expand Up @@ -187,6 +241,7 @@ export async function getForm(req, res) {
name: 1,
is_owner: 1,
owner: 1,
schema: 1,
hasRecaptchaVerification: 1,
hasFileField: 1,
submisssionLinkGeneratedAt: 1,
Expand Down

0 comments on commit 280c9bf

Please sign in to comment.