This repository was archived by the owner on Jun 28, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgoogleFormController.ts
More file actions
125 lines (112 loc) · 3.39 KB
/
googleFormController.ts
File metadata and controls
125 lines (112 loc) · 3.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import Applicant from "../models/applicantModel";
import { Request as req, Response as res } from "express";
import { config } from "../../../config";
import logger from "../../../middlewares/logger";
import path from "path";
import fs from "fs/promises";
import { sendEmail } from "../../../utils/mailHandler";
export const formSubmit = async (req: req, res: res) => {
try {
const {
secret,
firstname,
lastname,
middlename,
suffix,
email,
phone,
address,
preferredWorkLocation,
linkedInProfile,
portfolioLink,
resumeFileLoc,
yearsOfExperience,
currentMostRecentJob,
highestQualification,
majorFieldOfStudy,
institution,
graduationYear,
keySkills,
softwareProficiency,
certifications,
salaryExpectation,
jobAppliedFor,
availability,
whyAreYouInterestedInRole,
} = req.body;
const SECRET = config.google.key;
if (secret !== SECRET) {
return res.status(401).json({ message: "Unauthorized" });
}
const newApplicant = await Applicant.create({
firstname,
lastname,
middlename,
suffix,
email,
phone,
address,
preferredWorkLocation,
linkedInProfile,
portfolioLink,
resumeFileLoc: resumeFileLoc[0],
yearsOfExperience,
currentMostRecentJob,
highestQualification,
majorFieldOfStudy,
institution,
graduationYear,
keySkills,
softwareProficiency,
certifications,
salaryExpectation,
jobAppliedFor,
availability,
whyAreYouInterestedInRole,
});
if (!newApplicant) {
return res.status(400).json({ message: "Failed to submit application" });
}
const fullName = `${firstname} ${lastname}`;
const applicationDate = new Date().toLocaleDateString();
const referenceNumber = newApplicant._id as unknown as string
// Fixing typo in template file name
const templatePath = path.join(__dirname, "../../../public/template/applicationReceived.html");
// Ensure the template file exists before reading
try {
await fs.access(templatePath);
} catch (err) {
logger.error("Email template file not found:", err);
return res.status(500).json({ message: "Email template missing" });
}
let emailTemplate = await fs.readFile(templatePath, "utf-8");
// Replacing placeholders in the email template
emailTemplate = emailTemplate
.replace(/{{fullName}}/g, fullName)
.replace(/{{applicationDate}}/g, applicationDate)
.replace(/{{referenceNumber}}/g, referenceNumber)
.replace(/{{jobTitle}}/g, jobAppliedFor)
.replace(/{{responseTimeframe}}/g, "two weeks");
// Sending email notification
const emailResult = await sendEmail(
"Application Received",
email,
"Your Job Application at Our Company",
emailTemplate
);
if (emailResult) {
logger.info(`Email notification sent to ${fullName} (${email})`);
} else {
logger.warn(`Failed to send email notification to ${fullName} (${email})`);
}
res.status(201).json({
statusCode: 201,
success: true,
message: "Application submitted successfully. A confirmation email has been sent.",
data: newApplicant,
});
} catch (error) {
logger.error(error);
res.status(500).json({ message: "Internal server error" });
}
};