Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mssql #258

Open
wants to merge 69 commits into
base: master
Choose a base branch
from
Open

Mssql #258

Changes from 1 commit
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
e156668
Add splitter
peterdee Mar 13, 2019
6d12973
Add file creation
peterdee Mar 14, 2019
96e74a7
Formatter: default API responses
peterdee Mar 14, 2019
774e7c5
Default API responses
peterdee Mar 15, 2019
d4cbe15
Classes, x-AuthFieldType
peterdee Mar 18, 2019
70d1c35
Update x-AuthFieldType check in controllers, update templates
peterdee Mar 19, 2019
01bebda
Load definitions to the global scope
peterdee Mar 19, 2019
bf59213
Definitions files generation
peterdee Mar 19, 2019
71c0b15
x-AuthFieldType parameter validation fix
peterdee Mar 20, 2019
f10b02b
Bindings inside of the controllers, global availability
peterdee Mar 20, 2019
af80550
Load objects and classes to the global scope
peterdee Mar 21, 2019
a5ed911
Bind definition classes inside of the controllers
peterdee Mar 21, 2019
2f7b5d9
Fix duplicating definitions
peterdee Mar 21, 2019
05c5386
Fix x-AuthFieldType inside of the definitions classes
peterdee Mar 21, 2019
0b30b93
Default response values for controllers
peterdee Mar 22, 2019
72001af
FieldValidator fixes
peterdee Mar 22, 2019
a6775db
Remove 'require-from-string'
peterdee Mar 22, 2019
cd2262b
Fix definitions classes export to global
peterdee Mar 22, 2019
ff01b38
Fix definitions classes call inside of the controllers
peterdee Mar 22, 2019
6effc4c
Formatting
peterdee Mar 25, 2019
9482fc0
Remove class names from controllers
peterdee Mar 25, 2019
1e45537
Remove class names from controllers
peterdee Mar 25, 2019
140339c
Method template update
peterdee Mar 25, 2019
057b95c
Update templates, fix controller parameters binding
peterdee Mar 26, 2019
4b7d7d2
Fix definitions classes instantination
peterdee Mar 26, 2019
d769ab7
Fix definition binding name
peterdee Mar 26, 2019
0370a29
Fix definitions bindings: nested objects
peterdee Mar 26, 2019
5e478dc
Fix props names for definitions
peterdee Mar 26, 2019
60b67f3
Fix x-AuthFieldType check for definitions
peterdee Mar 27, 2019
f9cdc53
Fix array binding for definitions
peterdee Mar 27, 2019
e5e2aac
Definitions formatting
peterdee Mar 27, 2019
8041aa8
Definitions formatting
peterdee Mar 27, 2019
5ac8dea
Fix default API responses (arrays of objects)
peterdee Mar 27, 2019
7adbb0c
Merge pull request #1 from voicenter/feature/OFC-3
voicenter Mar 27, 2019
8f5fcd2
Fix x-AuthFieldType validation
peterdee Mar 28, 2019
80f25ad
Fix definitions nesting
peterdee Mar 29, 2019
a3c0d5a
Add options checks, update package.json, update README
peterdee Apr 1, 2019
d6706d7
Fix default directories for the generated files, update README
peterdee Apr 1, 2019
c885b75
Merge pull request #2 from voicenter/feature/OFC-3
peterdee Apr 1, 2019
d4269a4
Simple queries generation
peterdee Apr 2, 2019
92679a2
Merge pull request #3 from voicenter/feature/OFC-3
peterdee Apr 2, 2019
d7b789a
Generate all queries
peterdee Apr 2, 2019
2cfcb38
Merge pull request #4 from voicenter/feature/OFC-3
peterdee Apr 2, 2019
58b6ee0
Multi-method template update
peterdee Apr 2, 2019
7dedbba
Merge pull request #5 from voicenter/feature/OFC-3
peterdee Apr 2, 2019
75f0347
Fix typo
peterdee Apr 4, 2019
69cf41e
Merge pull request #6 from voicenter/feature/OFC-3
peterdee Apr 4, 2019
23e5089
Add dal import, use try/catch in methods
peterdee Apr 9, 2019
1891213
Merge pull request #7 from voicenter/feature/OFC-3
peterdee Apr 9, 2019
9fe725b
AMQP: successfull response
peterdee Apr 17, 2019
14f0c7e
Add error responses to the controllers
peterdee Apr 18, 2019
5d2b5b8
Node version ^
peterdee Apr 18, 2019
08c0dbf
Pass error to the response function
peterdee Apr 18, 2019
26ad4ec
Merge pull request #8 from voicenter/feature/amqp
voicenter Apr 22, 2019
d9557d3
added alias to fn querier.
TzachiSh Apr 24, 2019
4362bfc
added specialKeys
TzachiSh Jun 6, 2019
75cc42a
generate bug fix
Oct 29, 2019
0ad9f12
generate bug fix 2
Oct 29, 2019
9945584
generate bug fix 3
Nov 7, 2019
2e3e131
Add type to validate function
voicenter Jul 23, 2020
a0243a6
Update expose.js
Bohdan2000 Jul 31, 2020
cd821ee
Merge pull request #9 from Bohdan2000/patch-2
voicenter Jul 31, 2020
6c049d5
use validators list instead of one validation
dmitrysam88 Apr 8, 2021
8527cc0
Merge pull request #10 from dmitrysam88/use-validators-list
voicenter Apr 8, 2021
7c5dfdf
Update multi-method.mustache
ViktoryaSVA Jun 2, 2021
93f13cb
Update multi-method.mustache
ViktoryaSVA Jun 2, 2021
312b031
Update multi-method.mustache
ViktoryaSVA Jun 2, 2021
cc89650
Merge pull request #11 from ViktoryaSVA/patch-2
voicenter Jun 2, 2021
5b2dc6b
first push mssql
May 9, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
added alias to fn querier.
expose data.
TzachiSh committed Apr 24, 2019
commit d9557d3770a996467b48fc525bff08585dca2320
25 changes: 13 additions & 12 deletions lib/expose.js
Original file line number Diff line number Diff line change
@@ -40,30 +40,30 @@ function expose(definitions, methods, path, directory) {
if (items['$ref']) {
const refName = items['$ref'].split('/').slice(-1)[0];
parameters = `${parameters}
this['${prop}'] = [];
this.data['${prop}'] = [];
if (params['${prop}'].length && params['${prop}'].length > 0) {
params['${prop}'].forEach((object) => {
const ${refName} = new global.classes['${refName}'](req, res, object);
this.${prop}.push(${refName});
this.data.${prop}.push(${refName});
});
}`;
} else {
parameters = `${parameters}
this['${prop}'] = req.body['${prop}'];`;
this.data['${prop}'] = req.body['${prop}'];`;
}
} else {
parameters = `${parameters}
this['${prop}'] = req.body['${prop}'];`;
this.data['${prop}'] = req.body['${prop}'];`;
}
} else {
parameters = `${parameters}
this['${prop}'] = req.body['${prop}'];`;
this.data['${prop}'] = req.body['${prop}'];`;
}
} else {
if (definitions[definition].properties[prop]['$ref']) {
const refName = definitions[definition].properties[prop]['$ref'].split('/').slice(-1)[0];
parameters = `${parameters}
this['${prop}'] = new global.classes['${refName}'](req, res, req.body['${prop}']);`;
this.data['${prop}'] = new global.classes['${refName}'](req, res, req.body['${prop}']);`;
}
}
});
@@ -137,6 +137,7 @@ function expose(definitions, methods, path, directory) {
this.req = req;
this.res = res;
this.params = params;
this.data = {};
${parameters}
${validation}
this.schema = ${inspect(definitions[definition], { showHidden: false, depth: null })};
@@ -151,12 +152,12 @@ function expose(definitions, methods, path, directory) {

// create file in the destination folder
fs.writeFileSync(`${destination}/${definition}.js`,
beauty(content, { indent_size: 2 }),
(err) => {
if (err) {
throw new Error(err.message || err);
}
});
beauty(content, { indent_size: 2 }),
(err) => {
if (err) {
throw new Error(err.message || err);
}
});
});
} catch (err) {
throw new Error(err.message || err);
73 changes: 41 additions & 32 deletions lib/querier.js
Original file line number Diff line number Diff line change
@@ -8,18 +8,21 @@ const specialKeys = ['Add', 'Create', 'Delete', 'Disable', 'Update'];
* @returns {object} - { parameters: {string}, questions: {string} }
*/
function getProperties(params) {
const parameters = [];
const questions = [];
params.forEach((param) => {
if (param.name) {
parameters.push(param.name);
const parameters = [];
const questions = [];
params.forEach((param) => {
if (param.name) {
if(param.in === 'body')
parameters.push(param.name + '.data');
else
parameters.push(param.name);
}
questions.push('?');
});
return {
parameters: parameters.join(', '),
questions: questions.join(', '),
}
questions.push('?');
});
return {
parameters: parameters.join(', '),
questions: questions.join(', '),
}
}

/**
@@ -28,31 +31,37 @@ function getProperties(params) {
* @returns {object} - same as data, but with updated methods
*/
function querier(data) {
try {
const mutable = _.cloneDeep(data);
const { methods, definitions } = mutable;

if (!(methods && methods.length > 0 && definitions && definitions.length > 0)) {
return new Error('Methods and definitions should not be empty!');
}
try {
const mutable = _.cloneDeep(data);
const { methods, definitions } = mutable;

methods.forEach((method, m) => {
let special = false;
specialKeys.forEach((key) => {
if (method.methodName.includes(key)) {
special = true;
if (!(methods && methods.length > 0 && definitions && definitions.length > 0)) {
return new Error('Methods and definitions should not be empty!');
}
});

const { parameters, questions } = getProperties(method.parameters, special);
mutable.methods[m].query = `const results = await dal.query("${special ? 'CALL SP_' : 'SELECT FN_'}${method.methodName}(${questions})", `
+ `[${parameters}], { redis: ${!special} });`;
});
methods.forEach((method, m) => {
let special = false;
specialKeys.forEach((key) => {
if (method.methodName.includes(key)) {
special = true;
}
});

const { parameters, questions } = getProperties(method.parameters, special);
let query ='';
if(special){
query = `CALL SP_${method.methodName}(${questions})`;
}else{
query = `SELECT FN_${method.methodName}(${questions}) as Response`;
}
mutable.methods[m].query = `const results = await dal.query("${query}", `
+ `[${parameters}], { redis: ${!special} });`;
});

return mutable;
} catch (err) {
throw new Error(err.message || err);
}
return mutable;
} catch (err) {
throw new Error(err.message || err);
}
}

module.exports = querier;
1 change: 1 addition & 0 deletions templates/multi-method.mustache
Original file line number Diff line number Diff line change
@@ -42,6 +42,7 @@
{{#query}}
/*
{{&query}}
return res.code(results.Status).send(results);
*/
{{/query}}
{{^query}}