Files
pcpuma_unam_api/src/operador/operador.controller.ts
T
xXpuma99Xx f9a13021fc reporte
2022-11-02 22:10:48 -06:00

198 lines
5.3 KiB
TypeScript

import {
Body,
Controller,
Get,
Post,
Put,
Query,
Request,
UseGuards,
} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import {
ApiBearerAuth,
ApiBody,
ApiOperation,
ApiQuery,
ApiTags,
} from '@nestjs/swagger';
import { Serealize } from '../interceptors/serialize.interceptor';
import { OperadorService } from './operador.service';
import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service';
import { Operador } from './entity/operador.entity';
import { CreateAdminDto } from './dto/input/create-admin.dto';
import { CreateOperadorDto } from './dto/input/create-operador.dto';
import { OperadoresDto } from './dto/input/operadores.dto';
import { UpdateOperadorDto } from './dto/input/update.dto';
import { UpdatePasswordOperadorDto } from './dto/input/update-password.dto';
import { MessageOutputDto } from '../dto/output/message.dto';
import { OperadorOutputDto } from './dto/output/operador.dto';
@Controller('operador')
@ApiTags('operador')
export class OperadorController {
constructor(
private operadorService: OperadorService,
private validarUsuarioService: ValidarUsuarioService,
) {}
@Serealize(MessageOutputDto)
@Post('admin')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({ description: 'Endpoint que crea un admin.' })
@ApiBearerAuth('jwt')
@ApiBody({
description: 'Todas las variables son obligatorias.',
examples: {
ejemplo: {
value: {
correo: '',
id_institucion: 200,
nombre: '',
operador: '',
},
},
},
})
createAdmin(@Request() req, @Body() body: CreateAdminDto) {
const superAdmin: Operador = req.user.operador;
this.validarUsuarioService.validarSuperAdmin(superAdmin);
return this.operadorService.create(
body.id_institucion,
3,
body.operador,
body.nombre,
body.correo,
);
}
@Serealize(MessageOutputDto)
@Post('operador')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({ description: 'Endpoint que crea un operador.' })
@ApiBearerAuth('jwt')
@ApiBody({
description: 'Todas las variables son obligatorias.',
examples: {
ejemplo: {
value: {
correo: '',
nombre: '',
operador: '',
password: '',
},
},
},
})
createOperador(@Request() req, @Body() body: CreateOperadorDto) {
const admin: Operador = req.user.operador;
this.validarUsuarioService.validarAdmin(admin);
return this.operadorService.create(
admin.institucion,
4,
body.operador,
body.nombre,
body.correo,
body.password,
);
}
@Serealize(OperadorOutputDto)
@Get('operadores')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description:
'Endpoint que retorna 25 operadores dependiendo de la página en la que se encuentra el usuario y sus filtros.',
})
@ApiBearerAuth('jwt')
@ApiQuery({
description: 'Página en la que se encuentra el usuario.',
name: 'pagina',
type: 'string',
})
@ApiQuery({
description: 'Id de la institución que se quiere usar como filtro.',
name: 'id_institucion',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del tipo usuario que se quiere usar como filtro.',
name: 'id_tipo_usuario',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Operador que se quiere buscar.',
name: 'operador',
type: 'string',
required: false,
})
operadores(@Request() req, @Query() query: OperadoresDto) {
const admin: Operador = req.user.operador;
this.validarUsuarioService.validarSuperAdminAdmin(admin);
return this.operadorService.findAll(query);
}
@Serealize(OperadorOutputDto)
@Get('catalogo')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description:
'Endpoint que retorna todo el catálogo de operadores de una institucion.',
})
@ApiBearerAuth('jwt')
catalogo(@Request() req) {
const admin: Operador = req.user.operador;
this.validarUsuarioService.validarSuperAdminAdmin(admin);
return this.operadorService.findAllByInstitucion(admin.institucion);
}
@Serealize(MessageOutputDto)
@Put('update-password')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description: 'Enpoint que envía una nueva password al correo del usuario.',
})
@ApiBearerAuth('jwt')
@ApiBody({
description: 'Es obligatorio enviar el campo id_operador.',
examples: { ejemplo: { value: { id_operador: 4, _password: '' } } },
})
passwordResset(@Request() req, @Body() body: UpdatePasswordOperadorDto) {
const admin: Operador = req.user.operador;
this.validarUsuarioService.validarSuperAdminAdmin(admin);
return this.operadorService.passwordReset(
admin,
body.id_operador,
body.password,
);
}
@Serealize(MessageOutputDto)
@Put()
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description: 'Endpoint que actualiza la información de un operador.',
})
@ApiBearerAuth('jwt')
@ApiBody({
description:
'Todas las variables a excepción de id_operador son opcionales.',
examples: {
ejemplo: { value: { id_operador: 3, _activo: true } },
},
})
update(@Request() req, @Body() body: UpdateOperadorDto) {
const admin: Operador = req.user.operador;
this.validarUsuarioService.validarSuperAdminAdmin(admin);
return this.operadorService.update(admin, body);
}
}