-
Notifications
You must be signed in to change notification settings - Fork 0
/
db_worker.js
122 lines (105 loc) · 3.43 KB
/
db_worker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
const mysql = require('mysql2');
const logger = require('./logger');
const { MESSAGES } = require('./constant');
const { SqlError } = require('./errors/SqlError');
/**
*
* @param {mysql.Connection} connection Mysql connection object to make the query against database
* @param {{table_name, data}} query Needs to pass an object with proper information
* @returns {Promise<{rows: Record<string, string>, fields: Record<string, string>}>} Results after the query execution
*/
exports.insertOne = async (connection, query) => {
try {
// ? Query preparation
const sql = await mysql.format(`INSERT INTO ?? SET ?`, [query.table_name, query.data]);
// ? Query execution
const [rows, fields] = await connection.execute(sql);
return {
rows,
fields
};
} catch (err) {
logger.error('insertOne query => ', err);
throw new SqlError(MESSAGES.SQL_ERROR);
}
};
/**
*
* @param {mysql.Connection} connection Mysql connection object to make the query against database
* @param {{table_name, data}} query Needs to pass an object with proper information
* @returns {Promise<{rows: Record<string, string>, fields: Record<string, string>}>} Results after the query execution
*/
exports.insertMultiple = async (connection, query) => {
try {
const baseQ = `INSERT INTO ? SET ? ; `;
let genQ = baseQ.repeat(query.data.length);
const data = [];
// ? make our query with data array
query.data.forEach(v => {
genQ = genQ.replace('INSERT INTO ?', `INSERT INTO ${v.table_name}`);
data.push(v.data);
});
// ? Query preparation
const sql = await mysql.format(`${genQ}`, query.data);
// ? Query execution
const [rows, fields] = await connection.execute(sql);
return {
rows,
fields
};
} catch (err) {
logger.error('insertOne query => ', err);
throw new SqlError(MESSAGES.SQL_ERROR);
}
};
/**
*
* @param {mysql.Connection} connection Mysql connection object to make the query against database
* @param {{table_name, projection, table_name, condition, value}} query Needs to pass an object with proper information
* @returns {Promise<{rows:Array<rows>, fields: Record<string, string>}>} Results after the query execution
*/
exports.get = async (connection, { projection, table_name, condition, value }) => {
try {
// ? Query preparation
const sql = await mysql.format(
`SELECT ${projection} FROM ${table_name} WHERE ${condition}`,
value
);
// ? Query execution
const [rows, fields] = await connection.execute(sql);
return {
rows,
fields
};
} catch (err) {
logger.error('get query => ', err);
throw new SqlError(MESSAGES.SQL_ERROR);
}
};
/**
*
* @param {mysql.Connection} connection Mysql connection object to make the query against database
* @param {{table_name, updating_fields, updating_values, table_name, condition, value, key}} query Needs to pass an object with proper information
* @returns {Promise<{rows:Array<rows>, fields: Record<string, string>}>} Results after the query execution
*/
exports.updateOne = async (
connection,
{ updating_fields, updating_values, table_name, condition, value, key }
) => {
try {
// ? Query preparation
const sql = await mysql.format(
`UPDATE ${table_name} SET ${updating_fields} WHERE ${key} = ?`,
updating_values.concat(value)
);
// ? Query execution
const [rows, fields] = await connection.execute(sql);
return {
rows,
fields
};
} catch (err) {
logger.error('UPDATE query => ', err);
throw new SqlError(MESSAGES.SQL_ERROR);
}
};