76 lines
2.3 KiB
JavaScript
76 lines
2.3 KiB
JavaScript
import express from 'express';
|
|
import { saveLead, getLeads } from '../db.js';
|
|
import { sendContactEmail } from '../services/mailService.js';
|
|
|
|
const router = express.Router();
|
|
|
|
// POST /api/contact - Handle Contact Us Form submission via SMTP
|
|
router.post('/', async (req, res) => {
|
|
try {
|
|
const { name, email, phone, mobile, subject, message, interests, type } = req.body;
|
|
|
|
const contactName = name?.trim();
|
|
const contactEmail = email?.trim();
|
|
const contactPhone = (phone || mobile || '').trim();
|
|
const contactSubject = (subject || interests || type || 'General Inquiry').trim();
|
|
const contactMessage = (message || req.body.comments || '').trim();
|
|
|
|
if (!contactName || !contactEmail) {
|
|
return res.status(400).json({ error: 'Name and Email are required.' });
|
|
}
|
|
|
|
// Save lead record in database
|
|
const lead = saveLead({
|
|
name: contactName,
|
|
email: contactEmail,
|
|
phone: contactPhone,
|
|
subject: contactSubject,
|
|
message: contactMessage,
|
|
type: type || 'contact'
|
|
});
|
|
|
|
// Attempt sending email via SMTP service
|
|
const mailResult = await sendContactEmail({
|
|
name: contactName,
|
|
email: contactEmail,
|
|
phone: contactPhone,
|
|
subject: contactSubject,
|
|
message: contactMessage
|
|
});
|
|
|
|
if (!mailResult.success) {
|
|
// If SMTP is not yet configured or fails, return 200 with lead saved & warning
|
|
return res.status(200).json({
|
|
success: true,
|
|
saved: true,
|
|
leadId: lead.id,
|
|
smtpError: mailResult.error,
|
|
message: 'Your message was saved successfully. Note: SMTP email dispatch requires SMTP credentials in .env.'
|
|
});
|
|
}
|
|
|
|
return res.status(200).json({
|
|
success: true,
|
|
saved: true,
|
|
leadId: lead.id,
|
|
messageId: mailResult.messageId,
|
|
message: 'Message sent successfully via SMTP!'
|
|
});
|
|
} catch (error) {
|
|
console.error('[Contact Route Error]', error);
|
|
return res.status(500).json({ error: error.message || 'Internal Server Error' });
|
|
}
|
|
});
|
|
|
|
// GET /api/contact/leads - Retrieve saved contact leads
|
|
router.get('/leads', (_req, res) => {
|
|
try {
|
|
const leads = getLeads();
|
|
return res.json({ success: true, leads });
|
|
} catch (error) {
|
|
return res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
export default router;
|