fiscalia_bo-nest-helpers
v1.6.3
Published
Helpers y servicios para NestJS
Downloads
1,574
Readme
Descripción
Este proyecto esta orientado a la publicación de helpers básicos al momento de iniciar un proyecto nuevo de NESTJS.
De momento se tienen los siguientes servicios:
- MS-FILES: Para su uso debe tener la variable de entorno "ENV_SERVICE_MS_FILES_URL='url del entorno de ms-files'"
test con wrk
wrk -t10 -c400 -d15s http://172.27.39.12:3015/v1/application/types
wrk -t10 -c400 -d15s http://172.27.39.12:3015/v1/application/types/tcp
wrk -t10 -c400 -d15s http://172.27.39.12:3015/v1/application/types/grpc
Compilación antes de publicar
$ tsc
Instalación
$ yarn add fiscalia_bo-nest-helpers
importar servicios
import { MsFilesService } from 'fiscalia_bo-nest-helpers/dist/modules/ms-files';
variables de entorno obligatorios
ENV_SERVICE_MS_FILES_URL='https://ms-files.url'
USO DEL MODULO MS-SEGURIDAD
El módulo MsSeguridadModule proporciona una manera fácil de comunicarse con un servicio de seguridad a través de gRPC.
Modulos disponibles
- MsSeguridadModule
MsSeguridadModule
para utilizar el servicio de seguridad es necesario importar el modulo MsSeguridadModule
Configuración
Antes de utilizar el módulo, asegúrese de tener las siguientes variables de entorno configuradas:
ENV_APP_NAME
: el el codigo de la aplicacion registrado en rrhh.ENV_GRPC_MS_SEGURIDAD
: la URL del servidor de seguridad a través de gRPC.ENV_GRPC_MS_REDIS_CACHE
: la URL del servidor de cacheo de redis a través de gRPC.
Uso
Para utilizar el módulo, primero importe MsSeguridadModule
en su módulo principal:
import { Module } from '@nestjs/common';
import { MsSeguridadModule } from 'fiscalia_bo-nest-helpers/dist/modules/ms-seguridad';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
// Register ms-seguridad module global
MsSeguridadModule.register({
global: true,
applicationCodeTag: process.env.ENV_APP_NAME,
urlSeguridad: process.env.ENV_GRPC_MS_SEGURIDAD,
// parametros redis
urlRedisCache: process.env.ENV_GRPC_MS_REDIS_CACHE,
tcpHostMsRedis: '127.0.0.1',
tcpPortMsRedis: 8000,
// Todos los parametros de redis son opcionales pero necesita o el de grpc o los de tcp para funcionar
tcpHostMsRedis: '127.0.0.1',
tcpPortMsRedis: 8000,
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
NOTA IMPORTANTE: previo al uso del modulO debe importarse el
ConfigModule
de nestjs y configurarlo para uso global
NOTA IMPORTANTE: si se agrega el parametro
applicationCodeTag
en ModuleSeguridad entonces se validara que el el token conprocess.env.ENV_APP_NAME
de la applicacion
En este ejemplo, estamos utilizando el método register para cargar la configuración de forma síncrona
decoradores disponibles para controller
@BearerAuthPermision()
, decorador auth que realiza 3 verificaciones antes de entrar a un controller.- verifica automaticamente que existe
token bearer
en el header de la peticion - verifica que el token se válido
- Si este decorador recibe permisos por parametro entonces verifica que cumpla con todos los permisos indicados por parametro
- verifica automaticamente que existe
@AuthUser()
, decorador para obtener los datos del token como ser:- ci: string;
- aplicacionId: number;
- usuarioId: number;
- msPersonaId: number;
- perfilPersonaId: number;
- funcionarioId?: number;
- oficinaId?: number;
- municipioId?: number;
- institucionId?: number;
- departamentoId?: number;
@AuthToken()
, decorador para obtener el token de tipo string@AuthPermissions()
, decorador para obtener la lista de permisos, devuelve array de string.
ejempos de uso:
// EJEMPLO 1
@Get(':id')
@BearerAuthPermision()
findOne(@Param('id') id: number) {
return this.casosPersonaService.findOne(+id);
}
// EJEMPLO 2
@Post('test-seguridad')
@BearerAuthPermision(['ALGUN_PERMISOS'])
async test(
@Body() body: TokenBody,
@AuthUser() user: UserPayload, // controlador
@AuthToken() token: string,
@AuthPermissions() permissions: string[],
) {
return {
some: 'algo',
};
}
MsSeguridadConvenioModule
para utilizar el servicio de seguridad es necesario importar el modulo MsSeguridadConvenioModule
Configuración
Antes de utilizar el módulo, asegúrese de tener las siguientes variables de entorno configuradas:
ENV_GRPC_MS_SEGURIDAD
: la URL del servidor de seguridad a través de gRPC.
Uso
Para utilizar el módulo, primero importe MsSeguridadConvenioModule
en su módulo principal:
import { Module } from '@nestjs/common';
import { MsSeguridadConvenioModule } from 'fiscalia_bo-nest-helpers/seguridad';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
// Register ms-seguridad-convenio module global
MsSeguridadConvenioModule.register({
global: true,
urlSeguridad: process.env.ENV_GRPC_MS_SEGURIDAD,
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
NOTA IMPORTANTE: previo al uso del modulO debe importarse el
ConfigModule
de nestjs y configurarlo para uso global
En este ejemplo, estamos utilizando el método register para cargar la configuración de forma síncrona
decoradores disponibles para controller
@BearerConvenioPermision
, decorador auth que realiza 3 verificaciones antes de entrar a un controller.- verifica automaticamente que existe
token bearer
en el header de la peticion - verifica que el token se válido
- Si este decorador recibe permisos por parametro entonces verifica que cumpla con todos los permisos indicados por parametro
- verifica automaticamente que existe
@GetTokenConvenio()
, decorador para obtener los datos del token:@ConvenioToken()
, decorador para obtener el token de tipo string@ConvenioPermissions()
, decorador para obtener la lista de permisos, devuelve array de string.
ejempos de uso:
// EJEMPLO 1
@Get(':id')
@BearerConvenioPermision()
findOne(@Param('id') id: number) {
return {
some: 'retornando servicio sin permiso pero con token valido'
};
}
// EJEMPLO 2
@Post('test-seguridad')
@BearerConvenioPermision(['ALGUN_PERMISOS'])
async test(
@Body() body: TokenBody,
@ConvenioToken() user: UserPayload, // controlador
@AuthToken() token: string,
@GetTokenConvenio() permissions: string[],
) {
return {
some: 'retornando servicio con permiso',
};
}
USO DEL SERVICIO MS-REDIS
z
Antes de utilizar el módulo, asegúrese de tener las siguientes variables de entorno configuradas:
ENV_GRPC_MS_REDIS_CACHE
: la URL del servidor de cacheo de redis a través de gRPC.
Uso
Para utilizar el módulo, primero importe MsRedisModule
en su módulo principal:
import { Module } from '@nestjs/common';
import { MsRedisModule } from 'fiscalia_bo-nest-helpers/seguridad';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
// Register ms-seguridad module global
MsRedisModule.register({
urlRedisCache: process.env.ENV_GRPC_MS_REDIS_CACHE || '',
tcpHostMsRedis: '127.0.0.1',
tcpPortMsRedis: 8000,
// Todos los parametros de redis son opcionales pero necesita o el de grpc o los de tcp para funcionar
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
Configuracion de Paquete en el archivo my.montroller.ts
import { DatapassInterceptor } from 'ms-redis-cliente'
@Get('/my-rest-api')
//db: es la base de datos en la cual se trabajara es opcional por defecto se guarda en la 0
@SetMetadata("data-cache", {key:"key-name-cache",ttl:15,db:0})
@UseInterceptors(DatapassInterceptor)
/*Configuracion de Res() obligatoria
{ passthrough: true }
Configuracion de Res() obligatoria*/
async myRestApi(@Res({ passthrough: true }) res) {
try {
/*Configuracion de respuesta obligatoria*/
const getResponse = await this.appService.getRestApiTWo()
return getResponse
/*Configuracion de respuesta obligatoria*/
} catch (error) {
/*Configuracion de respuesta de error obligatoria*/
throw error
}
}
Servicios disponibles
- MsRedisService
Nomenclatura de asignacion de key para redis
aplicacion-name:key_One-key_Two-key_Three-keyAcction
ejemplo de asignacion de key para redis
const keyCache = `ms-seguridad:usuarioId_${usuarioId}-aplicacionId_${aplicacionId}-permisos`;
USO DEL MODULO MS-PERSONAS
El módulo MsPersonasModule proporciona una manera fácil de comunicarse con un servicio de ms-personas a través de http.
Modulos disponibles
- MsPersonasModule
Servicios disponibles
- MsPersonasService
para utilizar el servicio de personas es necesario importar el modulo MsPersonasModule
Configuración
Antes de utilizar el módulo, asegúrese de tener las siguientes variables de entorno configuradas o enviar la variable de entorno definida:
ENV_SERVICE_MS_PERSONAS
: la URL del servidor de seguridad a través de gRPC.
Uso
Para utilizar el módulo, primero importe MsPersonasModule
en su módulo principal:
import { Module } from '@nestjs/common';
import { MsPersonasModule } from 'fiscalia_bo-nest-helpers/dist/ms-personas';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
// Register ms-personas module global
MsPersonasModule.register({
global: true,
urlMsPersonas: process.env.ENV_SERVICE_MS_PERSONAS,
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
NOTA IMPORTANTE: previo al uso del modulO debe importarse el
ConfigModule
de nestjs y configurarlo para uso global
En este ejemplo, estamos utilizando el método register para cargar la configuración de forma síncrona
USO DEL MODULO MS-RABBITMQ
Configuracion de Paquete en el archivo app.module.ts
import { MsRabbitModule } from 'fiscalia_bo-nest-helpers';
@Module({
imports: [
MsRabbitModule.register({
global: true,
urlRabbit: process.env.ENV_SERVICE_MS_RABBIT_URL,
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
Configuracion para escuchar un canal especifico de rabbit
import { MsRabbitService } from 'fiscalia_bo-nest-helpers';
@Injectable()
export class AppService {
constructor(private readonly msRabbitService: MsRabbitService) {}
async onModuleInit() {
try {
await this.msRabbitService.listenQueueMsRabbit(
{ virtualhost: 'blade_host_virtual', queueListen: 'tasks' },
(error, result) => {
if (error) {
console.error(error);
} else {
console.log('>>>', result);
}
},
);
} catch (error) {
console.error(error);
}
}
}
Parametros para utilizar el metodo listenQueueMsRabbit
| Propiedad | Valor | Descripcion | | ----------- | ------------- | -------------------------------------------------------------------------------------- | | virtualHost | String (null) | Host Virtual donde creara una conexion, si este se envia null lo creara automaticamete | | queueListen | String (null) | El canal o queue que desea que escuchar y recibir datos | | callback | Function | Campo necesario para pode recibir en el callback los datos transmitidos |
Parametros para utilizar el metodo senderQueueMsRabbit
Se pueden utilizar el servicio
Debe realizar la configuracion de Paquete en su archivo my.service.ts
import { RabbitServiceClient } from 'ms-rabbit-cliente';
@Injectable()
export class AppService {
constructor(private rabbitServiceClient: RabbitServiceClient) {}
async MyService() {
await this.msRabbitService.senderQueueMsRabbit(
{ virtualhost: 'blade_host_virtual', queueListen: 'tasks' },
JSON.stringify({ a: 'holamundo' }),
);
}
}
Descripcion de los objecto para envio de datos
| Propiedad | Valor | Descripcion | | ----------- | ------------- | -------------------------------------------------------------------------------------- | | virtualHost | String (null) | Host Virtual donde creara una conexion, si este se envia null lo creara automaticamete | | queueListen | String (null) | El canal o queue que desea transmitir datos | | data | String | Campo necesario para enviar datos en formato Json String |
USO DEL MODULO MS-LOGS
Configuracion de Paquete en el archivo app.module.ts
import { MsLogsModule } from 'fiscalia_bo-nest-helpers';
@Module({
imports: [
MsLogsModule.register({
global: true,
urlMsLogs: process.env.ENV_SERVICE_MS_LOGS,
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
Servicios Disponibles para el uso de logs
import { MsLogsService } from 'fiscalia_bo-nest-helpers';
@Injectable()
export class AppService {
constructor(private readonly msLogsService: MsLogsService) {}
async test_services_logs() {
try {
await this.msLogsService.generateLogLogin({
aplicacion: 'jl1',
funcionario_id: 1,
funcionario_ci: '51234124',
funcionario_nombre: 'Javier Contreras Mamani',
dispositivo_ip: '192.168.0.1',
dispositivo_so: 'Windows 11',
dispositivo_navegador: 'Chrome 99',
});
await this.msLogsService.generateLogView({
aplicacion: 'jl2',
apartado: 'caso',
apartado_info_extra: 'cud: 3143233',
tabla_id: 'string',
tabla_nombre: 'vacaciones',
funcionario_id: 1,
funcionario_ci: '51234124',
funcionario_nombre: 'Javier Contreras Mamani',
dispositivo_ip: '192.168.0.1',
dispositivo_so: 'Windows 11',
dispositivo_navegador: 'Chrome 99',
});
await this.msLogsService.generateLogEvents({
aplicacion: 'jl2',
evento: 'editar',
tabla_id: '1001',
tabla_nombre: 'vacaciones',
tabla_pre_cambios: '{id:123,nombre:"misnombre"}',
request: 'PUT /listar/vacaciones',
funcionario_id: 1,
funcionario_ci: '5131343',
funcionario_nombre: 'Javier Contreras Mamani',
dispositivo_ip: '192.168.0.1',
dispositivo_so: 'Windows 11',
dispositivo_navegador: 'Chrome 99',
});
await this.msLogsService.generateLogError({
aplicacion: 'jl2',
evento: 'Listar vacaciones',
tabla_id: 'string',
tabla_nombre: 'vacaciones',
request: 'POST /listar/vacaciones',
error_string_json: 'string',
});
} catch (e) {
console.error(e);
throw e;
}
}
}