bank-app/back/libs/mysql.js
2025-04-28 09:09:26 +02:00

323 lines
6.6 KiB
JavaScript

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 transfers.*, sender.name AS sender_name, users.name AS receiver_name, users.lastname AS receiver_lastname
FROM transfers
JOIN accounts as sender ON transfers.account_from_id = sender.id
JOIN accounts as receiver ON transfers.account_to_id = receiver.id
JOIN users ON receiver.client_id = users.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);
}
);
});
}
// +-------------------------------+
// | Receivers |
// +-------------------------------+
function getUserReceivers(connection, id) {
return new Promise((resolve, reject) => {
connection.query(
`SELECT receivers.*
FROM receivers
JOIN users ON receivers.user_id = users.id
JOIN accounts ON receivers.account_id = accounts.id
WHERE users.id = ?`,
[id],
(error, result) => {
if (error) {
reject(new Error(error));
}
resolve(result);
}
);
});
}
function addReceiver(connection, user_id, account_id, name) {
return new Promise((resolve, reject) => {
connection.query(
`INSERT INTO receivers (user_id, account_id, name) VALUES (?, ?, ?)`,
[user_id, account_id, name],
(error, result) => {
if (error) {
reject(new Error(error));
}
resolve(result);
}
);
});
}
function removeReceiver(connection, id) {
return new Promise((resolve, reject) => {
connection.query(
`DELETE FROM receivers WHERE id = ?`,
[id],
(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,
getUserReceivers,
addReceiver,
removeReceiver,
};