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

Schemas mongo #3

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
9 changes: 0 additions & 9 deletions index.js

This file was deleted.

36 changes: 29 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,40 @@
"jest": "^24.5.0",
"jest-cli": "^24.5.0",
"nodemon": "^1.19.0",
"supertest": "^4.0.2"
"supertest": "^4.0.2",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"dotenv": "^8.0.0",
"express": "^4.17.0",
"express-prom-bundle": "^5.1.5",
"http-status-codes": "^1.3.2",
"prom-client": "^11.5.0",
"chai": "^4.2.0",
"coveralls": "^3.0.3",
"eslint-config-airbnb": "^17.1.0",
"lcov-result-merger": "^3.1.0",
"mocha": "^6.1.4",
"mongoose": "^5.5.10",
"nyc": "^14.1.1"
},
"scripts": {
"start": "nodemon --exec babel-node -- index",
"test": "jest --runInBand --watch",
"test:ci": "jest --runInBand --ci --forceExit",
"lint": "eslint ./src/**/*.js"
"coverage": "nyc mocha --exit && nyc report --reporter=text-lcov > ../.lcov/back.lcov",
"coveralls": "lcov-result-merger '../.lcov/*.lcov' | coveralls",
"lint": "eslint src --ext .js && eslint test --ext .js",
"start": "cd src && node index",
"test": "mocha",
"test-unwatch": "yarn test --exit"
},
"eslintConfig": {},
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.16.4",
"express": "^4.17.0",
"lodash": "^4.17.11",
"morgan": "^1.9.1"
"morgan": "^1.9.1",
"cors": "^2.8.5",
"dotenv": "^8.0.0",
"express-prom-bundle": "^5.1.5",
"http-status-codes": "^1.3.2",
"prom-client": "^11.5.0"
}
}
172 changes: 172 additions & 0 deletions src/controllers/usuarioController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
const { OK, NO_CONTENT, NOT_FOUND, CREATED } = require('http-status-codes');
const mongoose = require('mongoose');
const Usuario = require('../schemas/usuario');

const builderFabrica = (body) => ({
id_fabrica: body.id_fabrica || mongoose.Types.ObjectId(),
nombre: body.nombre || "nombre1234",
celdas: body.celdas || [],
ganancias: 50000
});

const builderUpdateFabrica = (body, fabricaVieja) =>({
id_fabrica: fabricaVieja.id_fabrica,
nombre: body.nombre || fabricaVieja.nombre,
celdas: body.celdas || fabricaVieja.celdas,
ganancias: body.ganancias || fabricaVieja.ganancias
});

const builderCrearCelda = (body,fabricaVieja) =>({
id_fabrica: fabricaVieja.id_fabrica,
nombre: fabricaVieja.nombre,
celdas: fabricaVieja.celdas.concat([body.celda]),
ganancias: fabricaVieja.ganancias
});

const UsuarioController = {
getUsuarios: (_, res, next) => {
Usuario
.find()
.then(usuarios => res.status(OK).json(usuarios))
.catch(next);
},

getUsuario: (req, res, next) => {
const { username } = req.params;
Usuario
.findOne({ username })
.then((usuario) => {
if (!usuario) {
//return res.status(NOT_FOUND).json();
return new Usuario({ username })
.save()
.then(nuevoUsuario => res.status(OK).json(nuevoUsuario))
}
return res.status(OK).json(usuario);
})
.catch(next);
},

agregarUsuario: (req, res, next) => {
const { username } = req.params;
Usuario
.findOne({ username })
.then((usuario) => {
if (!usuario) {
return new Usuario({ username })
.save()
.then(usuarioNuevo => res.status(OK).json(usuarioNuevo));
}
else {
return res.status("El usuario ya ha sido creado").json();
}
})
.catch(next);
},

getFabrica: (req, res, next) => {
Usuario
.findOne({ username: req.params.username })
.then((usuario) => {
const fabrica = usuario.fabricas.find(f => f.id_fabrica.toString() === req.params.idFabrica);
if (!fabrica) return res.status(NOT_FOUND).json();
return res.status(OK).json(fabrica);
})
.catch(next);
},

crearFabrica: (req, res, next) => {
const fabrica = builderFabrica(req.body);
Usuario
.findOneAndUpdate(
{ username: req.params.username },
{ $push: { fabricas: fabrica } },
{ new: true, useFindAndModify: false }
)
.then((usuario) => {
if (!usuario) return res.status(NOT_FOUND).json();
return res.status(CREATED).json(usuario);
})
.catch(next);
},

borrarFabrica: (req, res, next) => {
Usuario
.findOne({ username: req.params.username })
.then((usuario) => {
const fabrica = usuario.fabricas.find(f => f.id_fabrica.toString() === req.params.idFabrica);
if (!fabrica) return res.status(NOT_FOUND).json();

return Usuario.findOneAndUpdate(
{ username: req.params.username },
{ $pull: { fabricas: fabrica } },
{ new: true, useFindAndModify: false }
).then(() => res.status(NO_CONTENT).json());
})
.catch(next);
},

actualizarFabrica: (req, res, next) => {
Usuario
.findOne({ username: req.params.username })
.then((usuario) => {
const fabricaAntes = usuario.fabricas.find(f => f.id_fabrica.toString() === req.params.idFabrica);
if (!fabricaAntes) return res.status(NOT_FOUND).json();

const fabricaActualizada = builderUpdateFabrica(req.body, fabricaAntes);
Usuario.findOneAndUpdate(
{ username: req.params.username },
{ $pull: { fabricas: fabricaAntes } },
{ new: true, useFindAndModify: false }
).then(() => {
Usuario.findOneAndUpdate(
{ username: req.params.username },
{ $push: { fabricas: fabricaActualizada } },
{ new: true, useFindAndModify: false }
).catch(next);
}).catch(next);

return res.status(OK).json(fabricaActualizada);
})
.catch(next);
},

getGanancias:(req, res, next) => {
Usuario
.findOne({ username: req.params.username })
.then((usuario) => {
const fabrica = usuario.fabricas.find(f => f.id_fabrica.toString() === req.params.idFabrica);
if (!fabrica) return res.status(NOT_FOUND).json();
const ganancias = fabrica.ganancias
return res.status(OK).json(ganancias);
})
.catch(next);
},

agregarCelda: (req, res, next) => {
Usuario
.findOne({ username: req.params.username })
.then((usuario) => {
const fabricaAntes = usuario.fabricas.find(f => f.id_fabrica.toString() === req.params.idFabrica);
if (!fabricaAntes) return res.status(NOT_FOUND).json();

const fabricaActualizada = builderCrearCelda(req.body, fabricaAntes);
Usuario.findOneAndUpdate(
{ username: req.params.username },
{ $pull: { fabricas: fabricaAntes } },
{ new: true, useFindAndModify: false }
).then(() => {
Usuario.findOneAndUpdate(
{ username: req.params.username },
{ $push: { fabricas: fabricaActualizada } },
{ new: true, useFindAndModify: false }
).catch(next);
}).catch(next);

return res.status(OK).json(fabricaActualizada);
})
.catch(next);
}
};

module.exports = UsuarioController;
23 changes: 23 additions & 0 deletions src/db.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const mongoose = require('mongoose');

const mongo = {
db: process.env.MONGO_DB || 'usuario',
host: process.env.MONGO_HOST || 'localhost',
port: process.env.MONGO_PORT || 27017,
user: process.env.MONGO_USER || '',
pass: process.env.MONGO_PASS || ''
};

// Mongoose connection
const db = mongoose.connection;
mongoose.connect(`mongodb://${mongo.host}:${mongo.port}/${mongo.db}`, {
useNewUrlParser: true,
user: mongo.user,
pass: mongo.pass,
keepAlive: true
});

db.on('error', console.error.bind(console, 'MongoDB connection error:'));
db.once('open', () => console.info('MongoDB Connection OK'));

module.exports = mongoose;
3 changes: 3 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
require('dotenv').config({ path: `${__dirname}/../.env` });
require('./db');
require('./server');
Loading