vtlab-generic-functions 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/axios/README.md +30 -0
- package/axios/index.js +287 -0
- package/axios/logs.js +110 -0
- package/axios/utils.js +37 -0
- package/cloudwatch/index.js +109 -0
- package/config/index.js +74 -0
- package/customers/marketplace/bringg/auth.js +59 -0
- package/dataMapper/index.js +61 -0
- package/emails/index.js +153 -0
- package/ftp/ftp-promise-wrapper.js +109 -0
- package/ftp/index.js +194 -0
- package/ftp/jsftp-wrapper.js +107 -0
- package/ftp/ssh2SFPTWrapper.js +175 -0
- package/geocode/README.md +18 -0
- package/geocode/index.js +28 -0
- package/lambda/index.js +68 -0
- package/lambdaClass/index.js +267 -0
- package/mongodb/README.md +16 -0
- package/mongodb/connect-to-mongodb.js +57 -0
- package/mongodb/index.js +8 -0
- package/mongodb/models/users.js +51 -0
- package/mysql/README.md +29 -0
- package/mysql/connect-to-mysqldb.js +26 -0
- package/mysql/index.js +8 -0
- package/mysql/models/users.js +47 -0
- package/mysql/utils/queryBuilder.js +164 -0
- package/package.json +43 -0
- package/parsingFiles/index.js +114 -0
- package/pdf/index.js +34 -0
- package/postalCode/index.js +38 -0
- package/rds/connect-to-rdsdb.js +33 -0
- package/rds/index.js +33 -0
- package/rds/utils/queryBuilder.js +164 -0
- package/s3bucket/index.js +175 -0
- package/soap/index.js +71 -0
- package/sqs/index.js +85 -0
- package/utils/index.js +579 -0
- package/validator/index.js +44 -0
- package/validator/joiSchema.js +311 -0
package/mysql/README.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#### models
|
|
2
|
+
each file represents the table name in the mysql database.
|
|
3
|
+
|
|
4
|
+
#### utils/querybuilder
|
|
5
|
+
To build the query, mostly imported in the models
|
|
6
|
+
|
|
7
|
+
#### index.js
|
|
8
|
+
extend the export by including the models/{table}
|
|
9
|
+
|
|
10
|
+
### Example usage from Lambda JS:
|
|
11
|
+
```
|
|
12
|
+
const pelMysql = require('/opt/mysql');
|
|
13
|
+
|
|
14
|
+
const db = pelMysql.connectToDatabase({
|
|
15
|
+
host: 'localhost',
|
|
16
|
+
user: 'root',
|
|
17
|
+
password: 'example',
|
|
18
|
+
database: 'pel',
|
|
19
|
+
port: 3306
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
let users = pelMysql.get_all_users(db, function (err, data) {
|
|
23
|
+
if (err) {
|
|
24
|
+
console.log(err);
|
|
25
|
+
} else {
|
|
26
|
+
console.log(data);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const mysql = require('mysql');
|
|
2
|
+
|
|
3
|
+
const connectToDatabase = function (params) {
|
|
4
|
+
if (!params.host || !params.port || !params.user || !params.password || !params.database) {
|
|
5
|
+
throw new Error('Missing required parameters');
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
let connection = mysql.createConnection({
|
|
9
|
+
host: params.host,
|
|
10
|
+
user: params.user,
|
|
11
|
+
password: params.password,
|
|
12
|
+
database: params.database,
|
|
13
|
+
port: params.port,
|
|
14
|
+
charset: 'utf8'
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
connection.connect(function (err) {
|
|
18
|
+
if (err) throw (err);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return connection;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
module.exports = {
|
|
25
|
+
connectToDatabase,
|
|
26
|
+
};
|
package/mysql/index.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This is just a sample/test template for you to copy for the actual table in the DB.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const queryBuilder = require('../utils/queryBuilder');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* to get uses by ID
|
|
9
|
+
* @param id String
|
|
10
|
+
* @param callback onSuccess(error, result)
|
|
11
|
+
*/
|
|
12
|
+
const get_user_by_id = function (db_connection, id, callback) {
|
|
13
|
+
|
|
14
|
+
let where = [{
|
|
15
|
+
key: 'id',
|
|
16
|
+
value: id,
|
|
17
|
+
}];
|
|
18
|
+
|
|
19
|
+
db_connection.query(queryBuilder.buildSelectQuery('users', where), function (err, result) {
|
|
20
|
+
if (err) {
|
|
21
|
+
callback(err, null);
|
|
22
|
+
} else {
|
|
23
|
+
callback(null, result);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* to get all the users in the table
|
|
31
|
+
* @param callback onSuccess(error, result)
|
|
32
|
+
*/
|
|
33
|
+
const get_all_users = function (db_connection, callback) {
|
|
34
|
+
db_connection.query(queryBuilder.buildSelectQuery('users'), function (err, result) {
|
|
35
|
+
if (err) {
|
|
36
|
+
callback(err, null)
|
|
37
|
+
} else {
|
|
38
|
+
callback(null, result)
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
module.exports = {
|
|
45
|
+
get_user_by_id,
|
|
46
|
+
get_all_users
|
|
47
|
+
}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
let GLOBAL_MYSQL_LIMIT = 10;
|
|
2
|
+
let GLOBAL_MYSQL_OFFSET = 0;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* To build LIMIT query, 10 is the default limit
|
|
6
|
+
* @param limit
|
|
7
|
+
* @returns {string}
|
|
8
|
+
*/
|
|
9
|
+
const buildLimitQuery = (limit) => {
|
|
10
|
+
let limitQuery = '';
|
|
11
|
+
if (limit.length > 0) {
|
|
12
|
+
limitQuery += ` LIMIT ${limit}`;
|
|
13
|
+
} else {
|
|
14
|
+
limitQuery += ` LIMIT ${GLOBAL_MYSQL_LIMIT}`;
|
|
15
|
+
}
|
|
16
|
+
return limitQuery;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* To build WHERE query
|
|
21
|
+
* @param where
|
|
22
|
+
* @returns {string}
|
|
23
|
+
*/
|
|
24
|
+
const buildWhereQuery = (where) => {
|
|
25
|
+
let whereQuery = '';
|
|
26
|
+
if (where.length > 0) {
|
|
27
|
+
where.forEach((item, index) => {
|
|
28
|
+
if (index === 0) {
|
|
29
|
+
whereQuery += ` WHERE ${item.key} = ${item.value}`;
|
|
30
|
+
} else {
|
|
31
|
+
whereQuery += ` AND ${item.key} = ${item.value}`;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return whereQuery;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* To build OFFSET query
|
|
40
|
+
* @param offset
|
|
41
|
+
* @returns {string}
|
|
42
|
+
*/
|
|
43
|
+
const buildOffsetQuery = (offset) => {
|
|
44
|
+
let offsetQuery = '';
|
|
45
|
+
if (offset.length > 0) {
|
|
46
|
+
offsetQuery += ` OFFSET ${offset}`;
|
|
47
|
+
} else {
|
|
48
|
+
offsetQuery += ` OFFSET ${GLOBAL_MYSQL_OFFSET}`;
|
|
49
|
+
}
|
|
50
|
+
return offsetQuery;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* To build ORDER BY query
|
|
55
|
+
* @param orderBy
|
|
56
|
+
* @returns {string}
|
|
57
|
+
*/
|
|
58
|
+
const buildOrderByQuery = (orderBy) => {
|
|
59
|
+
let orderByQuery = '';
|
|
60
|
+
if (orderBy.length > 0) {
|
|
61
|
+
orderBy.forEach((item, index) => {
|
|
62
|
+
if (index === 0) {
|
|
63
|
+
orderByQuery += ` ORDER BY ${item.key} ${item.order}`;
|
|
64
|
+
} else {
|
|
65
|
+
orderByQuery += `, ${item.key} ${item.order}`;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return orderByQuery;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* To build INSERT query
|
|
74
|
+
* @param tableName
|
|
75
|
+
* @param data
|
|
76
|
+
* @returns {string}
|
|
77
|
+
*/
|
|
78
|
+
const buildInsertQuery = (tableName, data) => {
|
|
79
|
+
let insertQuery = `INSERT INTO ${tableName}`;
|
|
80
|
+
let keys = Object.keys(data);
|
|
81
|
+
let values = keys.map(key => data[key]);
|
|
82
|
+
insertQuery += `(${keys.join(', ')}) VALUES (${values.join(', ')})`;
|
|
83
|
+
return insertQuery;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* To build UPDATE Query
|
|
88
|
+
* @param tableName
|
|
89
|
+
* @param data
|
|
90
|
+
* @param where
|
|
91
|
+
* @returns {string}
|
|
92
|
+
*/
|
|
93
|
+
const buildUpdateQuery = (tableName, data, where) => {
|
|
94
|
+
|
|
95
|
+
let updateQuery = `UPDATE ${tableName} SET`;
|
|
96
|
+
let keys = Object.keys(data);
|
|
97
|
+
let values = keys.map(key => data[key]);
|
|
98
|
+
keys.forEach((key, index) => {
|
|
99
|
+
if (index === 0) {
|
|
100
|
+
updateQuery += ` ${key} = ${values[index]}`;
|
|
101
|
+
} else {
|
|
102
|
+
updateQuery += `, ${key} = ${values[index]}`;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
updateQuery += buildWhereQuery(where);
|
|
106
|
+
return updateQuery;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* to build DELETE query
|
|
111
|
+
* @param tableName
|
|
112
|
+
* @param where
|
|
113
|
+
* @returns {string}
|
|
114
|
+
*/
|
|
115
|
+
const buildDeleteQuery = (tableName, where) => {
|
|
116
|
+
let deleteQuery = `DELETE FROM ${tableName}`;
|
|
117
|
+
deleteQuery += buildWhereQuery(where);
|
|
118
|
+
return deleteQuery;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* to build SELECT query
|
|
123
|
+
* @param tableName
|
|
124
|
+
* @param where
|
|
125
|
+
* @param orderBy
|
|
126
|
+
* @param limit
|
|
127
|
+
* @param offset
|
|
128
|
+
* @returns {string}
|
|
129
|
+
*/
|
|
130
|
+
const buildSelectQuery = (tableName = '', where = [], orderBy = [], limit = GLOBAL_MYSQL_LIMIT, offset = GLOBAL_MYSQL_OFFSET) => {
|
|
131
|
+
let selectQuery = `SELECT * FROM ${tableName}`;
|
|
132
|
+
selectQuery += buildWhereQuery(where);
|
|
133
|
+
selectQuery += buildOrderByQuery(orderBy);
|
|
134
|
+
selectQuery += buildLimitQuery(limit);
|
|
135
|
+
selectQuery += buildOffsetQuery(offset);
|
|
136
|
+
return selectQuery;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* to build create table query
|
|
141
|
+
* @param tableName
|
|
142
|
+
* @param columns
|
|
143
|
+
* @returns {string}
|
|
144
|
+
*/
|
|
145
|
+
const buildCreateTableQuery = (tableName, columns) => {
|
|
146
|
+
let createTableQuery = `CREATE TABLE ${tableName} (`;
|
|
147
|
+
let keys = Object.keys(columns);
|
|
148
|
+
let values = keys.map(key => columns[key]);
|
|
149
|
+
createTableQuery += `${keys.join(', ')}`;
|
|
150
|
+
createTableQuery += `) ENGINE=InnoDB DEFAULT CHARSET=utf8;`;
|
|
151
|
+
return createTableQuery;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
module.exports = {
|
|
156
|
+
buildLimitQuery,
|
|
157
|
+
buildWhereQuery,
|
|
158
|
+
buildOffsetQuery,
|
|
159
|
+
buildOrderByQuery,
|
|
160
|
+
buildInsertQuery,
|
|
161
|
+
buildUpdateQuery,
|
|
162
|
+
buildDeleteQuery,
|
|
163
|
+
buildSelectQuery
|
|
164
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vtlab-generic-functions",
|
|
3
|
+
"version": "1.0.4",
|
|
4
|
+
"scripts": {
|
|
5
|
+
"test": "jest"
|
|
6
|
+
},
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"@aws-sdk/client-lambda": "^3.478.0",
|
|
9
|
+
"@aws-sdk/client-s3": "^3.478.0",
|
|
10
|
+
"@aws-sdk/client-ses": "^3.478.0",
|
|
11
|
+
"@aws-sdk/client-sqs": "^3.478.0",
|
|
12
|
+
"axios": "^1.6.2",
|
|
13
|
+
"countries-code": "^1.1.0",
|
|
14
|
+
"country-data": "0.0.31",
|
|
15
|
+
"csv-parse": "^4.16.0",
|
|
16
|
+
"dot-object": "^2.1.4",
|
|
17
|
+
"easy-soap-request": "^4.8.0",
|
|
18
|
+
"flatted": "^3.2.2",
|
|
19
|
+
"html-pdf": "^3.0.1",
|
|
20
|
+
"joi": "^17.4.1",
|
|
21
|
+
"jsftp": "^2.1.3",
|
|
22
|
+
"mongodb": "^4.0.1",
|
|
23
|
+
"multer": "^1.4.4",
|
|
24
|
+
"multer-s3": "^2.9.0",
|
|
25
|
+
"mysql": "^2.18.1",
|
|
26
|
+
"node-xlsx": "^0.17.2",
|
|
27
|
+
"node-zip": "^1.1.1",
|
|
28
|
+
"nodemailer": "^6.6.3",
|
|
29
|
+
"phantomjs-prebuilt": "^2.1.16",
|
|
30
|
+
"postal-codes-js": "^2.5.2",
|
|
31
|
+
"promise-ftp": "^1.3.5",
|
|
32
|
+
"save": "^2.4.0",
|
|
33
|
+
"ssh2-sftp-client": "^7.0.0",
|
|
34
|
+
"vtlab-timezone-utils": "^1.0.15",
|
|
35
|
+
"xlsx": "^0.18.5",
|
|
36
|
+
"xml2js": "^0.6.2"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"jest": "^29.7.0",
|
|
40
|
+
"nodemailer-mock": "^2.0.3",
|
|
41
|
+
"sinon": "^17.0.1"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
var fs = require('fs');
|
|
2
|
+
var parse = require('csv-parse');
|
|
3
|
+
var XLSX = require('xlsx');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
const CODES_TYPE = {
|
|
7
|
+
EXTENSION_NOT_FOUND: 'extension_not_found',
|
|
8
|
+
GENERIC_ERROR: 'generic_error',
|
|
9
|
+
SUCCESSFULL_OP: 'succesfull_op'
|
|
10
|
+
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Private functions
|
|
15
|
+
*/
|
|
16
|
+
/*Transform headers is need. For example: delete blanks...etc.
|
|
17
|
+
const processHeadersFromFile = ({typeOp='',headers=[]}) =>{
|
|
18
|
+
return headers;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const fromArrayToObjectArray = ({headers, data}) =>{
|
|
22
|
+
let objArrayResult = [];
|
|
23
|
+
headers = processHeadersFromFile({typeOp:'',headers})
|
|
24
|
+
objArrayResult = data.map(dataItem => {
|
|
25
|
+
let objResult = {}
|
|
26
|
+
headers.forEach((headersItem, index) => {
|
|
27
|
+
objResult[headersItem] = dataItem[index] ? dataItem[index] : '';
|
|
28
|
+
});
|
|
29
|
+
return objResult;
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
return objArrayResult;
|
|
33
|
+
}*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Public functions
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
const fileToJson = ({filePathWithName,delimiter=',',columns=true,params}) =>{
|
|
41
|
+
return new Promise ((resolve, reject)=> {
|
|
42
|
+
let result = null;
|
|
43
|
+
|
|
44
|
+
try{
|
|
45
|
+
let extension = filePathWithName.split('.')[filePathWithName.split('.').length - 1];
|
|
46
|
+
|
|
47
|
+
switch (extension.toLowerCase()) {
|
|
48
|
+
case 'xlsx':
|
|
49
|
+
var workbook = XLSX.readFile(filePathWithName);
|
|
50
|
+
var sheet_name_list = workbook.SheetNames;
|
|
51
|
+
result = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]],{defval: ""})
|
|
52
|
+
return resolve({
|
|
53
|
+
code: CODES_TYPE.SUCCESSFULL_OP,
|
|
54
|
+
message: 'Operación realizada correctamente',
|
|
55
|
+
data :result
|
|
56
|
+
});
|
|
57
|
+
break;
|
|
58
|
+
case 'txt':
|
|
59
|
+
case 'csv':
|
|
60
|
+
result = [];
|
|
61
|
+
|
|
62
|
+
fs.createReadStream(filePathWithName)
|
|
63
|
+
.pipe(
|
|
64
|
+
parse({
|
|
65
|
+
...params,
|
|
66
|
+
columns: columns,
|
|
67
|
+
delimiter: delimiter
|
|
68
|
+
}))
|
|
69
|
+
.on('data', function(csvrow) {
|
|
70
|
+
result.push(csvrow);
|
|
71
|
+
})
|
|
72
|
+
.on('error',function(err) {
|
|
73
|
+
return reject( {code: CODES_TYPE.GENERIC_ERROR,
|
|
74
|
+
message: 'Error durante el procesado del fichero',
|
|
75
|
+
alternative: 'Revisar el error retornado',
|
|
76
|
+
dataError: err
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
.on('end',function() {
|
|
80
|
+
return resolve({
|
|
81
|
+
code: CODES_TYPE.SUCCESSFULL_OP,
|
|
82
|
+
message: 'Operación realizada correctamente',
|
|
83
|
+
data :result
|
|
84
|
+
})
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
break;
|
|
88
|
+
|
|
89
|
+
default:
|
|
90
|
+
return reject({
|
|
91
|
+
code : EXTENSION_NOT_FOUND,
|
|
92
|
+
message : `La extensión ${extension} no está prevista`,
|
|
93
|
+
alternative: 'Por favor, pruebe con una de las extensiones previstas',
|
|
94
|
+
dataError:{}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}catch(err){
|
|
98
|
+
|
|
99
|
+
return reject({
|
|
100
|
+
code : CODES_TYPE.GENERIC_ERROR,
|
|
101
|
+
message : 'Error procesando el fichero',
|
|
102
|
+
alternative: 'Revise la información de error',
|
|
103
|
+
dataError: err
|
|
104
|
+
})
|
|
105
|
+
}
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
module.exports = {
|
|
113
|
+
fileToJson
|
|
114
|
+
}
|
package/pdf/index.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const htmlToPdf = require('html-pdf');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Convierte el contenido de un archivo en formato string a un archivo PDF.
|
|
5
|
+
* @param {string} content - El contenido del archivo en formato string.
|
|
6
|
+
* @param {Object} [options] - Opciones para personalizar la configuración de html-pdf.
|
|
7
|
+
* @param {string} [options.format='Letter'] - El formato de papel del PDF.
|
|
8
|
+
* @param {string} [options.orientation='portrait'] - La orientación de la página.
|
|
9
|
+
* @param {number} [options.border='10mm'] - El ancho del borde de la página.
|
|
10
|
+
* @param {string} [options.header] - Una cadena que especifica el encabezado de la página.
|
|
11
|
+
* @param {string} [options.footer] - Una cadena que especifica el pie de página de la página.
|
|
12
|
+
* @returns {Promise<Buffer>} - Un Buffer del archivo PDF generado.
|
|
13
|
+
*/
|
|
14
|
+
const convertToPdf = (content, options = {}) => {
|
|
15
|
+
const {
|
|
16
|
+
format = 'Letter',
|
|
17
|
+
orientation = 'portrait',
|
|
18
|
+
border = '10mm',
|
|
19
|
+
header = '',
|
|
20
|
+
footer = ''
|
|
21
|
+
} = options;
|
|
22
|
+
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
htmlToPdf.create(content, { format, orientation, border, header, footer }).toBuffer((err, buffer) => {
|
|
25
|
+
if (err) {
|
|
26
|
+
reject(err);
|
|
27
|
+
} else {
|
|
28
|
+
resolve(buffer);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
module.exports = convertToPdf;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const postalCodes = require('postal-codes-js');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This function will transform the incoming values received on data onto the outgoing mapped values, returning a JSON object.
|
|
5
|
+
* @param {string} countryCode ISO 3166-1 alpha-2 or alpha-3 country code as string.
|
|
6
|
+
* @param {string} postalCode Postal code as string or number.
|
|
7
|
+
* @returns {Promise} {
|
|
8
|
+
* isValid: true | false
|
|
9
|
+
* message: Indicates why it is no valid (isValid: false) or it operations was ok.
|
|
10
|
+
* }
|
|
11
|
+
* @throw error: If validate method fails.
|
|
12
|
+
*/
|
|
13
|
+
const isValidPostalCode = async ({countryCode , postalCode }) => {
|
|
14
|
+
|
|
15
|
+
try{
|
|
16
|
+
let isValid = postalCodes.validate(countryCode, postalCode);
|
|
17
|
+
|
|
18
|
+
if(isValid === true){
|
|
19
|
+
return {
|
|
20
|
+
isValid: true,
|
|
21
|
+
message:'Postal code exists for the input country'
|
|
22
|
+
}
|
|
23
|
+
}else{
|
|
24
|
+
return {
|
|
25
|
+
isValid: false,
|
|
26
|
+
message: isValid
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}catch(err){
|
|
30
|
+
throw err;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
module.exports = {
|
|
37
|
+
isValidPostalCode
|
|
38
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const mysql = require('mysql');
|
|
2
|
+
|
|
3
|
+
const connectToDatabase = function (params) {
|
|
4
|
+
return new Promise((resolve, reject) => {
|
|
5
|
+
|
|
6
|
+
if (!params.host || !params.port || !params.user || !params.password || !params.database) {
|
|
7
|
+
reject(new Error('Missing required parameters'));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
let connection = mysql.createConnection({
|
|
11
|
+
host: params.host,
|
|
12
|
+
user: params.user,
|
|
13
|
+
password: params.password,
|
|
14
|
+
database: params.database,
|
|
15
|
+
port: params.port,
|
|
16
|
+
charset: 'utf8'
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
connection.connect(function (err) {
|
|
20
|
+
if (err) {
|
|
21
|
+
reject(err);
|
|
22
|
+
} else {
|
|
23
|
+
resolve(connection);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
module.exports = {
|
|
32
|
+
connectToDatabase
|
|
33
|
+
};
|
package/rds/index.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const config = require('../config');
|
|
2
|
+
const RDSConnection = require('./connect-to-rdsdb');
|
|
3
|
+
const queryBuilder = require('./utils/queryBuilder');
|
|
4
|
+
const {getValueOrNull} = require('../utils/index');
|
|
5
|
+
/**
|
|
6
|
+
* To connect RDS Database. It's always mysql present in out AWS
|
|
7
|
+
* @param path
|
|
8
|
+
* @returns db connection
|
|
9
|
+
*/
|
|
10
|
+
const connectMyRDS = async (databaseName) => {
|
|
11
|
+
try {
|
|
12
|
+
const dbParams = await config.get(databaseName, 'rds');
|
|
13
|
+
|
|
14
|
+
if (!dbParams) {
|
|
15
|
+
throw new Error('Database name is not valid in the Secret Manager');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
dbParams.database = databaseName;
|
|
19
|
+
dbParams.port = dbParams.port || 3306;
|
|
20
|
+
|
|
21
|
+
const connection = await RDSConnection.connectToDatabase(dbParams);
|
|
22
|
+
return connection;
|
|
23
|
+
} catch (error) {
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
//export
|
|
30
|
+
module.exports = {
|
|
31
|
+
connectMyRDS,
|
|
32
|
+
...queryBuilder
|
|
33
|
+
}
|