Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 30 additions & 29 deletions controllers/forms/addForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,9 @@ const { ApiError } = require("../../utils/error/ApiError");
const uploadimage = require("../../utils/image/uploadImage");
const status = require("http-status");

const QrImageHeight = 150;
const QrImageWidth = 400;

const FormImageHeight = 350.67;
const FormImageWidth = 196.37;


// @description Add regForm
// @route POST /api/form/addForm
// @access Admins
Expand All @@ -21,8 +17,9 @@ const addForm = async (req, res, next) => {
eventdescription,
eventDate,
eventType,
upi,
paymentLink, // Payment link field
eventAmount,
upi, // UPI field
eventMaxReg,
relatedEvent,
participationType,
Expand All @@ -36,12 +33,32 @@ const addForm = async (req, res, next) => {
isEventPast,
} = req.body;

if (!eventTitle || !eventdescription) {
return next(new ApiError(status.BAD_REQUEST, "Title and description are required"));
}

// Improved validation for paid events
if (eventType === "Paid") {
if (!eventAmount || eventAmount === "0") {
return next(new ApiError(status.BAD_REQUEST, "Amount is required for paid events"));
}
if (!paymentLink && !upi) {
return next(new ApiError(status.BAD_REQUEST, "Either Payment link or UPI is required for paid events"));
}
}

const info = {
eventTitle,
eventdescription,
eventDate,
eventType,
eventAmount,
receiverDetails: {
upi: upi || null,
paymentLink: paymentLink || null,
// Store payment type preference
preferredPaymentMethod: paymentLink ? 'link' : (upi ? 'upi' : null)
},
eventMaxReg,
relatedEvent,
participationType,
Expand All @@ -53,32 +70,16 @@ const addForm = async (req, res, next) => {
isPublic: Boolean(isPublic) || false,
isRegistrationClosed: Boolean(isRegistrationClosed) || false,
isEventPast: Boolean(isEventPast) || false,
receiverDetails: { upi: upi, media: null },
};

const eventImgFile = req.files
? req.files?.eventImg
? req.files.eventImg[0]
: null
: null;
const qrmediaFile = req.files
? req.files?.media
? req.files.media[0]
: null
: null;

if (eventImgFile) {
const result = await uploadimage(eventImgFile.path, "FormImages", FormImageHeight, FormImageWidth);
info.eventImg = result ? result.secure_url : null;
} else {
new ApiError(status.BAD_REQUEST, "Event image not found");
}

if (qrmediaFile) {
const result = await uploadimage(qrmediaFile.path, "QRMediaImages", QrImageWidth, QrImageHeight);
info.receiverDetails.media = result ? result.secure_url : null;
} else {
new ApiError(status.BAD_REQUEST, "QR media image not found");
if (req.file) {
try {
const result = await uploadimage(req.file.path, "FormImages", FormImageHeight, FormImageWidth);
info.eventImg = result ? result.secure_url : null;
} catch (uploadError) {
console.error("Error uploading image:", uploadError);
return next(new ApiError(status.INTERNAL_SERVER_ERROR, "Error uploading image"));
}
}

const newForm = await prisma.form.create({
Expand Down
20 changes: 7 additions & 13 deletions controllers/forms/editForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ const editForm = async (req, res, next) => {
eventdescription,
eventDate,
eventType,
upi,
paymentLink,
eventAmount,
eventMaxReg,
upi,
relatedEvent,
participationType,
maxTeamSize,
Expand Down Expand Up @@ -53,21 +53,15 @@ const editForm = async (req, res, next) => {
eventDate,
eventType,
eventAmount,
eventMaxReg,
relatedEvent,
participationType,
maxTeamSize,
minTeamSize,
regDateAndTime,
eventPriority,
receiverDetails: {
upi: upi || null,
paymentLink: paymentLink || null,
preferredPaymentMethod: paymentLink ? 'link' : (upi ? 'upi' : null)
},
successMessage,
isPublic: isPublic === "true",
isRegistrationClosed: isRegistrationClosed === "true",
isEventPast: isEventPast === "true",
receiverDetails: {
...currentForm.info.receiverDetails,
upi,
},
};

// Handle image upload if present in the request
Expand Down
96 changes: 35 additions & 61 deletions controllers/registration/addRegistration.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const { PrismaClient, AccessTypes } = require("@prisma/client");
const moment = require('moment-timezone');
const moment = require('moment-timezone');
const prisma = new PrismaClient();
const { ApiError } = require("../../utils/error/ApiError");
const expressAsyncHandler = require("express-async-handler");
Expand All @@ -8,7 +8,7 @@ const { sendMail } = require("../../utils/email/nodeMailer");
const loadTemplate = require("../../utils/email/loadTemplate");
const uploadImage = require("../../utils/image/uploadImage");

const validateCurrentForm = expressAsyncHandler(async (form, user, userSubmittedSections) => {
const validateCurrentForm = expressAsyncHandler(async (form, user, userSubmittedSections, req) => {
const { info, sections, formAnalytics } = form;

const { eventMaxReg, isRegistrationClosed, isEventPast, isPublic } = info;
Expand All @@ -21,25 +21,24 @@ const validateCurrentForm = expressAsyncHandler(async (form, user, userSubmitted
throw new ApiError(401, "Registering to a private form is not allowed. If you feel this is an error, kindly contact us on fedkiit@gmail.com");
}

console.log(formAnalytics[0]?.regUserEmails)
console.log(user.regForm)
console.log(formAnalytics[0]?.regUserEmails);
console.log(user.regForm);
const isAlreadyRegistered = formAnalytics[0]?.regUserEmails.includes(user.email) || user.regForm.includes(form._id);
if (isAlreadyRegistered) {
throw new ApiError(400, "User has already registered for this form. If you feel this is an error, kindly contact us on fedkiit@gmail.com");
}
console.log("Form analytics ", formAnalytics[0])
console.log("Form analytics ", formAnalytics[0]);
if ((formAnalytics[0]?.regUserEmails?.length || formAnalytics[0]?.totalRegistrationCount || 0) >= ((parseInt(eventMaxReg)) || 1)) {
console.log((formAnalytics[0]?.regUserEmails?.length || formAnalytics[0]?.totalRegistrationCount) >= (parseInt(eventMaxReg) || 1));
console.log(eventMaxReg);
console.log(parseInt(eventMaxReg))
console.log(parseInt(eventMaxReg));
throw new ApiError(400, "Maximum registration limit reached. If you feel this is an error, kindly contact us on fedkiit@gmail.com");
}
});


const addRegistration = expressAsyncHandler(async (req, res, next) => {
console.log("Entering add", req.body);
console.log(req.body)
console.log(req.body);

const { _id } = req.body;
let sections = req.body.sections;
Expand All @@ -59,13 +58,13 @@ const addRegistration = expressAsyncHandler(async (req, res, next) => {
where: { id: _id },
include: { formAnalytics: true },
});
console.log("Form fetched from the database", form)
console.log("Form fetched from the database", form);

if (!form) {
return next(new ApiError(404, "Form not found"));
}

await validateCurrentForm(form, req.user, sections);
await validateCurrentForm(form, req.user, sections, req);

console.log('form validation passed');
const { info } = form;
Expand Down Expand Up @@ -103,30 +102,28 @@ const addRegistration = expressAsyncHandler(async (req, res, next) => {
let regTeamMemEmails = [];
// console.log("Team Name :", teamName)
// console.log("Team Code : ", teamCode)
console.log("setions : ", sections);
console.log("sections : ", sections);

const sectionsObject = {
user_name: req.user.name,
user_id: req.user.id,
user_email: req.user.email,
date_time: moment().tz("Asia/Kolkata").format(),
amount : form?.info?.eventAmount || '0',
amount: form?.info?.eventAmount || '0',
sections: sections
};
console.log("sections Object : ", sectionsObject)
console.log("sections Object : ", sectionsObject);

if (info.participationType !== "Individual") {

console.log("related", relatedEventForm?.info?.eventTitle)
console.log("eventTitle", info.eventTitle)
console.log("related", relatedEventForm?.info?.eventTitle);
console.log("eventTitle", info.eventTitle);
console.log("count", form.formAnalytics[0]?.regUserEmails.length);
teamCode = await generateTeamCode(relatedEventForm?.info?.eventTitle, info.eventTitle, form.formAnalytics[0]?.regUserEmails.length);


createTeamSection = sections.find(section => section.name === "Create Team");
joinTeamSection = !createTeamSection ? sections.find(section => section.name === "Join Team") : null;


if (createTeamSection) {
const teamNameField = createTeamSection.fields.find(field => field.name === "Team Name");
if (teamNameField) {
Expand Down Expand Up @@ -164,67 +161,46 @@ const addRegistration = expressAsyncHandler(async (req, res, next) => {
// Log the teamExists object in a readable format
console.log("team Exists", JSON.stringify(teamExists, null, 2));


teamName = [teamExists.teamName];
// console.log("team name array joining creating team", teamName)
// teamName = [...new Set([...teamName, ...(form.formAnalytics?.length > 0 ? form.formAnalytics[0].regTeamNames : [])])];
console.log("team name before ", teamName)
console.log("team name before ", teamName);
console.log("existing team names", form.formAnalytics?.length > 0 ? form.formAnalytics[0].regTeamNames : []);

// console.log("Team name array after joining team")

teamCode = teamCodeField.value;
regTeamMemEmails = [...teamExists.regTeamMemEmails, req.user.email];
}
else {
} else {
return next(new ApiError(400, "Team Code field is required for Join Team"));
}


// sections.user_id = req.user.id;
// sections.user_email = req.user.email;
// sections.user_name = req.user.name;


// sectionsObject.push({ sections });
}

}

formTrackerTeamNameList = [...new Set([...teamName, ...(form.formAnalytics?.length > 0 ? form.formAnalytics[0].regTeamNames : [])])];
console.log("set data ", formTrackerTeamNameList);
console.log("reg team members ", regTeamMemEmails)
console.log("reg team members ", regTeamMemEmails);

const paymentSection = sections.find(section => section.name === "Payment Details");
const paymentSectionInActualForm = form.sections.find(section => section.name === "Payment Details")
const paymentSectionInActualForm = form.sections.find(section => section.name === "Payment Details");
if (paymentSectionInActualForm && paymentSection) {
console.log("payment section is present in the form");
if (req.files?.length > 0) {
console.log("files", req.files);
const imagePath = req.files[0].path;
const result = await uploadImage(imagePath, req.files[0].fieldname || "PaymentScreenshot");
console.log(result);
sectionsObject.transactionScreenShot = result.secure_url;

const paymentScreenshotField = paymentSection.fields.find(field => field.name === "Payment Screenshot" && field.type === "image");

if (paymentScreenshotField) {
// Update the value of the "Payment Screenshot" field with the secure URL
paymentScreenshotField.value = result.secure_url;
console.log("Payment Screenshot field updated successfully.");
} else {
console.error("Payment Screenshot field not found.");
}

}
else {
return next(new ApiError(400, "Kindly Attach Payment Screenshot"));
const transactionIdField = paymentSection.fields.find(field => field.name === "Transaction ID");
if (!transactionIdField || !transactionIdField.value) {
return next(new ApiError(400, "Transaction ID is required"));
}
sectionsObject.transactionId = transactionIdField.value;
} else if (paymentSectionInActualForm && !paymentSection) {
return next(new ApiError(400, "Kindly fill the Payment section"));
}

console.log(sectionsObject)
console.log(sectionsObject);

const transaction = await prisma.$transaction(async (prisma) => {

Expand Down Expand Up @@ -295,11 +271,16 @@ const addRegistration = expressAsyncHandler(async (req, res, next) => {
return { registration, updatedUser, updateFormRegistrationList };
});


console.log(transaction.updatedUser);
console.log("regTracker", transaction.updateFormRegistrationList);

res.json({ message: form.info.successMessage || "Registration successful", teamName: transaction.registration.teamName, teamCode: transaction.registration.teamCode, user: transaction.updatedUser });
res.json({
message: form.info.successMessage || "Registration successful",
teamName: transaction.registration.teamName,
teamCode: transaction.registration.teamCode,
user: transaction.updatedUser
});

// const placeholder = {
// name: req.user.email,
// successMessage: info.successMessage
Expand All @@ -309,7 +290,6 @@ const addRegistration = expressAsyncHandler(async (req, res, next) => {
// placeholder
// )


const subject = `Successfully registered on ${info.eventTitle}`;
let template;
const placeholders = {
Expand All @@ -318,28 +298,22 @@ const addRegistration = expressAsyncHandler(async (req, res, next) => {
name: req.user.name ? req.user.name : "",
teamCode: transaction.registration.teamCode ? transaction.registration.teamCode : "",
successMessage: info.successMessage
}
};

//take content form the team
if (info.participationType === "Team") {

template = loadTemplate('teamEventRegistrationSuccess', placeholders);
}
else {
} else {
template = loadTemplate('individualEventRegistrationSuccess', placeholders);

}
// const textContent = `Registration successfull in ${info.eventTitle}`;
sendMail(req.user.email, subject, template);
}
catch (error) {
} catch (error) {
console.error("Error during registration:", error);
next(new ApiError(error.stausCode || 500, error.message || "Error during registration process", error));
next(new ApiError(error.statusCode || 500, error.message || "Error during registration process", error));
}

});


const generateTeamCode = async (relatedFormName, currentFormName, existingTeamsCount = 0) => {
const relatedEventCode = relatedFormName?.slice(0, 2).toUpperCase();
const currentFormCode = currentFormName?.slice(0, 2).toUpperCase();
Expand All @@ -350,4 +324,4 @@ const generateTeamCode = async (relatedFormName, currentFormName, existingTeamsC
return teamCode;
};

module.exports = { addRegistration };
module.exports = { addRegistration };