listo institucion usuario

This commit is contained in:
xXpuma99Xx 2022-10-24 14:42:35 -05:00
parent 772010d7f1
commit ace8e16c83
4 changed files with 77 additions and 24 deletions

View File

@ -1,10 +1,9 @@
import { IsBoolean, IsInt, IsOptional } from 'class-validator';
import { IsBoolean, IsInt } from 'class-validator';
export class UpdateInstitucionUsuarioInputDto {
@IsInt()
id_institucion_usuario: number;
@IsBoolean()
@IsOptional()
activo: boolean;
}

View File

@ -0,0 +1,11 @@
import { Expose, Type } from 'class-transformer';
import { InstitucionCarreaOutputDto } from '../../../institucion-carrera/dto/output/institucion-carrera.dto';
export class InstitucionUsuarioMinOutputDto {
@Expose()
id_institucion_usuario;
@Expose()
@Type(() => InstitucionCarreaOutputDto)
institucionCarrera;
}

View File

@ -1,12 +1,14 @@
import { Body, Controller, Put, Request, UseGuards } from '@nestjs/common';
import { Body, Controller, Get, Put, Request, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger';
import { Serealize } from '../interceptors/serialize.interceptor';
import { InstitucionUsuarioService } from './institucion-usuario.service';
import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service';
import { Operador } from '../operador/entity/operador.entity';
import { Usuario } from 'src/usuario/entity/usuario.entity';
import { UpdateInstitucionUsuarioInputDto } from './dto/input/update.dto';
import { MessageOutputDto } from '../dto/output/message.dto';
import { InstitucionUsuarioMinOutputDto } from './dto/output/institucion-usuario-min.dto';
@Controller('institucion-usuario')
@ApiTags('institucion-usuario')
@ -16,6 +18,21 @@ export class InstitucionUsuarioController {
private validarUsuarioService: ValidarUsuarioService,
) {}
@Serealize(InstitucionUsuarioMinOutputDto)
@Get()
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description:
'Enpoint que obtiene todas las asociaciones entre un alumno y una institución y su carra que esten activas.',
})
@ApiBearerAuth('jwt')
get(@Request() req) {
const usuario: Usuario = req.user.usuario;
this.validarUsuarioService.validarUsuario(usuario);
return this.institucionUsuarioService.findFullInfoAllByUsuario(usuario);
}
@Serealize(MessageOutputDto)
@Put('desactivar-cuentas')
@UseGuards(AuthGuard('jwt'))

View File

@ -21,6 +21,7 @@ export class InstitucionUsuarioService {
) {}
create(institucionCarrera: InstitucionCarrera, usuario: Usuario) {
// Creo y guardo el registro
return this.repository
.save(this.repository.create({ institucionCarrera, usuario }))
.then((institucionUsuario) => ({
@ -30,11 +31,14 @@ export class InstitucionUsuarioService {
}
desactivarCuentas(admin: Operador) {
// Busco todas los registros que le pertenecen a la institutción del operador
// que esta realizando esta acción
return this.informacionInstitucionUsuarioView
.find({
where: { id_institucion: admin.institucion.id_institucion },
where: { id_institucion: admin.institucion.id_institucion, activo: 1 },
})
.then(async (infoInstitucionesUsuario) => {
// Desactivo todos los registros que cumplen con las condiciones
for (let i = 0; i < infoInstitucionesUsuario.length; i++)
await this.repository.save(
this.repository.create({
@ -43,8 +47,8 @@ export class InstitucionUsuarioService {
activo: false,
}),
);
})
.then((_) => ({ message: 'Se desactivaron todas las cuentas.' }));
return { message: 'Se desactivaron todas las cuentas.' };
});
}
findAllByIdUsuarioIdInstitucion(id_usuario: number, id_institucion: number) {
@ -72,24 +76,21 @@ export class InstitucionUsuarioService {
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,
},
},
}),
this.fullViewToInstitucionUsuario(infoInstitucionesUsuario[i]),
);
return institucionesUsuario;
});
}
findFullInfoAllByUsuario(usuario: Usuario) {
return this.fullInformacionInstitucionUsuarioView
.find({ where: { id_usuario: usuario.id_usuario, activo: 1, multa: 0 } })
.then((infoInstitucionesUsuario) => {
const institucionesUsuario: InstitucionUsuario[] = [];
for (let i = 0; i < infoInstitucionesUsuario.length; i++)
institucionesUsuario.push(
this.fullViewToInstitucionUsuario(infoInstitucionesUsuario[i]),
);
return institucionesUsuario;
});
@ -166,17 +167,21 @@ export class InstitucionUsuarioService {
update(attrs: Partial<InstitucionUsuario>) {
return this.findById(attrs.id_institucion_usuario)
.then((institucionUsuario) => {
// Asigno valores enviados al objeto
Object.assign(institucionUsuario, attrs);
// Guardar
return this.repository.save(institucionUsuario);
})
.then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
}
updateMulta(id_institucion: number, id_usuario: number, status: boolean) {
// Busca todas las carreras del usuario en la institución enviada
return this.findAllByIdUsuarioIdInstitucion(
id_usuario,
id_institucion,
).then(async (institucionesUsuario) => {
// desactiva o activa dependinedo el caso
for (let i = 0; i < institucionesUsuario.length; i++) {
institucionesUsuario[i].multa = status;
await this.repository.save(institucionesUsuario[i]);
@ -198,4 +203,25 @@ export class InstitucionUsuarioService {
},
});
}
fullViewToInstitucionUsuario(
infoInstitucionUsuario: FullInformacionInstitucionUsuarioView,
) {
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,
carrera: infoInstitucionUsuario.carrera,
},
institucion: {
id_institucion: infoInstitucionUsuario.id_institucion,
institucion: infoInstitucionUsuario.institucion,
},
},
});
}
}