import { dbQuery, dbGet, dbRun, getDb } from '../config/db.js'; import { sendContactNotification } from '../utils/mailer.js'; async function ensureDb() { await getDb(); } export async function createMessage(req, res) { try { await ensureDb(); const { name, email, subject, content } = req.body; if (!name || !email || !subject || !content) { return res.status(400).json({ success: false, message: 'Missing required fields' }); } const result = await dbRun( 'INSERT INTO messages (name, email, subject, content) VALUES (?,?,?,?)', [name, email, subject, content] ); const newMsg = await dbGet('SELECT * FROM messages WHERE id = ?', [result.lastID]); // Send email notification asynchronously (non-blocking) sendContactNotification({ name, email, subject, content }).catch(err => { console.error('sendContactNotification async error:', err); }); res.status(201).json({ success: true, message: 'Message sent successfully!', data: newMsg }); } catch (error) { console.error('createMessage error:', error); res.status(500).json({ success: false, message: 'Server error sending message' }); } } export async function getMessages(req, res) { try { await ensureDb(); const messages = await dbQuery('SELECT * FROM messages ORDER BY id DESC'); res.status(200).json({ success: true, count: messages.length, data: messages }); } catch (error) { console.error('getMessages error:', error); res.status(500).json({ success: false, message: 'Server error retrieving messages' }); } } export async function markAsRead(req, res) { try { await ensureDb(); const { id } = req.params; const { read_status } = req.body; const message = await dbGet('SELECT * FROM messages WHERE id = ?', [id]); if (!message) return res.status(404).json({ success: false, message: 'Message not found' }); await dbRun('UPDATE messages SET read_status = ? WHERE id = ?', [read_status !== undefined ? read_status : 1, id]); const updated = await dbGet('SELECT * FROM messages WHERE id = ?', [id]); res.status(200).json({ success: true, message: 'Message updated', data: updated }); } catch (error) { console.error('markAsRead error:', error); res.status(500).json({ success: false, message: 'Server error' }); } } export async function deleteMessage(req, res) { try { await ensureDb(); const { id } = req.params; const message = await dbGet('SELECT * FROM messages WHERE id = ?', [id]); if (!message) return res.status(404).json({ success: false, message: 'Message not found' }); await dbRun('DELETE FROM messages WHERE id = ?', [id]); res.status(200).json({ success: true, message: 'Message deleted' }); } catch (error) { console.error('deleteMessage error:', error); res.status(500).json({ success: false, message: 'Server error' }); } }