Helpers para proyectos de NestJS FEG-MP.
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
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 }),
MsSeguridadModule.register({
global: true,
applicationCodeTag: process.env.ENV_APP_NAME,
urlSeguridad: process.env.ENV_GRPC_MS_SEGURIDAD,
urlRedisCache: process.env.ENV_GRPC_MS_REDIS_CACHE,
tcpHostMsRedis: '127.0.0.1',
tcpPortMsRedis: 8000,
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 con process.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
-
@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:
@Get(':id')
@BearerAuthPermision()
findOne(@Param('id') id: number) {
return this.casosPersonaService.findOne(+id);
}
@Post('test-seguridad')
@BearerAuthPermision(['ALGUN_PERMISOS'])
async test(
@Body() body: TokenBody,
@AuthUser() user: UserPayload,
@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 }),
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
-
@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:
@Get(':id')
@BearerConvenioPermision()
findOne(@Param('id') id: number) {
return {
some: 'retornando servicio sin permiso pero con token valido'
};
}
@Post('test-seguridad')
@BearerConvenioPermision(['ALGUN_PERMISOS'])
async test(
@Body() body: TokenBody,
@ConvenioToken() user: UserPayload,
@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 }),
MsRedisModule.register({
urlRedisCache: process.env.ENV_GRPC_MS_REDIS_CACHE || '',
tcpHostMsRedis: '127.0.0.1',
tcpPortMsRedis: 8000,
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
Configuracion de Paquete en el archivo my.montroller.ts
import { DatapassInterceptor } from 'ms-redis-cliente'
@Get('/my-rest-api')
@SetMetadata("data-cache", {key:"key-name-cache",ttl:15,db:0})
@UseInterceptors(DatapassInterceptor)
async myRestApi(@Res({ passthrough: true }) res) {
try {
const getResponse = await this.appService.getRestApiTWo()
return getResponse
} catch (error) {
throw error
}
}
Servicios disponibles
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
Servicios disponibles
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 }),
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;
}
}
}