lyvuha-portfolio / backend /src /controllers /messageController.js
Cong123779's picture
Upload backend/src/controllers/messageController.js with huggingface_hub
34d787b verified
Raw
History Blame Contribute Delete
2.9 kB
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' });
}
}