diff --git a/.env b/.env index e69de29..1083523 100644 --- a/.env +++ b/.env @@ -0,0 +1,9 @@ +TYPEDB = mariadb + +DB = ejemploCenso + +USERDB = censoDev + +PASSDB = holaC3ns0 + +HOSTDB = localhost diff --git a/package-lock.json b/package-lock.json index 4b0b3e5..2166a56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,8 +22,12 @@ "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "@types/geojson": { + "version": "7946.0.7", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.7.tgz", + "integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ==" }, "@types/node": { "version": "14.0.27", @@ -96,7 +100,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, "requires": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" @@ -402,7 +405,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -410,8 +412,12 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, "concat-map": { "version": "0.0.1", @@ -1122,6 +1128,38 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "requires": { + "chalk": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", @@ -1158,6 +1196,35 @@ } } }, + "mariadb": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.4.2.tgz", + "integrity": "sha512-ybK520CO/8Z74MNJ77dEwXjRMhxMbQdpPia+/uJakJWiZoLEmuwSHqs51qWr4FE5WcgHQfL5KCmOiHErR/LpTg==", + "requires": { + "@types/geojson": "^7946.0.7", + "@types/node": "^13.9.8", + "denque": "^1.4.1", + "iconv-lite": "^0.5.1", + "long": "^4.0.0", + "moment-timezone": "^0.5.31", + "please-upgrade-node": "^3.2.0" + }, + "dependencies": { + "@types/node": { + "version": "13.13.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.15.tgz", + "integrity": "sha512-kwbcs0jySLxzLsa2nWUAGOd/s21WU1jebrEdtzhsj1D4Yps1EOuyI1Qcu+FD56dL7NRNIJtDDjcqIG22NwkgLw==" + }, + "iconv-lite": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", + "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1505,6 +1572,14 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "requires": { + "semver-compare": "^1.0.0" + } + }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", @@ -1681,6 +1756,11 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + }, "semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", diff --git a/package.json b/package.json index d308bc4..adb93e3 100644 --- a/package.json +++ b/package.json @@ -4,16 +4,21 @@ "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "test:db": "node server/config/test", + "install:db": "node server/models/install" }, "author": "", "license": "ISC", "dependencies": { "bcrypt": "^5.0.0", + "colors": "^1.4.0", "cors": "^2.8.5", "dotenv": "^8.2.0", "express": "^4.17.1", "jsonwebtoken": "^8.5.1", + "log-symbols": "^4.0.0", + "mariadb": "^2.4.2", "moment": "^2.27.0", "mysql2": "^2.1.0", "sequelize": "^6.3.4" diff --git a/server/config/config.js b/server/config/config.js index c806a5f..8496c49 100644 --- a/server/config/config.js +++ b/server/config/config.js @@ -12,7 +12,7 @@ try { } process.env.TYPE_DB = process.env.TYPE_DB || 'mariadb' -process.env.DB = process.env.DB || 'ejem' +process.env.DB = process.env.DB || 'ejemplo' process.env.USER_DB = process.env.USER_DB || 'root' process.env.PASSWORD_DB = process.env.PASSWORD_DB || '' process.env.HOST_DB = process.env.HOST_DB || 'localhost' diff --git a/server/config/sequelize.conf.js b/server/config/sequelize.conf.js new file mode 100644 index 0000000..d60a427 --- /dev/null +++ b/server/config/sequelize.conf.js @@ -0,0 +1,20 @@ +const Sequelize = require("sequelize"); + +require("./config"); + +const sequelize = new Sequelize( + process.env.DB, + process.env.USERDB, + process.env.PASSDB, + { + host: process.env.HOSTDB, + dialect: process.env.TYPEDB, + logging: false, + dialectOptions: { + useUTC: false //for reading from database + }, + timezone: "-05:00" //for writing to database + } +); + +module.exports = sequelize; diff --git a/server/config/test.js b/server/config/test.js new file mode 100644 index 0000000..b480aa1 --- /dev/null +++ b/server/config/test.js @@ -0,0 +1,15 @@ +const Sequelize = require("sequelize"); +const sequelize = require("./sequelize.conf"); + +const colors = require("colors"); + +sequelize + .authenticate() + .then(() => { + console.log("Conexión establecida con éxito.".green); + process.exit(); + }) + .catch(err => { + console.error("No se ha podido establacer conexión con la base de datos:".red, err); + process.exit(); + }); diff --git a/server/models/install.js b/server/models/install.js new file mode 100644 index 0000000..2a7217c --- /dev/null +++ b/server/models/install.js @@ -0,0 +1,41 @@ +const logSymbols = require("log-symbols"); +const colors = require("colors"); +const bcrypt = require("bcrypt"); + +const admin = require("./tablas/Admin"); + +require("../config/config"); + +async function remove() { + console.log(logSymbols.info, "Paso 1 : Borrando base de datos \n".blue.bold); + + await admin.drop(); + console.log(logSymbols.success, "admin"); + +} + +async function install() { + console.log( + logSymbols.info, + "Paso 2 : Instalando base de datos \n".blue.bold + ); + + await admin.sync(); + console.log(logSymbols.success, "admin"); + +//crear clave foranea de una tabla a otra, ejemplo +// responsable.hasMany(programa, { +// foreignKey: "idResponsable", +// }); + +} + +async function exec() { + await remove(); + await install(); + + console.log(logSymbols.success, "Éxito al instalar \n".underline.bold.green); + process.exit(); +} + +exec(); diff --git a/server/models/tablas/Admin.js b/server/models/tablas/Admin.js new file mode 100644 index 0000000..5c543ff --- /dev/null +++ b/server/models/tablas/Admin.js @@ -0,0 +1,28 @@ +const Sequelize = require("sequelize"); +const sequelize = require("../../config/sequelize.conf"); + +class Admin extends Sequelize.Model {} +Admin.init( + { + idAdmin: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + allowNull: false, + }, + nombre: { + type: Sequelize.STRING(50), + allowNull: false, + }, + password: { + type: Sequelize.STRING(100), + allowNull: false, + }, + }, + { + sequelize, + tableName: "admin", + } +); + +module.exports = Admin;