Skip to content

Commit

Permalink
Fin sección 11 - CRUD imagenes
Browse files Browse the repository at this point in the history
  • Loading branch information
ItsasoAguirre committed Jan 25, 2020
1 parent 59c1e70 commit cdbd0e2
Show file tree
Hide file tree
Showing 15 changed files with 770 additions and 13 deletions.
31 changes: 23 additions & 8 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,34 @@ app.use(bodyParser.json())

//Importar rutas
var appRoutes = require('./routes/app');
var usuarioRoutes = require('./routes/usuario');
var loginRoutes = require('./routes/login');

// Conexion a la base de datos
mongoose.connection.openUri('mongodb://localhost:27017/hospitalDB', (err, res) => {
if (err) throw err;

console.log('Base de datos: \x1b[32m%s\x1b[0m', ' online');
})
var usuarioRoutes = require('./routes/usuario');
var hospitalRoutes = require('./routes/hospital');
var medicoRoutes = require('./routes/medico');
var busquedaRoutes = require('./routes/busqueda');
var uploadRoutes = require('./routes/upload');
var imageRoutes = require('./routes/imagen');

mongoose
.connect('mongodb://localhost:27017/hospitalDB', {
useUnifiedTopology: true,
useCreateIndex: true,
useNewUrlParser: true,
})
.then(() => console.log('Base de datos: \x1b[32m%s\x1b[0m', ' online'))
.catch(err => {
console.log('DB Connection Error:' + err.message);
});

// Rutas
app.use('/upload', uploadRoutes);
app.use('/busqueda', busquedaRoutes);
app.use('/medico', medicoRoutes);
app.use('/hospital', hospitalRoutes);
app.use('/usuario', usuarioRoutes);
app.use('/login', loginRoutes);
app.use('/image', imageRoutes);

app.use('/', appRoutes);

//Escuchar peticiones
Expand Down
Binary file added assets/no-img.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 12 additions & 0 deletions models/hospital.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
var mongoose = require('mongoose');

var Schema = mongoose.Schema;

var hospitalSchema = new Schema({

nombre: { type: String, required: [true, 'El nombre es necesario'] },
img: { type: String, required: false },
usuario: { type: Schema.Types.ObjectId, ref: 'Usuario' }
}, { collection: 'hospitales' });

module.exports = mongoose.model('Hospital', hospitalSchema);
11 changes: 11 additions & 0 deletions models/medico.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var medicoSchema = new Schema({

nombre: { type: String, required: [true, 'El nombre es necesario'] },
img: { type: String, required: false },
usuario: { type: Schema.Types.ObjectId, ref: 'Usuario', required: true },
hospital: { type: Schema.Types.ObjectId, ref: 'Hospital', required: [true, 'El id hospital es un campo obligatorio'] }

});
module.exports = mongoose.model('Medico', medicoSchema);
29 changes: 29 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@
"bcryptjs": "^2.4.3",
"body-parser": "^1.19.0",
"express": "^4.17.1",
"express-fileupload": "^1.1.6",
"jsonwebtoken": "^8.5.1",
"mongoose": "^5.8.9",
"mongoose-unique-validator": "^2.0.3"
},
"devDependencies": {
"nodemon": "^2.0.2"
}
}
}
119 changes: 119 additions & 0 deletions routes/busqueda.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
var express = require('express');

var app = express();

var Hospital = require('../models/hospital')
var Medicos = require('../models/medico')
var Usuarios = require('../models/usuario')

// ===================================
// Busqueda por coleccion
// ===================================

app.get('/coleccion/:tabla/:busqueda', (req, res) => {
var tabla = req.params.tabla;
var busqueda = req.params.busqueda;
var regex = new RegExp(busqueda, 'i')

var promesa;

switch (tabla) {
case 'medico':
promesa = buscarMedicos(regex);
break;
case 'usuario':
promesa = buscarUsuarios(regex);
break;
case 'hospital':
promesa = buscarHospitales(regex);
break;
default:
return res.status(400).json({
ok: false,
mensaje: 'Los tipos de busqueda sólo son: usuarios, medicos y hospitales',
error: { message: 'Tipo de tabla no válido' }
});

}
promesa.then(data => {
res.status(200).json({
ok: true,
[tabla]: data,
});
})
})
// ===================================
// Busqueda general
// ===================================

app.get('/todo/:busqueda', (req, res) => {

var busqueda = req.params.busqueda;
var regex = new RegExp(busqueda, 'i')

Promise.all([
buscarHospitales(regex),
buscarMedicos(regex),
buscarUsuarios(regex)
])
.then(respuestas => {
res.status(200).json({
ok: true,
hospitales: respuestas[0],
medicos: respuestas[1],
usuarios: respuestas[2]
});
})
});


function buscarHospitales(regex) {

return new Promise((resolve, reject) => {
Hospital.find({ nombre: regex })
.populate('usuario', 'nombre email')
.exec((err, hospitales) => {

if (err) {
reject('Error al cargar hospitales', err);
} else {
resolve(hospitales);
}
});
})

}

function buscarMedicos(regex) {

return new Promise((resolve, reject) => {
Medicos.find({ nombre: regex })
.populate('usuario', 'nombre email')
.populate('hospital')
.exec((err, medicos) => {
if (err) {
reject('Error al cargar medicos', err);
} else {
resolve(medicos);
}
});
})
}

function buscarUsuarios(regex) {

return new Promise((resolve, reject) => {
Usuarios.find({}, 'nombre email role')
.or([{ 'nombre': regex }, { 'email': regex }])
.exec((err, usuarios) => {
if (err) {
reject('Error al cargar usuarios', err)
} else {
resolve(usuarios);
}
})
})

}

module.exports = app;
Loading

0 comments on commit cdbd0e2

Please sign in to comment.