198 lines
5.3 KiB
TypeScript
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);
|
|
}
|
|
}
|