From b32d0a2f4ac97df0354dc917071ee98a20ec41ba Mon Sep 17 00:00:00 2001 From: lemuel Date: Sun, 16 Oct 2022 19:17:04 -0500 Subject: [PATCH] aparentemente todo funciona --- src/app.module.ts | 2 + src/auth/strategy/jwt-strategy.service.ts | 2 +- ...ll-informacion-institucion-usuario.view.ts | 6 - .../institucion-usuario.service.ts | 122 ++++++++++------- src/multa/multa.service.ts | 4 +- src/operador/operador.service.ts | 1 + src/prestamo/prestamo.service.ts | 2 +- src/upload-file/upload-file.service.ts | 19 +-- .../views/full-informacion-usuario.view.ts | 44 ++++++ src/usuario/usuario.controller.ts | 15 ++- src/usuario/usuario.module.ts | 7 +- src/usuario/usuario.service.ts | 127 ++++++++++++------ 12 files changed, 226 insertions(+), 125 deletions(-) create mode 100644 src/usuario/entity/views/full-informacion-usuario.view.ts diff --git a/src/app.module.ts b/src/app.module.ts index bac4534..1165949 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -90,6 +90,7 @@ import { FullInformacionOperadorView } from './operador/entity/views/full-inform import { FullInformacionPrestamoView } from './prestamo/entity/views/full-informacion-prestamo.view'; import { PrestamoInformacionView } from './prestamo/entity/views/prestamo-informacion.view'; import { InformacionPrestamoView } from './prestamo/entity/views/informacion-prestamo.view'; +import { FullInformacionUsuarioView } from './usuario/entity/views/full-informacion-usuario.view'; import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuario.view'; @Module({ @@ -169,6 +170,7 @@ import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuar FullInformacionPrestamoView, PrestamoInformacionView, InformacionPrestamoView, + FullInformacionUsuarioView, InformacionUsuarioView, ], }; diff --git a/src/auth/strategy/jwt-strategy.service.ts b/src/auth/strategy/jwt-strategy.service.ts index ea04239..ecac23b 100644 --- a/src/auth/strategy/jwt-strategy.service.ts +++ b/src/auth/strategy/jwt-strategy.service.ts @@ -34,7 +34,7 @@ export class JwtStrategyService extends PassportStrategy(Strategy) { if ('Usuario' in payload) await this.usuarioService - .findById(payload.Usuario.id_usuario, true, true) + .findInfoUsuarioById(payload.Usuario.id_usuario) .then((usuario) => (user.usuario = usuario)); else if ('Operador' in payload) await this.operadorService diff --git a/src/institucion-usuario/entity/views/full-informacion-institucion-usuario.view.ts b/src/institucion-usuario/entity/views/full-informacion-institucion-usuario.view.ts index 4d7b89d..02dfb25 100644 --- a/src/institucion-usuario/entity/views/full-informacion-institucion-usuario.view.ts +++ b/src/institucion-usuario/entity/views/full-informacion-institucion-usuario.view.ts @@ -3,7 +3,6 @@ import { Carrera } from '../../../institucion-carrera/entity/carrera.entity'; import { Institucion } from '../../../institucion/entity/institucion.entity'; import { InstitucionCarrera } from '../../../institucion-carrera/entity/institucion-carrera.entity'; import { InstitucionUsuario } from '../institucion-usuario.entity'; -import { Usuario } from '../../../usuario/entity/usuario.entity'; @ViewEntity({ expression: (dataSource: DataSource) => @@ -16,7 +15,6 @@ import { Usuario } from '../../../usuario/entity/usuario.entity'; .addSelect('iu.id_usuario', 'id_usuario') .addSelect('ic.id_carrera', 'id_carrera') .addSelect('ic.id_institucion', 'id_institucion') - .addSelect('u.correo', 'correo') .addSelect('c.carrera', 'carrera') .addSelect('i.institucion', 'institucion') .from(InstitucionUsuario, 'iu') @@ -25,7 +23,6 @@ import { Usuario } from '../../../usuario/entity/usuario.entity'; 'ic', 'ic.id_institucion_carrera = iu.id_institucion_carrera', ) - .innerJoin(Usuario, 'u', 'u.id_usuario = iu.id_usuario') .innerJoin(Carrera, 'c', 'c.id_carrera = ic.id_carrera') .innerJoin(Institucion, 'i', 'i.id_institucion = ic.id_institucion'), }) @@ -39,9 +36,6 @@ export class FullInformacionInstitucionUsuarioView { @ViewColumn() carrera: string; - @ViewColumn() - correo: string; - @ViewColumn() institucion: string; diff --git a/src/institucion-usuario/institucion-usuario.service.ts b/src/institucion-usuario/institucion-usuario.service.ts index 20bdb7e..52cda40 100644 --- a/src/institucion-usuario/institucion-usuario.service.ts +++ b/src/institucion-usuario/institucion-usuario.service.ts @@ -45,62 +45,47 @@ export class InstitucionUsuarioService { }); } - // findInfoInstitucionUsuarioAllByIdUsuario(id_usuario: number) { - // return this.informacionInstitucionUsuarioView - // .find({ where: { id_usuario } }) - // .then((infoInstitucionesUsuario) => { - // const institucionUsuarios: InstitucionUsuario[] = []; + findFullInfoInstitucionUsuarioAllByIdUsuarioIdInstitucion( + id_usuario: number, + id_institucion: number, + ) { + return this.fullInformacionInstitucionUsuarioView + .find({ where: { id_institucion, id_usuario } }) + .then((infoInstitucionesUsuario) => { + const institucionesUsuario: InstitucionUsuario[] = []; - // for (let i = 0; i < infoInstitucionesUsuario.length; i++) - // institucionUsuarios.push( - // this.repository.create({ - // id_institucion_usuario: - // infoInstitucionesUsuario[i].id_institucion_usuario, - // activo: infoInstitucionesUsuario[i].activo === 1, - // multa: infoInstitucionesUsuario[i].multa === 1, - // institucionCarrera: { - // id_institucion_carrera: - // infoInstitucionesUsuario[i].id_institucion_carrera, - // carrera: { id_carrera: infoInstitucionesUsuario[i].id_carrera }, - // institucion: { - // id_institucion: infoInstitucionesUsuario[i].id_institucion, - // }, - // }, - // }), - // ); - // return institucionUsuarios; - // }); - // } - - findInfoInstitucionUsuarioById(id_institucion_usuario: number) { - return this.informacionInstitucionUsuarioView - .findOne({ where: { id_institucion_usuario } }) - .then((infoInstitucionUsuario) => { - if (!infoInstitucionUsuario) - throw new ConflictException('No existe este id institución usuario.'); - return this.repository.create({ - id_institucion_usuario: infoInstitucionUsuario.id_institucion_usuario, - activo: infoInstitucionUsuario.activo === 1, - multa: infoInstitucionUsuario.multa === 1, - institucionCarrera: { - id_institucion_carrera: - infoInstitucionUsuario.id_institucion_carrera, - carrera: { id_carrera: infoInstitucionUsuario.id_carrera }, - institucion: { - id_institucion: infoInstitucionUsuario.id_institucion, - }, - }, - }); + for (let i = 0; i < infoInstitucionesUsuario.length; i++) + institucionesUsuario.push( + this.repository.create({ + id_institucion_usuario: + infoInstitucionesUsuario[i].id_institucion_usuario, + activo: infoInstitucionesUsuario[i].activo === 1, + multa: infoInstitucionesUsuario[i].multa === 1, + institucionCarrera: { + id_institucion_carrera: + infoInstitucionesUsuario[i].id_institucion_carrera, + carrera: { + id_carrera: infoInstitucionesUsuario[i].id_carrera, + carrera: infoInstitucionesUsuario[i].carrera, + }, + institucion: { + id_institucion: infoInstitucionesUsuario[i].id_institucion, + institucion: infoInstitucionesUsuario[i].institucion, + }, + }, + }), + ); + return institucionesUsuario; }); } - findFullInfoInstitucionUsuarioByUsuarioInstitucionCarrera( - id_usuario: number, + findFullInfoInstitucionUsuarioByIdUsuarioIdInstitucionCarrera( + usuario: Usuario, id_institucion_carrera: number, ) { return this.fullInformacionInstitucionUsuarioView .findOne({ - where: { id_institucion_carrera, id_usuario }, + where: { id_institucion_carrera, id_usuario: usuario.id_usuario }, }) .then((infoInstitucionUsuario) => { if (!infoInstitucionUsuario || infoInstitucionUsuario.activo === 0) @@ -119,14 +104,32 @@ export class InstitucionUsuarioService { id_institucion: infoInstitucionUsuario.id_institucion, }, }, - usuario: { - id_usuario: infoInstitucionUsuario.id_usuario, - correo: infoInstitucionUsuario.correo, - }, + usuario, }); }); } + findInfoInstitucionUsuarioByIdUsuarioIdInstitucionCarrera( + id_usuario: number, + id_institucion_carrera: number, + ) { + return this.informacionInstitucionUsuarioView + .findOne({ where: { id_institucion_carrera, id_usuario } }) + .then((infoInstitucionUsuario) => + this.viewToInstitucionUsuario(infoInstitucionUsuario), + ); + } + + findInfoInstitucionUsuarioById(id_institucion_usuario: number) { + return this.informacionInstitucionUsuarioView + .findOne({ where: { id_institucion_usuario } }) + .then((infoInstitucionUsuario) => { + if (!infoInstitucionUsuario) + throw new ConflictException('No existe este id institución usuario.'); + return this.viewToInstitucionUsuario(infoInstitucionUsuario); + }); + } + save(institucionUsuario: InstitucionUsuario) { return this.repository.save(institucionUsuario); } @@ -154,4 +157,19 @@ export class InstitucionUsuarioService { ); }); } + + viewToInstitucionUsuario( + infoInstitucionUsuario: InformacionInstitucionUsuarioView, + ) { + return this.repository.create({ + id_institucion_usuario: infoInstitucionUsuario.id_institucion_usuario, + activo: infoInstitucionUsuario.activo === 1, + multa: infoInstitucionUsuario.multa === 1, + institucionCarrera: { + id_institucion_carrera: infoInstitucionUsuario.id_institucion_carrera, + carrera: { id_carrera: infoInstitucionUsuario.id_carrera }, + institucion: { id_institucion: infoInstitucionUsuario.id_institucion }, + }, + }); + } } diff --git a/src/multa/multa.service.ts b/src/multa/multa.service.ts index 48b219e..555a1e9 100644 --- a/src/multa/multa.service.ts +++ b/src/multa/multa.service.ts @@ -203,7 +203,7 @@ export class MultaService { } findAllByIdUsuario(id_usuario: number, pagina: number) { - return this.usuarioService.findById(id_usuario).then((usuario) => + return this.usuarioService.findInfoUsuarioById(id_usuario).then((usuario) => this.fullInformacionMultaView .findAndCount({ where: { id_usuario: usuario.id_usuario }, @@ -223,7 +223,7 @@ export class MultaService { } findMultasActivas(id_usuario: number) { - return this.usuarioService.findById(id_usuario).then((usuario) => + return this.usuarioService.findInfoUsuarioById(id_usuario).then((usuario) => this.repository .createQueryBuilder('mu') .innerJoin('mu.prestamo', 'p') diff --git a/src/operador/operador.service.ts b/src/operador/operador.service.ts index 1347ac4..d8fbb30 100644 --- a/src/operador/operador.service.ts +++ b/src/operador/operador.service.ts @@ -196,6 +196,7 @@ export class OperadorService { select: { id_operador: true, activo: true, + correo : true, institucion: { id_institucion: true }, tipoUsuario: { id_tipo_usuario: true }, }, diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index c9577c0..6256463 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -340,7 +340,7 @@ export class PrestamoService { findAllByIdUsuario(id_usuario: number, pagina: number) { return this.usuarioService - .findById(id_usuario) + .findInfoUsuarioById(id_usuario) .then((usuario) => this.fullInformacionPrestamoView.findAndCount({ where: { id_usuario: usuario.id_usuario }, diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts index 3eb59ee..8a983b0 100644 --- a/src/upload-file/upload-file.service.ts +++ b/src/upload-file/upload-file.service.ts @@ -381,9 +381,8 @@ export class UploadFileService { dataUsuario.tipo_usuario, false, ); - const usuario = await this.usuarioService.findByUsuario( + const usuario = await this.usuarioService.findInfoUsuarioByUsuario( dataUsuario.numero_cuenta, - false, ); const carrera = tipoUsuario && (tipoUsuario.id_tipo_usuario === 5 || dataUsuario.carrera) @@ -417,16 +416,12 @@ export class UploadFileService { return; } if (usuario) { - let existeInstitucionUsuario: InstitucionUsuario = null; + let existeInstitucionUsuario = + await this.institucionUsuarioService.findInfoInstitucionUsuarioByIdUsuarioIdInstitucionCarrera( + usuario.id_usuario, + institucionCarrera.id_institucion_carrera, + ); - for (let i = 0; i < usuario.instituciones.length; i++) - if ( - usuario.instituciones[i].institucionCarrera.id_institucion_carrera === - institucionCarrera.id_institucion_carrera - ) { - existeInstitucionUsuario = usuario.instituciones[i]; - break; - } if (existeInstitucionUsuario && !existeInstitucionUsuario.activo) { existeInstitucionUsuario.activo = true; await this.institucionUsuarioService.save(existeInstitucionUsuario); @@ -443,7 +438,7 @@ export class UploadFileService { if (dataUsuario.correo && usuario.correo != dataUsuario.correo) usuario.correo = dataUsuario.correo; await this.usuarioService - .update(usuario, false) + .save(usuario) .then(({ message }) => mensajes.push(message)); } } else { diff --git a/src/usuario/entity/views/full-informacion-usuario.view.ts b/src/usuario/entity/views/full-informacion-usuario.view.ts new file mode 100644 index 0000000..e2d6158 --- /dev/null +++ b/src/usuario/entity/views/full-informacion-usuario.view.ts @@ -0,0 +1,44 @@ +import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; +import { TipoUsuario } from '../../../tipo-usuario/entity/tipo-usuario.entity'; +import { Usuario } from '../usuario.entity'; + +@ViewEntity({ + expression: (dataSource: DataSource) => + dataSource + .createQueryBuilder() + .select('u.id_usuario', 'id_usuario') + .addSelect('u.correo', 'correo') + .addSelect('u.id_tipo_usuario', 'id_tipo_usuario') + .addSelect('u.nombre', 'nombre') + .addSelect('u.rfc', 'rfc') + .addSelect('u.telefono', 'telefono') + .addSelect('u.usuario', 'usuario') + .addSelect('tu.tipo_usuario', 'tipo_usuario') + .from(Usuario, 'u') + .innerJoin(TipoUsuario, 'tu', 'tu.id_tipo_usuario = u.id_tipo_usuario'), +}) +export class FullInformacionUsuarioView { + @ViewColumn() + id_usuario: number; + + @ViewColumn() + correo: string; + + @ViewColumn() + id_tipo_usuario: number; + + @ViewColumn() + nombre: string; + + @ViewColumn() + rfc: string; + + @ViewColumn() + telefono: string; + + @ViewColumn() + tipo_usuario: string; + + @ViewColumn() + usuario: string; +} diff --git a/src/usuario/usuario.controller.ts b/src/usuario/usuario.controller.ts index 7ad576a..56cd63a 100644 --- a/src/usuario/usuario.controller.ts +++ b/src/usuario/usuario.controller.ts @@ -77,10 +77,10 @@ export class UsuarioController { }, }) update(@Request() req, @Body() body: UpdateUsuarioInputDto) { - const admin: Operador = req.user.operador; + const operador: Operador = req.user.operador; - this.validarUsuarioService.validarAdminOperador(admin); - return this.usuarioService.update(body); + this.validarUsuarioService.validarAdminOperador(operador); + return this.usuarioService.update(operador, body); } @Put('update-password') @@ -113,10 +113,13 @@ export class UsuarioController { type: 'string', }) usuario(@Request() req, @Query() query: UsuarioInputDto) { - const admin: Operador = req.user.operador; + const operador: Operador = req.user.operador; - this.validarUsuarioService.validarAdminOperador(admin); - return this.usuarioService.findByUsuario(query.usuario, true, true); + this.validarUsuarioService.validarAdminOperador(operador); + return this.usuarioService.findFullInfoUsuarioByUsuario( + operador, + query.usuario, + ); } @Serealize(UsuariosOutputDto) diff --git a/src/usuario/usuario.module.ts b/src/usuario/usuario.module.ts index 16436ae..2bd9871 100644 --- a/src/usuario/usuario.module.ts +++ b/src/usuario/usuario.module.ts @@ -4,6 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { UsuarioController } from './usuario.controller'; import { UsuarioService } from './usuario.service'; import { Usuario } from './entity/usuario.entity'; +import { FullInformacionUsuarioView } from './entity/views/full-informacion-usuario.view'; import { InformacionUsuarioView } from './entity/views/informacion-usuario.view'; import { BcryptModule } from '../bcrypt/bcrypt.module'; import { InstitucionModule } from '../institucion/institucion.module'; @@ -22,7 +23,11 @@ import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module' NodemailerModule, PassportModule.register({ defaultStrategy: 'jwt' }), TipoUsuarioModule, - TypeOrmModule.forFeature([Usuario, InformacionUsuarioView]), + TypeOrmModule.forFeature([ + Usuario, + FullInformacionUsuarioView, + InformacionUsuarioView, + ]), ValidarUsuarioModule, ], controllers: [UsuarioController], diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts index 43ce089..49fb578 100644 --- a/src/usuario/usuario.service.ts +++ b/src/usuario/usuario.service.ts @@ -4,10 +4,11 @@ import { NotFoundException, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; +import { FindOptionsWhere, Repository } from 'typeorm'; import { InstitucionCarrera } from '../institucion-carrera/entity/institucion-carrera.entity'; import { TipoUsuario } from '../tipo-usuario/entity/tipo-usuario.entity'; import { Usuario } from './entity/usuario.entity'; +import { FullInformacionUsuarioView } from './entity/views/full-informacion-usuario.view'; import { InformacionUsuarioView } from './entity/views/informacion-usuario.view'; import { BcryptService } from '../bcrypt/bcrypt.service'; import { InstitucionService } from '../institucion/institucion.service'; @@ -15,6 +16,7 @@ import { InstitucionCarreraService } from '../institucion-carrera/institucion-ca import { InstitucionUsuarioService } from '../institucion-usuario/institucion-usuario.service'; import { NodemailerService } from '../nodemailer/nodemailer.service'; import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service'; +import { Operador } from 'src/operador/entity/operador.entity'; @Injectable() export class UsuarioService { @@ -22,6 +24,8 @@ export class UsuarioService { @InjectRepository(Usuario) private repository: Repository, @InjectRepository(InformacionUsuarioView) private informacionUsuarioView: Repository, + @InjectRepository(FullInformacionUsuarioView) + private fullInformacionUsuarioView: Repository, private bcryptService: BcryptService, private institucionService: InstitucionService, private institucionCarreraService: InstitucionCarreraService, @@ -38,6 +42,7 @@ export class UsuarioService { correo: string, rfc?: string, ) { + // Crear y gurdar registro return this.repository .save( this.repository.create({ @@ -49,6 +54,7 @@ export class UsuarioService { }), ) .then((usuario) => + // Le asigno la carrera enviada this.institucionUsuarioService.create(institucionCarrera, usuario), ); } @@ -120,51 +126,71 @@ export class UsuarioService { return query.getManyAndCount(); } - findById(id_usuario: number, validarNoExiste = true, password = false) { + findFullInfoUsuarioByUsuario(operador: Operador, usuario: string) { + return this.fullInformacionUsuarioView + .findOne({ where: { usuario } }) + .then(async (infoUsuario) => { + if (!infoUsuario) + throw new NotFoundException('No existe este usuario.'); + + const instituciones = + await this.institucionUsuarioService.findFullInfoInstitucionUsuarioAllByIdUsuarioIdInstitucion( + infoUsuario.id_usuario, + operador.institucion.id_institucion, + ); + + if (instituciones.length === 0) + throw new ConflictException( + 'Este usuario no pertenece a tu institución', + ); + return this.repository.create({ + id_usuario: infoUsuario.id_usuario, + correo: infoUsuario.correo, + telefono: infoUsuario.telefono, + nombre: infoUsuario.nombre, + rfc: infoUsuario.rfc, + usuario: infoUsuario.usuario, + tipoUsuario: { + id_tipo_usuario: infoUsuario.id_tipo_usuario, + tipo_usuario: infoUsuario.tipo_usuario, + }, + instituciones, + }); + }); + } + + findInfoUsuarioById(id_usuario: number) { return this.repository .findOne({ - join: { - alias: 'u', - innerJoinAndSelect: { - is: 'u.instituciones', - ic: 'is.institucionCarrera', - c: 'ic.carrera', - i: 'ic.institucion', - n: 'c.nivel', - }, + select: { + id_usuario: true, + correo: true, + password: true, + usuario: true, + nombre: true, + tipoUsuario: { id_tipo_usuario: true }, }, where: { id_usuario }, }) .then((usuario) => { - if (validarNoExiste && (!usuario || (password && !usuario.password))) - throw new NotFoundException('No existe este usuario.'); + if (!usuario) throw new NotFoundException('No existe este usuario.'); return usuario; }); } - async findByUsuario( - usuario: string, - validarNoExiste = true, - password = false, - institucionesActivas = false, - rfc?: string, - ) { - const query = this.repository - .createQueryBuilder('u') - .innerJoinAndSelect('u.instituciones', 'is') - .innerJoinAndSelect('u.tipoUsuario', 'tu') - .innerJoinAndSelect('is.institucionCarrera', 'ic') - .innerJoinAndSelect('ic.carrera', 'c') - .innerJoinAndSelect('ic.institucion', 'i') - .innerJoinAndSelect('c.nivel', 'n') - .where('usuario = :usuario', { usuario }); + findInfoUsuarioByUsuario(usuario: string, rfc?: string) { + const busqueda: FindOptionsWhere = { usuario }; - if (institucionesActivas) query.andWhere('is.activo = 1'); - if (rfc) query.andWhere('rfc = :rfc', { rfc }); - return query.getOne().then((usuario) => { - if (validarNoExiste && (!usuario || (password && !usuario.password))) - throw new NotFoundException('No existe este usuario.'); - return usuario; + if (rfc) busqueda.rfc = rfc; + return this.repository.findOne({ + select: { + id_usuario: true, + correo: true, + password: true, + usuario: true, + tipoUsuario: { id_tipo_usuario: true }, + }, + where: busqueda, }); } @@ -212,14 +238,23 @@ export class UsuarioService { } passwordReset(id_usuario: number) { + // Genero password const password = this.bcryptService.generarPassword(); - return this.findById(id_usuario, true, true) + return this.findInfoUsuarioById(id_usuario) .then((usuario) => { + // Solo se puede actualizar password si no esta registrado, password = registro + if (!usuario.password) + throw new ConflictException( + 'No se puede enviar una contraseña a un usuario no registrado.', + ); + // Asigno nueva password usuario.password = this.bcryptService.encriptar(password); + // Guardo return this.repository.save(usuario); }) .then((usuario) => + // Envio correo con credenciales this.nodemailerService.sendEmail({ email: usuario.correo, subject: 'Credenciales Pc Puma', @@ -243,14 +278,14 @@ export class UsuarioService { const password = this.bcryptService.generarPassword(); let message: string; - return this.findByUsuario(usuario, false, false, false, rfc) + return this.findInfoUsuarioByUsuario(usuario, rfc) .then(async (existeUsuario) => { if (!existeUsuario || existeUsuario.password) throw new ConflictException( 'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.', ); - return this.institucionUsuarioService.findFullInfoInstitucionUsuarioByUsuarioInstitucionCarrera( - existeUsuario.id_usuario, + return this.institucionUsuarioService.findFullInfoInstitucionUsuarioByIdUsuarioIdInstitucionCarrera( + existeUsuario, institucionCarrera.id_institucion_carrera, ); }) @@ -280,14 +315,18 @@ export class UsuarioService { .then((_) => ({ message })); } - update(attrs: Partial, validarPassword = true) { - return this.findById(attrs.id_usuario, true, validarPassword) + save(usuario: Usuario) { + return this.repository + .save(usuario) + .then((_) => ({ message: 'Se guardaron los cambios correctamente.' })); + } + + update(operador: Operador, attrs: Partial) { + return this.findInfoUsuarioById(attrs.id_usuario) .then((usuario) => { Object.assign(usuario, attrs); return this.repository.save(usuario); }) - .then((_) => ({ - message: 'Se guardaron los cambios correctamente.', - })); + .then((_) => ({ message: 'Se guardaron los cambios correctamente.' })); } }