Skip to content

Commit

Permalink
Seccion 11 terminada - CRUD IMAGENES
Browse files Browse the repository at this point in the history
  • Loading branch information
matibm committed Nov 30, 2019
1 parent c759167 commit 35bc388
Show file tree
Hide file tree
Showing 26 changed files with 665 additions and 11 deletions.
13 changes: 11 additions & 2 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,20 @@ mongoose.connection.openUri('mongodb://localhost:27017/hospitalDB', (err, res) =
var appRoutes = require('./routes/app');
var usuarioRoutes = require('./routes/usuario')
var loginRoutes = require('./routes/login');

var hospitalRoutes = require('./routes/hospital');
var medicoRoutes = require('./routes/medico');
var uploadRoutes = require('./routes/upload');
var imagenesRoutes = require('./routes/imagenes');
var busquedaRoutes = require('./routes/busqueda');
// Rutas
app.use('/', appRoutes);
app.use('/usuario', usuarioRoutes);
app.use('/login', loginRoutes);
app.use('/hospital', hospitalRoutes);
app.use('/medico', medicoRoutes);
app.use('/upload', uploadRoutes);
app.use('/img', imagenesRoutes);
app.use('/busqueda', busquedaRoutes);
app.use('/', appRoutes);



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.
11 changes: 11 additions & 0 deletions models/hospital.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
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);
12 changes: 12 additions & 0 deletions models/medico.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
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 hospita 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.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"bcryptjs": "^2.4.3",
"body-parser": "^1.19.0",
"express": "^4.17.1",
"express-fileupload": "^1.1.6",
"jsonwebtoken": "^8.5.1",
"mongoose": "^5.7.12",
"mongoose-unique-validator": "^2.0.3"
Expand Down
116 changes: 116 additions & 0 deletions routes/busqueda.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
var express = require('express');

var app = express()
var Hospital = require('../models/hospital');
var Medico = require('../models/medico');
var Usuario = require('../models/usuario');


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

if (tabla == 'medico') {
Promise.all([buscarMedicos(busqueda, regex)]).then(respuestas => {
res.status(200).json({
ok: true,
medicos: respuestas[0]
});
});
} else if (tabla == 'hospital') {
Promise.all([buscarHospitales(busqueda, regex)]).then(respuestas => {
res.status(200).json({
ok: true,
hospitales: respuestas[0]
});
});
} else if (tabla == 'usuario') {
Promise.all([buscarUsuarios(busqueda, regex)]).then(respuestas => {
res.status(200).json({
ok: true,
usuarios: respuestas[0]
});
});
} else {
res.status(400).json({
ok: false,
mensaje: 'Los tipos de busqueda solo son: usuarios, medicos y hospitales',
error: { message: 'Tipo de tabla/coleccion no valido' }
})
}

})

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

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

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

});

function buscarHospitales(busqueda, 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)
}
})
})
}

// ========================================
// Buscar Medicos
// ========================================
function buscarMedicos(busqueda, regex) {

return new Promise((resolve, reject) => {
Medico.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(busqueda, regex) {
return new Promise((resolve, reject) => {
Usuario.find({}, 'nombre email role').or([{ 'nombre': regex }, { 'email': regex }]).exec((err, usuario) => {
if (err) {
reject('Error al cargar usuarios', err)
} else {
resolve(usuario)
}
})
})
}



module.exports = app
127 changes: 127 additions & 0 deletions routes/hospital.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
var express = require('express');
var app = express();

var Hospital = require('../models/hospital');
var mdAutenticacion = require('../middleware/autenticacion');

app.get('/', (req, res, next) => {

var desde = req.query.desde || 0;
desde = Number(desde);

Hospital.find({})
.skip(desde)
.limit(5)
.populate('usuario', 'nombre email')
.exec((err, hospital) => {
if (err) {
return res.status(500).json({
ok: false,
mensaje: 'error cargando hospitales',
errors: err
});
}

Hospital.count({}, (err, conteo) => {
if (err) {
return res.status(500).json({
ok: false,
mensaje: 'error contando hospitales',
errors: err
});
}
res.status(200).json({
ok: true,
hospitales: hospital,
total: conteo
});
})

});
});

app.put('/:id', mdAutenticacion.verificaToken, (req, res) => {
var id = req.params.id;
Hospital.findById(id, (err, hospital) => {
var body = req.body

if (err) {
return res.status(500).json({
ok: false,
mensaje: 'error al buscar hospital',
errors: err
});
}
if (!hospital) {
return res.status(400).json({
ok: false,
mensaje: 'El hospital con el' + id + 'no existe',
errors: { message: 'No existe un hospital con ese ID' }
});
}
hospital.nombre = body.nombre;
hospital.usuario = req.usuario.id
hospital.save((err, hospitalGuardado) => {
if (err) {
return res.status(500).json({
ok: false,
mensaje: 'Error al actualizar hospital',
errors: err
});
}
res.status(200).json({
ok: true,
Hospital: hospitalGuardado
});
})
})
})

app.post('/', mdAutenticacion.verificaToken, (req, res) => {
var body = req.body
var hospital = new Hospital({
nombre: body.nombre,
usuario: req.usuario._id
});
hospital.save((err, hospitalGuardado) => {
if (err) {
return res.status(400).json({
ok: false,
mensaje: 'error cargando hospital',
errors: err
});
}
res.status(200).json({
ok: true,
Hospital: hospitalGuardado,
usuarioToken: req.usuario
})
});
});

app.delete('/:id', mdAutenticacion.verificaToken, (req, res) => {
var id = req.params.id;
Hospital.findByIdAndRemove(id, (err, hospitalBorrado) => {
if (err) {
return res.status(500).json({
ok: false,
mensaje: 'Error borrar usuario',
errors: err
});
}
res.status(200).json({
ok: true,
hospital: hospitalBorrado
})
if (!hospitalBorrado) {
return res.status(500).json({
ok: false,
mensaje: 'No existe un hospital con ese id',
errors: "no existe el hospital para borrar"
});
}
})
})


module.exports = app;
26 changes: 26 additions & 0 deletions routes/imagenes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
var express = require('express');

var app = express()

const path = require('path');
const fs = require('fs');
app.get('/:tipo/:img', (req, res, next) => {

var tipo = req.params.tipo;
var img = req.params.img;

var pathImagen = path.resolve(__dirname, `../uploads/${ tipo }/${ img }`)
if (fs.existsSync(pathImagen)) {
res.sendFile(pathImagen);
} else {
var pathNoImagen = path.resolve(__dirname, '../assets/no-img.jpg');
res.sendFile(pathNoImagen);
}
// res.status(200).json({
// ok: true,
// messaje: 'Peticion realizada correctamente'
// })
})


module.exports = app
Loading

0 comments on commit 35bc388

Please sign in to comment.