import { RabbitRPC } from '@nestjs-plus/rabbitmq'; import { MessagingMethod } from '@nestjs.pro/common/dist/messaging/MessagingMethod'; import { Injectable } from '@nestjs/common'; import { PermissionsService } from './Permissions/PermissionsService'; import { RolesService } from './Roles/RolesService'; import { UsersService } from './Users/UsersService'; @Injectable() export class LocalRBACMessageBus { public constructor(private readonly usersService: UsersService, private readonly rolesService: RolesService, private readonly permissionsService: PermissionsService) { } @RabbitRPC({ exchange: process.env.RABBITMQ_EXCHANGE, routingKey: 'rbac', queue: 'rbac' }) public async handleMessage(methodCall: MessagingMethod) { console.log(methodCall); return new Promise(async (resolve, reject) => { if (this[ methodCall.serviceName ][ methodCall.methodName ]) { const result = await this[ methodCall.serviceName ][ methodCall.methodName ](...methodCall.args).catch(e => { resolve(e); }); resolve(result || null); } else { resolve('method not found'); } }); } }