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, }); } // +-------------------------------+ // | Users | // +-------------------------------+ function addUser(connection, name, lastname, email, numero, password) { return new Promise((resolve, reject) => { connection.query( `INSERT INTO users (name, lastname, email, numero, password) VALUES (?, ?, ?, ?, ?)`, [name, lastname, email, numero, password], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function getUsers(connection) { return new Promise((resolve, reject) => { connection.query( `SELECT * FROM users`, (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function getUser(connection, id) { return new Promise((resolve, reject) => { connection.query( `SELECT * FROM users WHERE id = ?`, [id], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function getUserByEmail(connection, email) { return new Promise((resolve, reject) => { connection.query( `SELECT * FROM users WHERE email = ?`, [email], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } // +-------------------------------+ // | Accounts | // +-------------------------------+ function getUserAccounts(connection, id) { return new Promise((resolve, reject) => { connection.query( `SELECT * FROM accounts WHERE client_id = ?`, [id], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function getAccount(connection, id) { return new Promise((resolve, reject) => { connection.query( `SELECT * FROM accounts WHERE id = ?`, [id], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function addAccount(connection, client_id, name) { return new Promise((resolve, reject) => { connection.query( `INSERT INTO accounts (client_id, name) VALUES (?, ?)`, [client_id, name], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function removeAccount(connection, id) { return new Promise((resolve, reject) => { connection.query( `DELETE FROM accounts WHERE id = ?`, [id], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function setAccountBalance(connection, id, balance) { return new Promise((resolve, reject) => { connection.query( `UPDATE accounts SET balance = ? WHERE id = ?`, [balance, id], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } // +-------------------------------+ // | Cards | // +-------------------------------+ function getUserCards(connection, id) { return new Promise((resolve, reject) => { connection.query( `SELECT cards.*, accounts.name AS account_name FROM cards JOIN accounts ON cards.account_id = accounts.id JOIN users ON accounts.client_id = users.id WHERE users.id = ?`, [id], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function addCard(connection, account_id, number, expiration, cvc) { return new Promise((resolve, reject) => { connection.query( `INSERT INTO cards (account_id, number, expiration, cvc) VALUES (?, ?, ?, ?)`, [account_id, number, expiration, cvc], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function removeCard(connection, id) { return new Promise((resolve, reject) => { connection.query( `DELETE FROM cards WHERE id = ?`, [id], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } // +-------------------------------+ // | Transfers | // +-------------------------------+ function getUserTransfers(connection, id) { return new Promise((resolve, reject) => { connection.query( `SELECT * FROM transfers JOIN accounts as sender ON transfers.account_from_id = sender.id JOIN accounts as receiver ON transfers.account_to_id = receiver.id WHERE sender.client_id = ? OR receiver.client_id = ?`, [id, id], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } function addTransfer(connection, account_from_id, account_to_id, name, amount) { return new Promise((resolve, reject) => { connection.query( `INSERT INTO transfers (account_from_id, account_to_id, name, value) VALUES (?, ?, ?, ?)`, [account_from_id, account_to_id, name, amount], (error, result) => { if (error) { reject(new Error(error)); } resolve(result); } ); }); } module.exports = { getConnection, addUser, getUsers, getUser, getUserByEmail, getUserAccounts, getAccount, addAccount, removeAccount, setAccountBalance, getUserCards, addCard, removeCard, getUserTransfers, addTransfer, };