Archived
1
0
Fork 0

Setup sequelize and create models

This commit is contained in:
Ethanell 2020-08-15 12:36:20 +02:00
parent a62d7a1921
commit 519e020831
8 changed files with 928 additions and 4 deletions

View file

@ -7,6 +7,7 @@
let app = require("../app"); let app = require("../app");
let debug = require("debug")("sod:server"); let debug = require("debug")("sod:server");
let http = require("http"); let http = require("http");
let models = require("../models");
/** /**
* Get port from environment and store in Express. * Get port from environment and store in Express.
@ -25,9 +26,11 @@ let server = http.createServer(app);
* Listen on provided port, on all network interfaces. * Listen on provided port, on all network interfaces.
*/ */
models.sequelize.sync().then(() => {
server.listen(port); server.listen(port);
server.on("error", onError); server.on("error", onError);
server.on("listening", onListening); server.on("listening", onListening);
});
/** /**
* Normalize a port into a number, string, or false. * Normalize a port into a number, string, or false.

View file

@ -0,0 +1,7 @@
{
"username": "root",
"password": null,
"database": "database_development",
"host": "127.0.0.1",
"dialect": "mysql"
}

31
models/command.js Normal file
View file

@ -0,0 +1,31 @@
"use strict";
const {
Model
} = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class Command extends Model {
static associate(models) {
Command.belongsToMany(models.Sandwich, {through: "SandwichCommand"});
Command.belongsTo(models.Department);
}
}
Command.init({
firstName: {
type: DataTypes.STRING,
allowNull: false
},
lastName: {
type: DataTypes.STRING,
allowNull: false
},
date: {
type: DataTypes.DATEONLY,
defaultValue: DataTypes.NOW,
allowNull: false
}
}, {
sequelize,
modelName: "Command",
});
return Command;
};

22
models/department.js Normal file
View file

@ -0,0 +1,22 @@
"use strict";
const {
Model
} = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class Department extends Model {
static associate(models) {
Department.hasMany(models.Command);
}
}
Department.init({
name: {
type: DataTypes.STRING,
unique: true,
allowNull: false
}
}, {
sequelize,
modelName: "Department",
});
return Department;
};

36
models/index.js Normal file
View file

@ -0,0 +1,36 @@
"use strict";
const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
const basename = path.basename(__filename);
const config = require(__dirname + "/../config/config.json");
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
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 => {
const 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;

26
models/sandwich.js Normal file
View file

@ -0,0 +1,26 @@
"use strict";
const {
Model
} = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class Sandwich extends Model {
static associate(models) {
Sandwich.belongsToMany(models.Command, {through: "SandwichCommand"});
}
}
Sandwich.init({
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
price: {
type: DataTypes.FLOAT,
allowNull: false
}
}, {
sequelize,
modelName: "Sandwich",
});
return Sandwich;
};

795
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -11,6 +11,10 @@
"express": "~4.16.1", "express": "~4.16.1",
"http-errors": "~1.6.3", "http-errors": "~1.6.3",
"morgan": "~1.9.1", "morgan": "~1.9.1",
"pug": "2.0.0-beta11" "pg": "^8.3.0",
"pg-hstore": "^2.3.3",
"pug": "2.0.0-beta11",
"sequelize": "^6.3.4",
"sequelize-cli": "^6.2.0"
} }
} }