diff --git a/config/index.js b/config/index.js index 47263f4..2d79ea9 100755 --- a/config/index.js +++ b/config/index.js @@ -10,7 +10,14 @@ var config = { name: 'express-blog-api' }, port: port, - db: 'mongodb://mongodb:27017/test', + db: 'mongodb://localhost:27017/test', + mysql: { + host: '127.0.0.1', + user: 'root', + password: 'root', + database: 'api_generator', + charset: 'utf8' + } }, production: { diff --git a/gulpfile.js b/gulpfile.js index d41f9d9..56c580c 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -5,6 +5,17 @@ var gulp = require('gulp'), gulp_data = require('gulp-data'), rename = require('gulp-rename'); +var connect = require('knex')({ + client: 'mysql', + connection: { + host : config.mysql.host, + user : config.mysql.user, + password : config.mysql.password, + database : config.mysql.database, + charset : config.mysql.charset + } +}); + gulp.task('gen', function () { var adminData = {}; MongoClient.connect(config.db, function(err, db) { @@ -31,6 +42,25 @@ gulp.task('gen', function () { }); }); +gulp.task('gen-mysql', () => { + return connect.raw('SHOW TABLES') + .then(([tables]) => { + tables.forEach((table) => { + tableName = table[`Tables_in_${'api_generator'}`]; + + genMysqlModel(tableName); + genMysqlCtrl(tableName); + + console.log('Schema table ' + tableName); + }); + return; + }) + .catch((error) => { + console.log("Cann't connect to DB!\n", error); + return []; + }); +}); + function refineType(stringType) { return stringType.charAt(0).toUpperCase() + stringType.slice(1); } @@ -147,3 +177,23 @@ function genModels (name, data){ .pipe(rename(name+'.js')) .pipe(gulp.dest('./app/models/')); } + +function genMysqlCtrl (name){ + gulp.src('./template/mysqlCtrlTemplate.js') + .pipe(gulp_data(function (){ + return {name : name} + })) + .pipe(template()) + .pipe(rename(name+'.js')) + .pipe(gulp.dest('./app/controllers/')); +} + +function genMysqlModel (name){ + gulp.src('./template/mysqlModelTemplate.js') + .pipe(gulp_data(function (){ + return {name : name} + })) + .pipe(template()) + .pipe(rename(name+'.js')) + .pipe(gulp.dest('./app/models/')); +} diff --git a/package.json b/package.json index 6251736..b7a7bc3 100755 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "scripts": { "start": "node app.js", "gen": "gulp gen", + "gen-mysql": "gulp gen-mysql", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", @@ -15,10 +16,13 @@ "ejs": "^2.4.1", "express": "^4.13.4", "express-paginate": "^0.1.1", + "faker": "^4.1.0", "jade": "^1.11.0", + "knex": "^0.14.6", "mongodb": "^2.1.8", "mongoose": "^4.4.6", "mongoose-pages": "0.0.3", + "mysql": "^2.15.0", "ng-admin": "^0.9.1" }, "devDependencies": { diff --git a/template/mysqlCtrlTemplate.js b/template/mysqlCtrlTemplate.js new file mode 100644 index 0000000..c693c0a --- /dev/null +++ b/template/mysqlCtrlTemplate.js @@ -0,0 +1,49 @@ +'use strict'; + +module.exports = function(config, utils, Model) { + let obj = {}; + + obj.get = (req, res) => { + Model.forge().where({ id: req.params.id }).fetchAll() + .then((greeting) => { + return res.json(<%= name %>); + }) + .catch((error) => { + return res.json({ message: 'fails', error: error }); + }); + } + + obj.create = (req, res) => { + Model.forge().save(req.body, { method: 'insert' }) + .then((<%= name %>) => { + return res.json({ message: 'success', result: <%= name %> }); + }) + .catch((error) => { + return res.json({ message: 'fails', error: error }); + }); + } + + obj.update = (req, res) => { + Model.forge().where({ id: req.params.id }) + .save(req.body, { method: 'update' }) + .then((<%= name %>) => { + return res.json({ message: 'success', result: <%= name %> }); + }) + .catch((error) => { + return res.json({ message: 'fails', error: error }); + }); + } + + obj.remove = (req, res) => { + Model.forge({ id: req.params.id }) + .destroy() + .then((<%= name %>) => { + return res.json({ message: 'success', deleted: <%= name %> }); + }) + .catch((error) => { + return res.json({ message: 'error', error: error }); + }); + } + + return obj; +}; diff --git a/template/mysqlModelTemplate.js b/template/mysqlModelTemplate.js new file mode 100644 index 0000000..a4c848d --- /dev/null +++ b/template/mysqlModelTemplate.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = (config, utils, connect) => { + + let <%= name %> = connect.Model.extend({ + tableName: '<%= name %>' + }); + + return <%= name %>; +};