Commit 274b5f65 authored by D’jalmar Gutierrez Titirico's avatar D’jalmar Gutierrez Titirico 🚲

Merge branch 'iss29-añadir-modelo-usuario' into 'desarrollo'

#29  Se añadio el modelo de Usuario

Se cambio la ruta del frontend para que llame al metodo "yo"
modified:   client/components/autenticacion/Usuario.service.js
Se añadio el metodo "yo" a las rutas del endpoint
	modified:   server/api/usuario/index.js
Se modifico el controlador y se añadio el metodo "yo" que retorna los datos del usuario que se encuentra logueado actualmente
	modified:   server/api/usuario/usuario.controller.js
Se añadio el modelo del usuario
	new file:   server/api/usuario/usuario.model.js
Se añadio la api a las rutas
	modified:   server/routes.js
Se añadio el modelo del usuario a sequelize
	modified:   server/sqldb/index.js

See merge request !42
parents 860874ef a717ed39
......@@ -9,7 +9,7 @@
get: {
method: 'GET',
params: {
id: ''
id: 'yo'
}
}
});
......
......@@ -2,14 +2,11 @@
var express = require('express');
var controller = require('./usuario.controller');
import {formatearRuta} from '../../components/middleware/parametrosRuta.validator'
var router = express.Router();
import * as autenticacion from '../../autenticacion/autenticacion.service';
import config from '../../config/environment';
var rolAdministrador = config.userRoles[2];
router.get('/', autenticacion.estaAutenticado(),controller.usuario);
router.get('/yo', autenticacion.estaAutenticado(), controller.yo);
router.get('/env', controller.env);
module.exports = router;
'use strict';
var proxyquire = require('proxyquire').noPreserveCache();
var usuarioCtrlStub = {
index: 'usuarioCtrl.index',
show: 'usuarioCtrl.show',
create: 'usuarioCtrl.create',
update: 'usuarioCtrl.update',
destroy: 'usuarioCtrl.destroy'
};
var routerStub = {
get: sinon.spy(),
put: sinon.spy(),
patch: sinon.spy(),
post: sinon.spy(),
delete: sinon.spy()
};
// require the index with our stubbed out modules
var usuarioIndex = proxyquire('./index.js', {
'express': {
Router: function() {
return routerStub;
}
},
'./usuario.controller': usuarioCtrlStub
});
describe('Usuario API Router:', function() {
it('should return an express router instance', function() {
expect(usuarioIndex).to.equal(routerStub);
});
describe('GET /api/usuarios', function() {
it('should route to usuario.controller.index', function() {
expect(routerStub.get
.withArgs('/', 'usuarioCtrl.index')
).to.have.been.calledOnce;
});
});
describe('GET /api/usuarios/:id', function() {
it('should route to usuario.controller.show', function() {
expect(routerStub.get
.withArgs('/:id', 'usuarioCtrl.show')
).to.have.been.calledOnce;
});
});
describe('POST /api/usuarios', function() {
it('should route to usuario.controller.create', function() {
expect(routerStub.post
.withArgs('/', 'usuarioCtrl.create')
).to.have.been.calledOnce;
});
});
describe('PUT /api/usuarios/:id', function() {
it('should route to usuario.controller.update', function() {
expect(routerStub.put
.withArgs('/:id', 'usuarioCtrl.update')
).to.have.been.calledOnce;
});
});
describe('PATCH /api/usuarios/:id', function() {
it('should route to usuario.controller.update', function() {
expect(routerStub.patch
.withArgs('/:id', 'usuarioCtrl.update')
).to.have.been.calledOnce;
});
});
describe('DELETE /api/usuarios/:id', function() {
it('should route to usuario.controller.destroy', function() {
expect(routerStub.delete
.withArgs('/:id', 'usuarioCtrl.destroy')
).to.have.been.calledOnce;
});
});
});
'use strict';
import {Usuario} from '../../sqldb';
export function env(req,res, next) {
export function env(req, res, next) {
var env = process.env.NODE_ENV;
//retorna el entorno en el que se encuentra el usuario
var ambiente = env.charAt(0).toUpperCase();
res.send(ambiente);
}
export function usuario(req,res, next) {
var env = process.env.NODE_ENV;
//retorna el entorno en el que se encuentra el usuario
var ambiente = env.charAt(0).toUpperCase();
//se retorna el usuario al cual le pertenece el token, el middleware se encarga de añadirlo al req
req.user.ambiente = ambiente;
res.json(req.user);
export function yo(req, res, next) {
Usuario.findOrCreate({
where: {nombreUsuario: req.user.nombreUsuario},
defaults: {correo: req.user.correo, nombreCompleto: req.user.nombreCompleto}
})
.spread((usuario, creado)=> {
res.json({
nombreUsuario: usuario.nombreUsuario,
correo: usuario.correo,
nombreCompleto: usuario.nombreCompleto,
roles: req.user.roles
});
});
}
/**
* Usuario model events
*/
'use strict';
import {EventEmitter} from 'events';
var Usuario = require('../../sqldb').Usuario;
var UsuarioEvents = new EventEmitter();
// Set max event listeners (0 == unlimited)
UsuarioEvents.setMaxListeners(0);
// Model events
var events = {
'afterCreate': 'save',
'afterUpdate': 'save',
'afterDestroy': 'remove'
};
// Register the event emitter to the model events
for (var e in events) {
var event = events[e];
Usuario.hook(e, emitEvent(event));
}
function emitEvent(event) {
return function(doc, options, done) {
UsuarioEvents.emit(event + ':' + doc._id, doc);
UsuarioEvents.emit(event, doc);
done(null);
}
}
export default UsuarioEvents;
'use strict';
var app = require('../..');
import request from 'supertest';
var newUsuario;
describe('Usuario API:', function() {
describe('GET /api/usuarios', function() {
var usuarios;
beforeEach(function(done) {
request(app)
.get('/api/usuarios')
.expect(200)
.expect('Content-Type', /json/)
.end((err, res) => {
if (err) {
return done(err);
}
usuarios = res.body;
done();
});
});
it('should respond with JSON array', function() {
expect(usuarios).to.be.instanceOf(Array);
});
});
describe('POST /api/usuarios', function() {
beforeEach(function(done) {
request(app)
.post('/api/usuarios')
.send({
name: 'New Usuario',
info: 'This is the brand new usuario!!!'
})
.expect(201)
.expect('Content-Type', /json/)
.end((err, res) => {
if (err) {
return done(err);
}
newUsuario = res.body;
done();
});
});
it('should respond with the newly created usuario', function() {
expect(newUsuario.name).to.equal('New Usuario');
expect(newUsuario.info).to.equal('This is the brand new usuario!!!');
});
});
describe('GET /api/usuarios/:id', function() {
var usuario;
beforeEach(function(done) {
request(app)
.get('/api/usuarios/' + newUsuario._id)
.expect(200)
.expect('Content-Type', /json/)
.end((err, res) => {
if (err) {
return done(err);
}
usuario = res.body;
done();
});
});
afterEach(function() {
usuario = {};
});
it('should respond with the requested usuario', function() {
expect(usuario.name).to.equal('New Usuario');
expect(usuario.info).to.equal('This is the brand new usuario!!!');
});
});
describe('PUT /api/usuarios/:id', function() {
var updatedUsuario;
beforeEach(function(done) {
request(app)
.put('/api/usuarios/' + newUsuario._id)
.send({
name: 'Updated Usuario',
info: 'This is the updated usuario!!!'
})
.expect(200)
.expect('Content-Type', /json/)
.end(function(err, res) {
if (err) {
return done(err);
}
updatedUsuario = res.body;
done();
});
});
afterEach(function() {
updatedUsuario = {};
});
it('should respond with the updated usuario', function() {
expect(updatedUsuario.name).to.equal('Updated Usuario');
expect(updatedUsuario.info).to.equal('This is the updated usuario!!!');
});
});
describe('DELETE /api/usuarios/:id', function() {
it('should respond with 204 on successful removal', function(done) {
request(app)
.delete('/api/usuarios/' + newUsuario._id)
.expect(204)
.end((err, res) => {
if (err) {
return done(err);
}
done();
});
});
it('should respond with 404 when usuario does not exist', function(done) {
request(app)
.delete('/api/usuarios/' + newUsuario._id)
.expect(404)
.end((err, res) => {
if (err) {
return done(err);
}
done();
});
});
});
});
'use strict';
export default function(sequelize, DataTypes) {
return sequelize.define('Usuario', {
_id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
nombreUsuario:{
type:DataTypes.STRING,
allowNull: false,
unique:true,
validate:{
notEmpty:{
msg:'El UID del usuario no puede estar vacio'
}
}
},
correo:{
type:DataTypes.STRING,
allowNull: false,
unique:true,
validate:{
notEmpty:{
msg:'El correo(mail) del usuario no puede estar vacio'
},
isEmail:{
msg:'El correo(mail) debe estar en el formato correcto'
}
}
},
nombreCompleto:{
type:DataTypes.STRING,
allowNull: false,
unique:true,
validate:{
notEmpty:{
msg:'El nombre completo(givenName) del usuario no puede estar vacio'
}
}
}
});
}
......@@ -41,7 +41,7 @@ export function tieneRol(rolRequerido) {
}
export function firmarToken(id, correo, nombreCompleto,role) {
return jwt.sign({_id: id, correo: correo, nombreCompleto: nombreCompleto, roles: role}, config.secrets.session, {
return jwt.sign({nombreUsuario: id, correo: correo, nombreCompleto: nombreCompleto, roles: role}, config.secrets.session, {
expiresIn: 60 * 60 * 5
});
}
......@@ -11,7 +11,7 @@ module.exports = {
options: {}
},
seedDB:true,
//seedDB:true,
//configuracion migracion moodle,
usuarioMoodle:'root',
passwordMoodle:'admin',
......
......@@ -19,7 +19,7 @@ export default function(app) {
app.use('/api/tagsPostulantes',require('./api/tagPostulante'));
app.use('/api/migracionMoodle',require('./api/migracionMoodle'));
app.use('/api/usuarios',require('./api/usuario'));
app.use('/api/env',require('./api/usuario'));
app.use('/api/env',require('./api/usuario'));
//ruta de autenticacion
app.use('/api/autenticar',require('./autenticacion'));
......
......@@ -20,8 +20,8 @@ db.Postulacion = db.sequelize.import('../api/postulacion/postulacion.model');
db.Tag = db.sequelize.import('../api/tag/tag.model');
db.Comentario = db.sequelize.import('../api/comentario/comentario.model');
db.Cargo = db.sequelize.import('../api/cargo/cargo.model');
db.TagPostulante = db.sequelize.import('../api/tagPostulante/tagPostulante.model')
db.TagPostulante = db.sequelize.import('../api/tagPostulante/tagPostulante.model');
db.Usuario = db.sequelize.import('../api/usuario/usuario.model');
//Insertando las relaciones entre las tablas
db.Postulante.belongsToMany(db.TipoDato,{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment