falta un update
This commit is contained in:
parent
fccc5f11c5
commit
4c8da74726
@ -80,6 +80,8 @@ import { FullInformacionEquipoProgramaView } from './equipo-programa/entity/view
|
|||||||
import { InformacionEquipoProgramaView } from './equipo-programa/entity/views/informacion-equipo-programa.view';
|
import { InformacionEquipoProgramaView } from './equipo-programa/entity/views/informacion-equipo-programa.view';
|
||||||
import { FullInformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/full-informacion-equipo-tipo-entrada.view';
|
import { FullInformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/full-informacion-equipo-tipo-entrada.view';
|
||||||
import { InformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view';
|
import { InformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view';
|
||||||
|
import { FullInformacionInstitucionUsuarioView } from './institucion-usuario/entity/views/full-informacion-institucion-usuario.view';
|
||||||
|
import { InformacionInstitucionUsuarioView } from './institucion-usuario/entity/views/informacion-institucion-usuario.view';
|
||||||
import { InformacionModuloView } from './modulo/entity/views/informacion-modulo.view';
|
import { InformacionModuloView } from './modulo/entity/views/informacion-modulo.view';
|
||||||
import { MinInformacionModuloView } from './modulo/entity/views/min-informacion-modulo.view';
|
import { MinInformacionModuloView } from './modulo/entity/views/min-informacion-modulo.view';
|
||||||
import { FullInformacionMultaView } from './multa/entity/views/full-informacion-multa.view';
|
import { FullInformacionMultaView } from './multa/entity/views/full-informacion-multa.view';
|
||||||
@ -157,6 +159,8 @@ import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuar
|
|||||||
InformacionEquipoProgramaView,
|
InformacionEquipoProgramaView,
|
||||||
FullInformacionEquipoTipoEntradaView,
|
FullInformacionEquipoTipoEntradaView,
|
||||||
InformacionEquipoTipoEntradaView,
|
InformacionEquipoTipoEntradaView,
|
||||||
|
FullInformacionInstitucionUsuarioView,
|
||||||
|
InformacionInstitucionUsuarioView,
|
||||||
InformacionModuloView,
|
InformacionModuloView,
|
||||||
MinInformacionModuloView,
|
MinInformacionModuloView,
|
||||||
FullInformacionMultaView,
|
FullInformacionMultaView,
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
// import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
|
|
||||||
// import { EquipoPrograma } from '../equipo-programa.entity';
|
|
||||||
// import { Programa } from '../../../institucion-programa/entity/programa.entity';
|
|
||||||
|
|
||||||
// @ViewEntity({
|
|
||||||
// expression: (dataSource: DataSource) =>
|
|
||||||
// dataSource
|
|
||||||
// .createQueryBuilder()
|
|
||||||
// .select('ep.id_equipo_programa', 'id_equipo_programa')
|
|
||||||
// .addSelect('ep.id_equipo', 'id_equipo')
|
|
||||||
// .addSelect('ep.id_programa', 'id_programa')
|
|
||||||
// .addSelect('p.programa', 'programa')
|
|
||||||
// .from(EquipoPrograma, 'ep')
|
|
||||||
// .innerJoin(Programa, 'p', 'p.id_programa = ep.id_programa'),
|
|
||||||
// })
|
|
||||||
// export class FullInformacionEquipoProgramaView {
|
|
||||||
// @ViewColumn()
|
|
||||||
// id_equipo_programa: number;
|
|
||||||
|
|
||||||
// @ViewColumn()
|
|
||||||
// id_equipo: number;
|
|
||||||
|
|
||||||
// @ViewColumn()
|
|
||||||
// id_programa: number;
|
|
||||||
|
|
||||||
// @ViewColumn()
|
|
||||||
// programa: string;
|
|
||||||
// }
|
|
@ -0,0 +1,62 @@
|
|||||||
|
import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
|
||||||
|
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) =>
|
||||||
|
dataSource
|
||||||
|
.createQueryBuilder()
|
||||||
|
.select('iu.id_institucion_usuario', 'id_institucion_usuario')
|
||||||
|
.addSelect('iu.activo', 'activo')
|
||||||
|
.addSelect('iu.multa', 'multa')
|
||||||
|
.addSelect('iu.id_institucion_carrera', 'id_institucion_carrera')
|
||||||
|
.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')
|
||||||
|
.innerJoin(
|
||||||
|
InstitucionCarrera,
|
||||||
|
'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'),
|
||||||
|
})
|
||||||
|
export class FullInformacionInstitucionUsuarioView {
|
||||||
|
@ViewColumn()
|
||||||
|
id_carrera: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
activo: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
carrera: string;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
correo: string;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
institucion: string;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
id_institucion: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
id_institucion_carrera: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
id_institucion_usuario: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
id_usuario: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
multa: number;
|
||||||
|
}
|
@ -1,22 +0,0 @@
|
|||||||
import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
|
|
||||||
import { InstitucionUsuario } from '../institucion-usuario.entity';
|
|
||||||
|
|
||||||
@ViewEntity({
|
|
||||||
expression: (dataSource: DataSource) =>
|
|
||||||
dataSource
|
|
||||||
.createQueryBuilder()
|
|
||||||
.select('ep.id_equipo_programa', 'id_equipo_programa')
|
|
||||||
.addSelect('ep.id_equipo', 'id_equipo')
|
|
||||||
.addSelect('ep.id_programa', 'id_programa')
|
|
||||||
.from(InstitucionUsuario, 'ep'),
|
|
||||||
})
|
|
||||||
export class InformacionEquipoProgramaView {
|
|
||||||
@ViewColumn()
|
|
||||||
id_equipo_programa: number;
|
|
||||||
|
|
||||||
@ViewColumn()
|
|
||||||
id_equipo: number;
|
|
||||||
|
|
||||||
@ViewColumn()
|
|
||||||
id_programa: number;
|
|
||||||
}
|
|
@ -0,0 +1,44 @@
|
|||||||
|
import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
|
||||||
|
import { InstitucionCarrera } from '../../../institucion-carrera/entity/institucion-carrera.entity';
|
||||||
|
import { InstitucionUsuario } from '../institucion-usuario.entity';
|
||||||
|
|
||||||
|
@ViewEntity({
|
||||||
|
expression: (dataSource: DataSource) =>
|
||||||
|
dataSource
|
||||||
|
.createQueryBuilder()
|
||||||
|
.select('iu.id_institucion_usuario', 'id_institucion_usuario')
|
||||||
|
.addSelect('iu.activo', 'activo')
|
||||||
|
.addSelect('iu.multa', 'multa')
|
||||||
|
.addSelect('iu.id_institucion_carrera', 'id_institucion_carrera')
|
||||||
|
.addSelect('iu.id_usuario', 'id_usuario')
|
||||||
|
.addSelect('ic.id_carrera', 'id_carrera')
|
||||||
|
.addSelect('ic.id_institucion', 'id_institucion')
|
||||||
|
.from(InstitucionUsuario, 'iu')
|
||||||
|
.innerJoin(
|
||||||
|
InstitucionCarrera,
|
||||||
|
'ic',
|
||||||
|
'ic.id_institucion_carrera = iu.id_institucion_carrera',
|
||||||
|
),
|
||||||
|
})
|
||||||
|
export class InformacionInstitucionUsuarioView {
|
||||||
|
@ViewColumn()
|
||||||
|
id_carrera: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
activo: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
id_institucion: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
id_institucion_carrera: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
id_institucion_usuario: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
id_usuario: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
multa: number;
|
||||||
|
}
|
@ -3,13 +3,19 @@ import { PassportModule } from '@nestjs/passport';
|
|||||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
import { InstitucionUsuarioService } from './institucion-usuario.service';
|
import { InstitucionUsuarioService } from './institucion-usuario.service';
|
||||||
import { InstitucionUsuario } from './entity/institucion-usuario.entity';
|
import { InstitucionUsuario } from './entity/institucion-usuario.entity';
|
||||||
|
import { FullInformacionInstitucionUsuarioView } from './entity/views/full-informacion-institucion-usuario.view';
|
||||||
|
import { InformacionInstitucionUsuarioView } from './entity/views/informacion-institucion-usuario.view';
|
||||||
import { InstitucionUsuarioController } from './institucion-usuario.controller';
|
import { InstitucionUsuarioController } from './institucion-usuario.controller';
|
||||||
import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module';
|
import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
PassportModule.register({ defaultStrategy: 'jwt' }),
|
PassportModule.register({ defaultStrategy: 'jwt' }),
|
||||||
TypeOrmModule.forFeature([InstitucionUsuario]),
|
TypeOrmModule.forFeature([
|
||||||
|
InstitucionUsuario,
|
||||||
|
FullInformacionInstitucionUsuarioView,
|
||||||
|
InformacionInstitucionUsuarioView,
|
||||||
|
]),
|
||||||
ValidarUsuarioModule,
|
ValidarUsuarioModule,
|
||||||
],
|
],
|
||||||
providers: [InstitucionUsuarioService],
|
providers: [InstitucionUsuarioService],
|
||||||
|
@ -4,12 +4,18 @@ import { Repository } from 'typeorm';
|
|||||||
import { InstitucionCarrera } from '../institucion-carrera/entity/institucion-carrera.entity';
|
import { InstitucionCarrera } from '../institucion-carrera/entity/institucion-carrera.entity';
|
||||||
import { InstitucionUsuario } from './entity/institucion-usuario.entity';
|
import { InstitucionUsuario } from './entity/institucion-usuario.entity';
|
||||||
import { Usuario } from '../usuario/entity/usuario.entity';
|
import { Usuario } from '../usuario/entity/usuario.entity';
|
||||||
|
import { FullInformacionInstitucionUsuarioView } from './entity/views/full-informacion-institucion-usuario.view';
|
||||||
|
import { InformacionInstitucionUsuarioView } from './entity/views/informacion-institucion-usuario.view';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class InstitucionUsuarioService {
|
export class InstitucionUsuarioService {
|
||||||
constructor(
|
constructor(
|
||||||
@InjectRepository(InstitucionUsuario)
|
@InjectRepository(InstitucionUsuario)
|
||||||
private repository: Repository<InstitucionUsuario>,
|
private repository: Repository<InstitucionUsuario>,
|
||||||
|
@InjectRepository(FullInformacionInstitucionUsuarioView)
|
||||||
|
private fullInformacionInstitucionUsuarioView: Repository<FullInformacionInstitucionUsuarioView>,
|
||||||
|
@InjectRepository(InformacionInstitucionUsuarioView)
|
||||||
|
private informacionInstitucionUsuarioView: Repository<InformacionInstitucionUsuarioView>,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
create(institucionCarrera: InstitucionCarrera, usuario: Usuario) {
|
create(institucionCarrera: InstitucionCarrera, usuario: Usuario) {
|
||||||
@ -21,51 +27,97 @@ export class InstitucionUsuarioService {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
findAllByIdUsuario(id_usuario: number) {
|
findInfoInstitucionUsuarioAllByIdUsuario(id_usuario: number) {
|
||||||
return this.repository.find({
|
return this.informacionInstitucionUsuarioView
|
||||||
join: {
|
.find({ where: { id_usuario } })
|
||||||
alias: 'iu',
|
.then((infoInstitucionUsuarios) => {
|
||||||
innerJoinAndSelect: { ic: 'iu.institucionCarrera' },
|
const institucionUsuarios: InstitucionUsuario[] = [];
|
||||||
},
|
|
||||||
where: { usuario: { id_usuario } },
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
findById(id_institucion_usuario: number) {
|
for (let i = 0; i < infoInstitucionUsuarios.length; i++)
|
||||||
return this.repository
|
institucionUsuarios.push(
|
||||||
.findOne({ where: { id_institucion_usuario } })
|
this.repository.create({
|
||||||
.then((institucionUsuario) => {
|
id_institucion_usuario:
|
||||||
if (!institucionUsuario)
|
infoInstitucionUsuarios[i].id_institucion_usuario,
|
||||||
throw new ConflictException('No existe este id institución usuario.');
|
activo: infoInstitucionUsuarios[i].activo === 1,
|
||||||
return institucionUsuario;
|
multa: infoInstitucionUsuarios[i].multa === 1,
|
||||||
|
institucionCarrera: {
|
||||||
|
id_institucion_carrera:
|
||||||
|
infoInstitucionUsuarios[i].id_institucion_carrera,
|
||||||
|
carrera: { id_carrera: infoInstitucionUsuarios[i].id_carrera },
|
||||||
|
institucion: {
|
||||||
|
id_institucion: infoInstitucionUsuarios[i].id_institucion,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
return institucionUsuarios;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
findByUsuarioInstitucionCarrera(
|
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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
findFullInfoInstitucionUsuarioByUsuarioInstitucionCarrera(
|
||||||
usuario: Usuario,
|
usuario: Usuario,
|
||||||
institucionCarrera: InstitucionCarrera,
|
institucionCarrera: InstitucionCarrera,
|
||||||
) {
|
) {
|
||||||
return this.repository
|
return this.fullInformacionInstitucionUsuarioView
|
||||||
.findOne({
|
.findOne({
|
||||||
where: { activo: true, institucionCarrera, usuario },
|
where: {
|
||||||
|
id_institucion_carrera: institucionCarrera.id_institucion_carrera,
|
||||||
|
id_usuario: usuario.id_usuario,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
.then((institucionUsuario) => {
|
.then((infoInstitucionUsuario) => {
|
||||||
if (!institucionUsuario)
|
if (!infoInstitucionUsuario || infoInstitucionUsuario.activo === 0)
|
||||||
throw new ConflictException(
|
throw new ConflictException(
|
||||||
'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.',
|
'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.',
|
||||||
);
|
);
|
||||||
return institucionUsuario;
|
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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
usuario: {
|
||||||
|
id_usuario: infoInstitucionUsuario.id_usuario,
|
||||||
|
correo: infoInstitucionUsuario.correo,
|
||||||
|
},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
update(attrs: Partial<InstitucionUsuario>) {
|
update(attrs: Partial<InstitucionUsuario>) {
|
||||||
return this.findById(attrs.id_institucion_usuario)
|
return this.findInfoInstitucionUsuarioById(attrs.id_institucion_usuario)
|
||||||
.then((institucionUsuario) => {
|
.then((institucionUsuario) => {
|
||||||
Object.assign(institucionUsuario, attrs);
|
Object.assign(institucionUsuario, attrs);
|
||||||
return this.repository.save(institucionUsuario);
|
return this.repository.save(institucionUsuario);
|
||||||
})
|
})
|
||||||
.then((_) => ({
|
.then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
|
||||||
message: 'Se guardaron los cambios correctamente.',
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ export class MultaService {
|
|||||||
return this.repository.save(this.repository.create(data));
|
return this.repository.save(this.repository.create(data));
|
||||||
})
|
})
|
||||||
.then((_) =>
|
.then((_) =>
|
||||||
this.institucionUsuarioService.findAllByIdUsuario(
|
this.institucionUsuarioService.findInfoInstitucionUsuarioAllByIdUsuario(
|
||||||
prestamo.usuario.id_usuario,
|
prestamo.usuario.id_usuario,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -265,9 +265,10 @@ export class MultaService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async quitarMulta(id_institucion_usuario: number) {
|
async quitarMulta(id_institucion_usuario: number) {
|
||||||
const institucionUsuario = await this.institucionUsuarioService.findById(
|
const institucionUsuario =
|
||||||
id_institucion_usuario,
|
await this.institucionUsuarioService.findInfoInstitucionUsuarioById(
|
||||||
);
|
id_institucion_usuario,
|
||||||
|
);
|
||||||
|
|
||||||
return this.repository
|
return this.repository
|
||||||
.createQueryBuilder('mu')
|
.createQueryBuilder('mu')
|
||||||
|
@ -249,27 +249,26 @@ export class UsuarioService {
|
|||||||
throw new ConflictException(
|
throw new ConflictException(
|
||||||
'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.',
|
'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.',
|
||||||
);
|
);
|
||||||
return this.institucionUsuarioService.findByUsuarioInstitucionCarrera(
|
return this.institucionUsuarioService.findFullInfoInstitucionUsuarioByUsuarioInstitucionCarrera(
|
||||||
existeUsuario,
|
existeUsuario,
|
||||||
institucionCarrera,
|
institucionCarrera,
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.then((institucionUsuario) => {
|
.then((institucionUsuario) => {
|
||||||
const usuario = institucionUsuario.usuario;
|
if (!institucionUsuario.usuario.correo)
|
||||||
|
|
||||||
if (!usuario.correo)
|
|
||||||
throw new ConflictException(
|
throw new ConflictException(
|
||||||
'Tu institución no te asignó un correo institucional, dirigete al módulo ',
|
'Tu institución no te asignó un correo institucional, dirigete al módulo para solucionarlo.',
|
||||||
);
|
);
|
||||||
|
|
||||||
const arrobaIndex = usuario.correo.indexOf('@');
|
const arrobaIndex = institucionUsuario.usuario.correo.indexOf('@');
|
||||||
|
|
||||||
message = `Se creó correctamente tu cuenta, mandamos un correo a ...${usuario.correo.slice(
|
message = `Se creó correctamente tu cuenta, mandamos un correo a ...${institucionUsuario.usuario.correo.slice(
|
||||||
arrobaIndex - 3,
|
arrobaIndex - 3,
|
||||||
)} con tus credenciales para acceder a este servicio.`;
|
)} con tus credenciales para acceder a este servicio.`;
|
||||||
usuario.telefono = telefono;
|
institucionUsuario.usuario.telefono = telefono;
|
||||||
usuario.password = this.bcryptService.encriptar(password);
|
institucionUsuario.usuario.password =
|
||||||
return this.repository.save(usuario);
|
this.bcryptService.encriptar(password);
|
||||||
|
return this.repository.save(institucionUsuario.usuario);
|
||||||
})
|
})
|
||||||
.then((usuario) =>
|
.then((usuario) =>
|
||||||
this.nodemailerService.sendEmail({
|
this.nodemailerService.sendEmail({
|
||||||
|
Loading…
Reference in New Issue
Block a user