const mysql = require("mysql"); function getConnection() { return mysql.createConnection({ host: process.env.MYSQL_HOST, user: process.env.MYSQL_USER, password: process.env.MYSQL_PASSWORD, database: process.env.MYSQL_DATABASE, }); } function getUser(connection, id) { return new Promise((resolve, reject) => { connection.query( `SELECT * FROM users WHERE id = ?`, [id], // Use parameterized query (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function getUserByUsername(connection, username) { return new Promise((resolve, reject) => { connection.query( `SELECT * FROM users WHERE username = ?`, [username], // Use parameterized query (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function addUser(connection, username, password) { return new Promise((resolve, reject) => { connection.query( `INSERT INTO users (username, password) VALUES (?, ?)`, [username, password], // Use parameterized query (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function getUserLastMessages(connection, username) { return new Promise((resolve, reject) => { connection.query( `SELECT messages.id, user_id, username, content, date, channels.name AS channel_name FROM messages JOIN users ON messages.user_id = users.id JOIN channels ON messages.channel_id = channels.id WHERE username = ? ORDER BY date DESC LIMIT 5`, [username], // Use parameterized query (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function getChannels(connection) { return new Promise((resolve, reject) => { connection.query( `SELECT * FROM channels`, (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function getChannel(connection, name) { return new Promise((resolve, reject) => { connection.query( `SELECT channels.id, name, description, owner_id, username AS owner_username FROM channels JOIN users ON channels.owner_id = users.id WHERE name = ?`, [name], // Use parameterized query (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function addChannel(connection, name, description, owner_id) { return new Promise((resolve, reject) => { connection.query( `INSERT INTO channels (name, description, owner_id) VALUES (?, ?, ?)`, [name, description, owner_id], // Use parameterized query (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function getMessages(connection, channel_id) { return new Promise((resolve, reject) => { connection.query( `SELECT messages.id, user_id, username, content, date, channels.name AS channel_name FROM messages JOIN users ON messages.user_id = users.id JOIN channels ON messages.channel_id = channels.id WHERE channel_id = ? ORDER BY date DESC`, [channel_id], // Use parameterized query (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function getLastMessages(connection) { return new Promise((resolve, reject) => { connection.query( `SELECT messages.id, user_id, username, content, date, channels.name AS channel_name FROM messages JOIN users ON messages.user_id = users.id JOIN channels ON messages.channel_id = channels.id ORDER BY date DESC LIMIT 5`, (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function getMessage(connection, message_id) { return new Promise((resolve, reject) => { connection.query( `SELECT messages.id, user_id, username, content, date, channels.name AS channel_name FROM messages JOIN users ON messages.user_id = users.id JOIN channels ON messages.channel_id = channels.id WHERE messages.id = ?`, [message_id], // Use parameterized query (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function addMessage(connection, channel_id, user_id, message) { return new Promise((resolve, reject) => { connection.query( `INSERT INTO messages (channel_id, user_id, content, date) VALUES (?, ?, ?, ?)`, [channel_id, user_id, message, Math.floor(Date.now() / 1000)], // Use parameterized query (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function deleteMessage(connection, message_id) { return new Promise((resolve, reject) => { connection.query( `DELETE FROM messages WHERE id = ?`, [message_id], // Use parameterized query (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } module.exports = { getConnection, getUser, getUserByUsername, addUser, getUserLastMessages, getChannels, getChannel, addChannel, getMessages, getLastMessages, getMessage, addMessage, deleteMessage };