Commit ·
051fc03
1
Parent(s): 1dfd045
update
Browse files- backend/controller/applicantController.js +2 -2
- backend/controller/contactController.js +2 -2
- backend/controller/demoRequestController.js +2 -2
- backend/utils/contactRequestDB.js +4 -3
- backend/utils/demoRequestDB.js +4 -4
- backend/utils/jobRequestDB.js +5 -3
- backend/utils/setupDB.js +12 -5
- frontend/src/sections/contact/Forms.jsx +6 -2
- frontend/src/sections/jobs/JobPageSection.jsx +5 -0
backend/controller/applicantController.js
CHANGED
|
@@ -3,7 +3,7 @@ const { checkExistingJobApplication, insertJobApplication } = require('../utils/
|
|
| 3 |
const { sendEmail } = require('../utils/sendEmail');
|
| 4 |
|
| 5 |
const submitJobApplication = async (req, res) => {
|
| 6 |
-
const { name, email, phone, experience, role, linkedin, consent } = req.body;
|
| 7 |
const resume = req.file;
|
| 8 |
|
| 9 |
console.log('Received job application:', req.body);
|
|
@@ -35,7 +35,7 @@ const submitJobApplication = async (req, res) => {
|
|
| 35 |
const filename = resume.originalname;
|
| 36 |
|
| 37 |
// Insert application into the database
|
| 38 |
-
await insertJobApplication(name, email, phone, experience, role, linkedin, resume.buffer, filename, consent);
|
| 39 |
console.log('Job Application added to DB successfully');
|
| 40 |
|
| 41 |
try{
|
|
|
|
| 3 |
const { sendEmail } = require('../utils/sendEmail');
|
| 4 |
|
| 5 |
const submitJobApplication = async (req, res) => {
|
| 6 |
+
const { name, email, phone, experience, role, linkedin, consent, policyVersion } = req.body;
|
| 7 |
const resume = req.file;
|
| 8 |
|
| 9 |
console.log('Received job application:', req.body);
|
|
|
|
| 35 |
const filename = resume.originalname;
|
| 36 |
|
| 37 |
// Insert application into the database
|
| 38 |
+
await insertJobApplication(name, email, phone, experience, role, linkedin, resume.buffer, filename, consent, policyVersion);
|
| 39 |
console.log('Job Application added to DB successfully');
|
| 40 |
|
| 41 |
try{
|
backend/controller/contactController.js
CHANGED
|
@@ -9,7 +9,7 @@ const { useVapi} = require("../config");
|
|
| 9 |
const assistant_url = 'https://api.vapi.ai/call';
|
| 10 |
|
| 11 |
const submitContactForm = async (req, res) => {
|
| 12 |
-
const { name, email, phone, subject, message, consent } = req.body;
|
| 13 |
console.log('Received contact form submission:', req.body);
|
| 14 |
|
| 15 |
if (!name || !email || !phone || !subject || !message) {
|
|
@@ -24,7 +24,7 @@ const submitContactForm = async (req, res) => {
|
|
| 24 |
return res.status(400).send({ error: 'Your contact request with the same subject is in queue' });
|
| 25 |
}
|
| 26 |
|
| 27 |
-
await insertContactRequest(name, email, phone, subject, message, consent);
|
| 28 |
console.log('Contact request added successfully');
|
| 29 |
|
| 30 |
try{
|
|
|
|
| 9 |
const assistant_url = 'https://api.vapi.ai/call';
|
| 10 |
|
| 11 |
const submitContactForm = async (req, res) => {
|
| 12 |
+
const { name, email, phone, subject, message, consent, policyVersion } = req.body;
|
| 13 |
console.log('Received contact form submission:', req.body);
|
| 14 |
|
| 15 |
if (!name || !email || !phone || !subject || !message) {
|
|
|
|
| 24 |
return res.status(400).send({ error: 'Your contact request with the same subject is in queue' });
|
| 25 |
}
|
| 26 |
|
| 27 |
+
await insertContactRequest(name, email, phone, subject, message, consent, policyVersion);
|
| 28 |
console.log('Contact request added successfully');
|
| 29 |
|
| 30 |
try{
|
backend/controller/demoRequestController.js
CHANGED
|
@@ -12,7 +12,7 @@ const { useVapi} = require("../config");
|
|
| 12 |
const assistant_url = 'https://api.vapi.ai/call';
|
| 13 |
|
| 14 |
const demoRequest = async (req, res) => {
|
| 15 |
-
const { name, email, company, product, demoDate, selectedSlot, phone, additionalComments, timezone, consent } = req.body;
|
| 16 |
console.log('Received demo request:', req.body);
|
| 17 |
|
| 18 |
// Basic validation on the server side
|
|
@@ -61,7 +61,7 @@ const demoRequest = async (req, res) => {
|
|
| 61 |
console.log('Converted time range to Asia/Kolkata:', formattedRange);
|
| 62 |
|
| 63 |
// 2. Insert the new demo request into the database
|
| 64 |
-
await insertDemoRequest(name, email, company, product, convertedDemoDate, formattedRange, phone, additionalComments, consent);
|
| 65 |
console.log('Demo request added successfully');
|
| 66 |
|
| 67 |
const [ eventData, icsContent ] = await createGoogleCalendarEvent(name, email, demoDate, selectedSlot, product, timezone);
|
|
|
|
| 12 |
const assistant_url = 'https://api.vapi.ai/call';
|
| 13 |
|
| 14 |
const demoRequest = async (req, res) => {
|
| 15 |
+
const { name, email, company, product, demoDate, selectedSlot, phone, additionalComments, timezone, consent, policyVersion } = req.body;
|
| 16 |
console.log('Received demo request:', req.body);
|
| 17 |
|
| 18 |
// Basic validation on the server side
|
|
|
|
| 61 |
console.log('Converted time range to Asia/Kolkata:', formattedRange);
|
| 62 |
|
| 63 |
// 2. Insert the new demo request into the database
|
| 64 |
+
await insertDemoRequest(name, email, company, product, convertedDemoDate, formattedRange, phone, additionalComments, consent, policyVersion);
|
| 65 |
console.log('Demo request added successfully');
|
| 66 |
|
| 67 |
const [ eventData, icsContent ] = await createGoogleCalendarEvent(name, email, demoDate, selectedSlot, product, timezone);
|
backend/utils/contactRequestDB.js
CHANGED
|
@@ -8,9 +8,10 @@ async function checkExistingContactRequest(name, email, subject) {
|
|
| 8 |
}
|
| 9 |
|
| 10 |
// Insert contact request
|
| 11 |
-
async function insertContactRequest(name, email, phone, subject, message, consent) {
|
| 12 |
-
const insertQuery = `INSERT INTO contact_requests (date, time, name, email, phone, subject, message, consent) VALUES (DATE("now"), TIME("now"), ?, ?, ?, ?, ?, ?);`;
|
| 13 |
-
|
|
|
|
| 14 |
}
|
| 15 |
|
| 16 |
module.exports = { checkExistingContactRequest, insertContactRequest };
|
|
|
|
| 8 |
}
|
| 9 |
|
| 10 |
// Insert contact request
|
| 11 |
+
async function insertContactRequest(name, email, phone, subject, message, consent, policyVersion) {
|
| 12 |
+
const insertQuery = `INSERT INTO contact_requests (date, time, name, email, phone, subject, message, consent, policyVersion) VALUES (DATE("now"), TIME("now"), ?, ?, ?, ?, ?, ?, ?);`;
|
| 13 |
+
const boolConsent = consent?1:0;
|
| 14 |
+
await runQuery(insertQuery, [name, email, phone, subject, message, boolConsent, policyVersion]);
|
| 15 |
}
|
| 16 |
|
| 17 |
module.exports = { checkExistingContactRequest, insertContactRequest };
|
backend/utils/demoRequestDB.js
CHANGED
|
@@ -11,12 +11,12 @@ async function checkExistingDemoRequest(name, email, product, demoDate, phone) {
|
|
| 11 |
}
|
| 12 |
|
| 13 |
// Insert demo request
|
| 14 |
-
async function insertDemoRequest(name, email, company, product, demoDate, slot, phone, message, consent) {
|
| 15 |
const insertQuery = `
|
| 16 |
-
INSERT INTO demo_requests (date, time, name, email, company, product, demo_date, slot, phone, comments, consent)
|
| 17 |
-
VALUES (DATE("now"), TIME("now"), ?, ?, ?, ?, ?, ?, ?, ?, ?);
|
| 18 |
`;
|
| 19 |
-
await runQuery(insertQuery, [name, email, company, product, demoDate, slot, phone, message, consent]);
|
| 20 |
}
|
| 21 |
|
| 22 |
module.exports = { checkExistingDemoRequest, insertDemoRequest };
|
|
|
|
| 11 |
}
|
| 12 |
|
| 13 |
// Insert demo request
|
| 14 |
+
async function insertDemoRequest(name, email, company, product, demoDate, slot, phone, message, consent, policyVersion) {
|
| 15 |
const insertQuery = `
|
| 16 |
+
INSERT INTO demo_requests (date, time, name, email, company, product, demo_date, slot, phone, comments, consent, policyVersion)
|
| 17 |
+
VALUES (DATE("now"), TIME("now"), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
|
| 18 |
`;
|
| 19 |
+
await runQuery(insertQuery, [name, email, company, product, demoDate, slot, phone, message, consent, policyVersion]);
|
| 20 |
}
|
| 21 |
|
| 22 |
module.exports = { checkExistingDemoRequest, insertDemoRequest };
|
backend/utils/jobRequestDB.js
CHANGED
|
@@ -9,9 +9,11 @@ async function checkExistingJobApplication(name, email, role) {
|
|
| 9 |
}
|
| 10 |
|
| 11 |
// Insert job application
|
| 12 |
-
async function insertJobApplication(name, email, phone, experience, role, linkedin, resume, filename, consent) {
|
| 13 |
-
const insertQuery = `INSERT INTO applicants (date, time, name, email, phone, experience, role, linkedin, resume, filename, consent) VALUES (DATE("now"), TIME("now"), ?, ?, ?, ?, ?, ?, ?, ?, ?);`;
|
| 14 |
-
|
|
|
|
|
|
|
| 15 |
}
|
| 16 |
|
| 17 |
module.exports = { checkExistingJobApplication, insertJobApplication };
|
|
|
|
| 9 |
}
|
| 10 |
|
| 11 |
// Insert job application
|
| 12 |
+
async function insertJobApplication(name, email, phone, experience, role, linkedin, resume, filename, consent, policyVersion) {
|
| 13 |
+
const insertQuery = `INSERT INTO applicants (date, time, name, email, phone, experience, role, linkedin, resume, filename, consent, policyVersion) VALUES (DATE("now"), TIME("now"), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`;
|
| 14 |
+
const boolConsent = Number(consent === "true");
|
| 15 |
+
console.log(typeof(boolConsent));
|
| 16 |
+
await runQuery(insertQuery, [name, email, phone, experience, role, linkedin, resume, filename, boolConsent, policyVersion]);
|
| 17 |
}
|
| 18 |
|
| 19 |
module.exports = { checkExistingJobApplication, insertJobApplication };
|
backend/utils/setupDB.js
CHANGED
|
@@ -11,7 +11,9 @@ async function initializeDatabase() {
|
|
| 11 |
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
| 12 |
date TEXT,
|
| 13 |
time TEXT,
|
| 14 |
-
email TEXT NOT NULL UNIQUE
|
|
|
|
|
|
|
| 15 |
)`,
|
| 16 |
applicants: `CREATE TABLE IF NOT EXISTS applicants (
|
| 17 |
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -25,7 +27,8 @@ async function initializeDatabase() {
|
|
| 25 |
linkedin TEXT,
|
| 26 |
resume BLOB,
|
| 27 |
filename TEXT NOT NULL,
|
| 28 |
-
consent INTEGER NOT NULL
|
|
|
|
| 29 |
)`,
|
| 30 |
demo_requests: `CREATE TABLE IF NOT EXISTS demo_requests (
|
| 31 |
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -39,7 +42,8 @@ async function initializeDatabase() {
|
|
| 39 |
slot TEXT,
|
| 40 |
phone TEXT,
|
| 41 |
comments TEXT,
|
| 42 |
-
consent INTEGER NOT NULL
|
|
|
|
| 43 |
)`,
|
| 44 |
contact_requests: `CREATE TABLE IF NOT EXISTS contact_requests (
|
| 45 |
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -50,7 +54,8 @@ async function initializeDatabase() {
|
|
| 50 |
phone TEXT,
|
| 51 |
subject TEXT,
|
| 52 |
message TEXT,
|
| 53 |
-
consent INTEGER NOT NULL
|
|
|
|
| 54 |
)`,
|
| 55 |
purchases: `CREATE TABLE IF NOT EXISTS purchases (
|
| 56 |
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -61,7 +66,9 @@ async function initializeDatabase() {
|
|
| 61 |
phone TEXT,
|
| 62 |
product TEXT,
|
| 63 |
subscription_plan TEXT,
|
| 64 |
-
subscription_type TEXT
|
|
|
|
|
|
|
| 65 |
)`,
|
| 66 |
jobs: `CREATE TABLE IF NOT EXISTS jobs (
|
| 67 |
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
|
| 11 |
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
| 12 |
date TEXT,
|
| 13 |
time TEXT,
|
| 14 |
+
email TEXT NOT NULL UNIQUE,
|
| 15 |
+
consent INTEGER NOT NULL,
|
| 16 |
+
policyVersion INTEGER NOT NULL
|
| 17 |
)`,
|
| 18 |
applicants: `CREATE TABLE IF NOT EXISTS applicants (
|
| 19 |
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
|
| 27 |
linkedin TEXT,
|
| 28 |
resume BLOB,
|
| 29 |
filename TEXT NOT NULL,
|
| 30 |
+
consent INTEGER NOT NULL,
|
| 31 |
+
policyVersion INTEGER NOT NULL
|
| 32 |
)`,
|
| 33 |
demo_requests: `CREATE TABLE IF NOT EXISTS demo_requests (
|
| 34 |
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
|
| 42 |
slot TEXT,
|
| 43 |
phone TEXT,
|
| 44 |
comments TEXT,
|
| 45 |
+
consent INTEGER NOT NULL,
|
| 46 |
+
policyVersion INTEGER NOT NULL
|
| 47 |
)`,
|
| 48 |
contact_requests: `CREATE TABLE IF NOT EXISTS contact_requests (
|
| 49 |
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
|
| 54 |
phone TEXT,
|
| 55 |
subject TEXT,
|
| 56 |
message TEXT,
|
| 57 |
+
consent INTEGER NOT NULL,
|
| 58 |
+
policyVersion INTEGER NOT NULL
|
| 59 |
)`,
|
| 60 |
purchases: `CREATE TABLE IF NOT EXISTS purchases (
|
| 61 |
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
|
| 66 |
phone TEXT,
|
| 67 |
product TEXT,
|
| 68 |
subscription_plan TEXT,
|
| 69 |
+
subscription_type TEXT,
|
| 70 |
+
consent INTEGER NOT NULL,
|
| 71 |
+
policyVersion INTEGER NOT NULL
|
| 72 |
)`,
|
| 73 |
jobs: `CREATE TABLE IF NOT EXISTS jobs (
|
| 74 |
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
frontend/src/sections/contact/Forms.jsx
CHANGED
|
@@ -3,6 +3,7 @@ import styled from 'styled-components';
|
|
| 3 |
import IntlTelInput from "intl-tel-input/reactWithUtils";
|
| 4 |
import "intl-tel-input/build/css/intlTelInput.css";
|
| 5 |
import axios from 'axios';
|
|
|
|
| 6 |
import { showCustomAlert, showCustomError, showCustomSuccess } from '../../utils/showalerts';
|
| 7 |
|
| 8 |
import { DateTime } from 'luxon';
|
|
@@ -229,10 +230,13 @@ const ContactForm = ({ formType, demoProduct }) => {
|
|
| 229 |
return;
|
| 230 |
}
|
| 231 |
|
|
|
|
|
|
|
|
|
|
| 232 |
let formData =
|
| 233 |
formType === 'general'
|
| 234 |
-
? { name, email, phone, subject, message, consent }
|
| 235 |
-
: { name, email, phone, company, product, demoDate, selectedSlot, additionalComments, timezone, consent };
|
| 236 |
|
| 237 |
// Validate required fields
|
| 238 |
// if(formType === 'general' && (!name || !email || !phone || !subject || !message) ){
|
|
|
|
| 3 |
import IntlTelInput from "intl-tel-input/reactWithUtils";
|
| 4 |
import "intl-tel-input/build/css/intlTelInput.css";
|
| 5 |
import axios from 'axios';
|
| 6 |
+
import privacyPolicyData from "../../data/privacyPolicyData";
|
| 7 |
import { showCustomAlert, showCustomError, showCustomSuccess } from '../../utils/showalerts';
|
| 8 |
|
| 9 |
import { DateTime } from 'luxon';
|
|
|
|
| 230 |
return;
|
| 231 |
}
|
| 232 |
|
| 233 |
+
//Set the policy version number
|
| 234 |
+
const policyVersion = privacyPolicyData.version;
|
| 235 |
+
|
| 236 |
let formData =
|
| 237 |
formType === 'general'
|
| 238 |
+
? { name, email, phone, subject, message, consent, policyVersion}
|
| 239 |
+
: { name, email, phone, company, product, demoDate, selectedSlot, additionalComments, timezone, consent, policyVersion};
|
| 240 |
|
| 241 |
// Validate required fields
|
| 242 |
// if(formType === 'general' && (!name || !email || !phone || !subject || !message) ){
|
frontend/src/sections/jobs/JobPageSection.jsx
CHANGED
|
@@ -5,6 +5,7 @@ import { createGlobalStyle } from 'styled-components';
|
|
| 5 |
import IntlTelInput from 'intl-tel-input/reactWithUtils';
|
| 6 |
import 'intl-tel-input/styles';
|
| 7 |
import axios from 'axios';
|
|
|
|
| 8 |
import { showCustomAlert, showCustomError, showCustomSuccess } from '../../utils/showalerts';
|
| 9 |
|
| 10 |
const GlobalStyles = createGlobalStyle`
|
|
@@ -301,6 +302,9 @@ const JobPageSection = ({ job }) => {
|
|
| 301 |
showCustomError("Please enter a valid phone number.");
|
| 302 |
return;
|
| 303 |
}
|
|
|
|
|
|
|
|
|
|
| 304 |
|
| 305 |
try {
|
| 306 |
const formData = new FormData();
|
|
@@ -310,6 +314,7 @@ const JobPageSection = ({ job }) => {
|
|
| 310 |
formData.append('experience', experience);
|
| 311 |
formData.append('linkedin', linkedin);
|
| 312 |
formData.append('consent', consent);
|
|
|
|
| 313 |
formData.append('role', role); // Add role to the form data
|
| 314 |
formData.append('resume', document.getElementById('fileInput').files[0]);
|
| 315 |
|
|
|
|
| 5 |
import IntlTelInput from 'intl-tel-input/reactWithUtils';
|
| 6 |
import 'intl-tel-input/styles';
|
| 7 |
import axios from 'axios';
|
| 8 |
+
import privacyPolicyData from "../../data/privacyPolicyData";
|
| 9 |
import { showCustomAlert, showCustomError, showCustomSuccess } from '../../utils/showalerts';
|
| 10 |
|
| 11 |
const GlobalStyles = createGlobalStyle`
|
|
|
|
| 302 |
showCustomError("Please enter a valid phone number.");
|
| 303 |
return;
|
| 304 |
}
|
| 305 |
+
|
| 306 |
+
//Set the policy version number
|
| 307 |
+
const policyVersion = privacyPolicyData.version;
|
| 308 |
|
| 309 |
try {
|
| 310 |
const formData = new FormData();
|
|
|
|
| 314 |
formData.append('experience', experience);
|
| 315 |
formData.append('linkedin', linkedin);
|
| 316 |
formData.append('consent', consent);
|
| 317 |
+
formData.append('policyVersion', policyVersion);
|
| 318 |
formData.append('role', role); // Add role to the form data
|
| 319 |
formData.append('resume', document.getElementById('fileInput').files[0]);
|
| 320 |
|