From 88293c1e348a0eafabb66c73fde5cc1ed9c726f9 Mon Sep 17 00:00:00 2001 From: Matjaz Date: Sun, 6 Feb 2022 20:42:11 +0100 Subject: [PATCH] MVC framework added. --- .jshintrc | 3 ++ app.js | 2 ++ config/config.json | 32 ++++++++++++++++++++ database/socialbot.db | Bin 0 -> 20480 bytes migrations/20220206114602-create-user.js | 33 +++++++++++++++++++++ models/index.js | 36 +++++++++++++++++++++++ models/user.js | 15 ++++++++++ routes/users.js | 14 ++++++++- 8 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 .jshintrc create mode 100644 config/config.json create mode 100644 database/socialbot.db create mode 100644 migrations/20220206114602-create-user.js create mode 100644 models/index.js create mode 100644 models/user.js diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..58ec1af --- /dev/null +++ b/.jshintrc @@ -0,0 +1,3 @@ +{ + "esversion":9 + } \ No newline at end of file diff --git a/app.js b/app.js index 62dff0d..8ee03db 100644 --- a/app.js +++ b/app.js @@ -9,6 +9,8 @@ var usersRouter = require('./routes/users'); var app = express(); +const db = require('./models'); + // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); diff --git a/config/config.json b/config/config.json new file mode 100644 index 0000000..7ed2b36 --- /dev/null +++ b/config/config.json @@ -0,0 +1,32 @@ +{ + "development": { + "username": "root", + "password": null, + "database": "socialbot", + "dialect": "sqlite", + "storage": "./database/socialbot.db", + "dialectOptions": { + "readWriteMode": "sqlite3.OPEN_CREATE" + } + }, + "test": { + "username": "root", + "password": null, + "database": "socialbot", + "dialect": "sqlite", + "storage": "./database/socialbot.db", + "dialectOptions": { + "readWriteMode": "sqlite3.OPEN_CREATE" + } + }, + "production": { + "username": "root", + "password": null, + "database": "socialbot", + "dialect": "sqlite", + "storage": "./database/socialbot.db", + "dialectOptions": { + "readWriteMode": "sqlite3.OPEN_CREATE" + } + } +} diff --git a/database/socialbot.db b/database/socialbot.db new file mode 100644 index 0000000000000000000000000000000000000000..6d69a818398ddb32873b91cbabc9916d03bfe777 GIT binary patch literal 20480 zcmeI)OK#dg7zgkfAds|5sMLiQU37MU2*{X+3ahxOORa#DI0lIocEUt*%PW4gRd-P@ z&=ce)Jxgy9b=kp?HYQ4URT}9(^1wWpvA>_a8IQ!tamNifJD+(ICty|bj8IDU7$bzF zMcxqkCM856byE@F^j7)4Vw#i>zHMiJlGM%%l6{-~zB3U8BnUtN0uX=z1Rwwb2tWV= z5cr=2j#6o2kbx_FtukL>V_E9)eLKw z*^4vStgo8;?^H9d)awP&ICp&i)65f7tab2-0ON(hZZw> zosO6-oR9A9E`&5A<#P105XE(}KpMMWc$WuGtdfYw8S7ibdpC~Xm%w_4e%#Y;GZdPM zwA9T};!a2W^Ge+bgIQD`#%3Q@V%4O0&^8wj+qTFw`-6xB2?7v+00bZa0SG_<0uX=z z1Rwx`$0_iVCfbUuh(m5vDz%2Jl$P%~N}+i9Qhx705piMt|2S_ht{MUmfB*y_009U< z00Izz00bbg5@5;p)?e5E%l-c=lD&c%1Rwwb2tWV=5P$##AOHafKmY;{BVf}Ed7jJZ zy4KgcaKfi<^_+W-=kkwyFPx9v>4&oKE*AJDv9m8XSmjl#-e}3qa!skSqAa&$vGf0@ zx7n&HEu~RzDz#Pba{Yfzveyq2A { + return queryInterface.createTable('Users', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + name: { + type: Sequelize.STRING + }, + password: { + type: Sequelize.STRING + }, + email: { + type: Sequelize.STRING + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }); + }, + down: (queryInterface, Sequelize) => { + return queryInterface.dropTable('Users'); + } +}; \ No newline at end of file diff --git a/models/index.js b/models/index.js new file mode 100644 index 0000000..b63d979 --- /dev/null +++ b/models/index.js @@ -0,0 +1,36 @@ +'use strict'; + +var fs = require('fs'); +var path = require('path'); +var Sequelize = require('sequelize'); +var basename = path.basename(module.filename); +var env = process.env.NODE_ENV || 'development'; +var config = require(__dirname + './../config/config.json')[env]; +var db = {}; + +if (config.use_env_variable) { + var sequelize = new Sequelize(process.env[config.use_env_variable]); +} else { + var sequelize = new Sequelize(config.database, config.username, config.password, config); +} + +fs + .readdirSync(__dirname) + .filter(file => { + return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'); + }) + .forEach(file => { + var model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes) + db[model.name] = model; + }); + +Object.keys(db).forEach(modelName => { + if (db[modelName].associate) { + db[modelName].associate(db); + } +}); + +db.sequelize = sequelize; +db.Sequelize = Sequelize; + +module.exports = db; diff --git a/models/user.js b/models/user.js new file mode 100644 index 0000000..1d08e3a --- /dev/null +++ b/models/user.js @@ -0,0 +1,15 @@ +'use strict'; +module.exports = (sequelize, DataTypes) => { + var User = sequelize.define('User', { + name: DataTypes.STRING, + password: DataTypes.STRING, + email: DataTypes.STRING + }, { + classMethods: { + associate: function(models) { + // associations can be defined here + } + } + }); + return User; +}; \ No newline at end of file diff --git a/routes/users.js b/routes/users.js index 623e430..76e8b95 100644 --- a/routes/users.js +++ b/routes/users.js @@ -1,8 +1,20 @@ var express = require('express'); +const db = require('../models'); var router = express.Router(); +var User = db.User; /* GET users listing. */ -router.get('/', function(req, res, next) { +router.get('/', async function(req, res, next) { + var users = await User.findAll(); + res.send(users); +}); + +router.put('/:id', async function(req, res, next) { + var users = await User.update({'email':'eve@uplink.si'}, {where:{'ID':req.params.id}}); + res.send(users); +}); + +router.get('/add', function(req, res, next) { res.send('respond with a resource'); });