From 40d64f30f604dadee9dc8a6e5ece6bfbf717f71f Mon Sep 17 00:00:00 2001 From: emilianaARomero Date: Tue, 1 Aug 2023 11:22:49 -0300 Subject: [PATCH 1/3] [FEATURE/CROW-308] Add connection to new queue to receive mint data --- src/common/constants/index.ts | 2 ++ src/common/rabbitmq/index.ts | 20 ++++++++++++++++++- .../campaigns-pledge.controller.ts | 7 +++++++ src/main.ts | 8 ++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/common/constants/index.ts b/src/common/constants/index.ts index 4116392..4795fd8 100644 --- a/src/common/constants/index.ts +++ b/src/common/constants/index.ts @@ -4,3 +4,5 @@ export const DEFAULT_PAGE_SIZE = 20; export const DEFAULT_PAGE = 1; export const TOKEN_EXPIRATION_TIME = '30d'; + +export const MINT_MANAGEMENT_QUEUE = 'mint_management'; diff --git a/src/common/rabbitmq/index.ts b/src/common/rabbitmq/index.ts index c43814d..57bbb11 100644 --- a/src/common/rabbitmq/index.ts +++ b/src/common/rabbitmq/index.ts @@ -1,6 +1,12 @@ import { ConfigService } from '@nestjs/config'; -import { ClientsProviderAsyncOptions, Transport } from '@nestjs/microservices'; +import { NestFactory } from '@nestjs/core'; +import { + ClientsProviderAsyncOptions, + MicroserviceOptions, + Transport, +} from '@nestjs/microservices'; +import { AppModule } from 'src/app.module'; import { NFT_GENERATION_QUEUE, RABBITMQ_SERVICE_NAME, @@ -22,3 +28,15 @@ export const rabbitmqConnectionFactory = { }), inject: [ConfigService], } as ClientsProviderAsyncOptions; + +export const createRMQMicroservice = (queueName: string) => { + return NestFactory.createMicroservice(AppModule, { + transport: Transport.RMQ, + options: { + urls: ['amqp://admin:admin@localhost:5672'], // TODO: Change path + queue: queueName, + prefetchCount: 1, + queueOptions: { durable: false }, + }, + }); +}; diff --git a/src/features/campaigns/controllers/campaign-pledge/campaigns-pledge.controller.ts b/src/features/campaigns/controllers/campaign-pledge/campaigns-pledge.controller.ts index 8731948..049a198 100644 --- a/src/features/campaigns/controllers/campaign-pledge/campaigns-pledge.controller.ts +++ b/src/features/campaigns/controllers/campaign-pledge/campaigns-pledge.controller.ts @@ -4,6 +4,8 @@ import { CampaignPledgeService } from '../../services/campaign-pledge/campaign-p import { APIResponse } from 'src/common/types'; import { CampaignPledgeQueryDto } from '../../dto/campaigns-pledge-query-dto'; import { CurrentUser } from 'src/decorators/currentUser.decorator'; +import { EventPattern } from '@nestjs/microservices'; +import { MINT_MANAGEMENT_QUEUE } from 'src/common/constants'; @Controller('campaigns-pledge') export class CampaignsPledgeController { @@ -25,4 +27,9 @@ export class CampaignsPledgeController { }); return { data: campaigns }; } + + @EventPattern(MINT_MANAGEMENT_QUEUE) + async handleNftGeneration(data) { + console.log('Received data: ', data); + } } diff --git a/src/main.ts b/src/main.ts index 0bda9b7..88eefd8 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,6 +7,8 @@ import mongoose from 'mongoose'; import { AppModule } from './app.module'; import { AllExceptionsFilter } from './middlewares/filters/exception.filter'; import { JwtAuthGuard } from './features/auth/guards/auth.guard'; +import { createRMQMicroservice } from './common/rabbitmq'; +import { MINT_MANAGEMENT_QUEUE } from './common/constants'; const { API_PORT, NODE_ENV } = process.env; @@ -14,6 +16,9 @@ async function bootstrap() { const isProductionEnv = NODE_ENV === 'production'; const app = await NestFactory.create(AppModule); const adapterHost = app.get(HttpAdapterHost); + const mintManagementChannel = await createRMQMicroservice( + MINT_MANAGEMENT_QUEUE, + ); app.use(helmet()); app.use(morgan('combined')); @@ -39,6 +44,9 @@ async function bootstrap() { await app.listen(API_PORT); console.log(`NestJS API listening on port ${API_PORT}`); + + await mintManagementChannel.listen(); + console.log('Listening to mint management channel'); } catch (err) { console.log('Error starting app!', err); process.exit(1); From b72ea6bad7edcaa877e38feeed207bb97538beb6 Mon Sep 17 00:00:00 2001 From: emilianaARomero Date: Tue, 1 Aug 2023 11:28:46 -0300 Subject: [PATCH 2/3] move global import --- .../controllers/campaign-pledge/campaigns-pledge.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/campaigns/controllers/campaign-pledge/campaigns-pledge.controller.ts b/src/features/campaigns/controllers/campaign-pledge/campaigns-pledge.controller.ts index 049a198..11c9c88 100644 --- a/src/features/campaigns/controllers/campaign-pledge/campaigns-pledge.controller.ts +++ b/src/features/campaigns/controllers/campaign-pledge/campaigns-pledge.controller.ts @@ -1,10 +1,10 @@ import { Controller, Get, Query } from '@nestjs/common'; +import { EventPattern } from '@nestjs/microservices'; import { CampaignPledgeService } from '../../services/campaign-pledge/campaign-pledge.service'; import { APIResponse } from 'src/common/types'; import { CampaignPledgeQueryDto } from '../../dto/campaigns-pledge-query-dto'; import { CurrentUser } from 'src/decorators/currentUser.decorator'; -import { EventPattern } from '@nestjs/microservices'; import { MINT_MANAGEMENT_QUEUE } from 'src/common/constants'; @Controller('campaigns-pledge') From 19d1f1b550eb92eb6e28d0de31661d2bc074b488 Mon Sep 17 00:00:00 2001 From: emilianaARomero Date: Fri, 4 Aug 2023 16:34:51 -0300 Subject: [PATCH 3/3] resolve comments --- src/common/rabbitmq/index.ts | 7 +++++-- .../campaign-pledge/campaigns-pledge.controller.ts | 2 +- src/main.ts | 8 +++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/common/rabbitmq/index.ts b/src/common/rabbitmq/index.ts index 57bbb11..7beb89a 100644 --- a/src/common/rabbitmq/index.ts +++ b/src/common/rabbitmq/index.ts @@ -29,11 +29,14 @@ export const rabbitmqConnectionFactory = { inject: [ConfigService], } as ClientsProviderAsyncOptions; -export const createRMQMicroservice = (queueName: string) => { +export const createRMQMicroservice = ( + queueName: string, + configService: ConfigService, +) => { return NestFactory.createMicroservice(AppModule, { transport: Transport.RMQ, options: { - urls: ['amqp://admin:admin@localhost:5672'], // TODO: Change path + urls: [configService.get('RABBITMQ_URL') as string], // TODO: Change path queue: queueName, prefetchCount: 1, queueOptions: { durable: false }, diff --git a/src/features/campaigns/controllers/campaign-pledge/campaigns-pledge.controller.ts b/src/features/campaigns/controllers/campaign-pledge/campaigns-pledge.controller.ts index 11c9c88..9f0bad0 100644 --- a/src/features/campaigns/controllers/campaign-pledge/campaigns-pledge.controller.ts +++ b/src/features/campaigns/controllers/campaign-pledge/campaigns-pledge.controller.ts @@ -29,7 +29,7 @@ export class CampaignsPledgeController { } @EventPattern(MINT_MANAGEMENT_QUEUE) - async handleNftGeneration(data) { + async handleMint(data) { console.log('Received data: ', data); } } diff --git a/src/main.ts b/src/main.ts index 88eefd8..86e59fd 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,6 +9,7 @@ import { AllExceptionsFilter } from './middlewares/filters/exception.filter'; import { JwtAuthGuard } from './features/auth/guards/auth.guard'; import { createRMQMicroservice } from './common/rabbitmq'; import { MINT_MANAGEMENT_QUEUE } from './common/constants'; +import { ConfigService } from '@nestjs/config'; const { API_PORT, NODE_ENV } = process.env; @@ -16,8 +17,9 @@ async function bootstrap() { const isProductionEnv = NODE_ENV === 'production'; const app = await NestFactory.create(AppModule); const adapterHost = app.get(HttpAdapterHost); - const mintManagementChannel = await createRMQMicroservice( + const queue = await createRMQMicroservice( MINT_MANAGEMENT_QUEUE, + new ConfigService(), ); app.use(helmet()); @@ -45,8 +47,8 @@ async function bootstrap() { await app.listen(API_PORT); console.log(`NestJS API listening on port ${API_PORT}`); - await mintManagementChannel.listen(); - console.log('Listening to mint management channel'); + await queue.listen(); + console.log('RabbitMQ service running'); } catch (err) { console.log('Error starting app!', err); process.exit(1);