Skip to content

Instantly share code, notes, and snippets.

View salmanagustian's full-sized avatar

salman salmanagustian

  • Rolling Glory
  • Bandung, Indonesia
View GitHub Profile
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { QueueConfigModule } from './config/queue/config.module';
import { PurchaseModule } from './purchase/purchase.module';
@Module({
imports: [QueueConfigModule, PurchaseModule],
controllers: [AppController],
providers: [AppService],
@salmanagustian
salmanagustian / purchase-queue.module.ts
Created June 21, 2022 14:40
Purchase Queue Module
import { BullModule } from '@nestjs/bull';
import { Module } from '@nestjs/common';
import { PurchaseProcessor } from './purchase-queue.processor';
@Module({
imports: [
BullModule.registerQueue({
name: 'send-invoice',
}),
],
@salmanagustian
salmanagustian / purchase-queue.processor.ts
Created June 21, 2022 14:29
Purchase Queue Processor
import { OnQueueCompleted, Process, Processor } from '@nestjs/bull';
import { Logger } from '@nestjs/common';
import { Job } from 'bull';
@Processor('send-invoice')
export class PurchaseProcessor {
private readonly logger = new Logger(PurchaseProcessor.name);
// Consumers
@Process()
import { BullModule } from '@nestjs/bull';
import { Module } from '@nestjs/common';
import { PurchaseQueueModule } from 'src/job/purchase/purchase-queue.module';
import { PurchaseController } from './purchase.controller';
import { PurchaseService } from './purchase.service';
@Module({
imports: [PurchaseQueueModule],
controllers: [PurchaseController],
providers: [PurchaseService],
import { InjectQueue } from '@nestjs/bull';
import { Injectable } from '@nestjs/common';
import { Queue } from 'bull';
import { IUserPurchase } from './interface/user-purchasing.interface';
@Injectable()
export class PurchaseService {
constructor(@InjectQueue('send-invoice') private purchaseQueue: Queue) {}
async sendInvoiceToCustomer(data: IUserPurchase[]) {
// Producers
@salmanagustian
salmanagustian / purchase.controller.ts
Last active June 21, 2022 14:54
Purchase Controller
import { Controller, Get, Post } from '@nestjs/common';
import { IUserPurchase } from './interface/user-purchasing.interface';
import { PurchaseService } from './purchase.service';
@Controller('/api/purchase')
export class PurchaseController {
constructor(private readonly purchaseService: PurchaseService) {}
@Post()
async send() {
@salmanagustian
salmanagustian / config.ts
Created June 21, 2022 13:54
Queue Options
import * as dotenv from 'dotenv';
import * as fs from 'fs';
const env = dotenv.parse(fs.readFileSync('.env'));
export default {
redis: {
host: env.REDIS_HOST,
port: env.REDIS_PORT,
db: env.REDIS_DB,
password: env.REDIS_PASSWORD,
@salmanagustian
salmanagustian / config.provider.ts
Created June 21, 2022 13:51
Queue Config Provider
import { SharedBullConfigurationFactory } from '@nestjs/bull';
import { Injectable } from '@nestjs/common';
import { QueueOptions } from 'bull';
import * as config from './config';
@Injectable()
export class QueueConfigProvider implements SharedBullConfigurationFactory {
createSharedConfiguration(): QueueOptions {
return config as any;
}
@salmanagustian
salmanagustian / config.module.ts
Last active June 21, 2022 13:37
Config Queue Module
import { BullModule } from '@nestjs/bull';
import { Module } from '@nestjs/common';
import { PurchaseQueueModule } from 'src/job/purchase/purchase-queue.module';
import { PurchaseProcessor } from 'src/job/purchase/purchase-queue.processor';
import { QueueConfigProvider } from './config.provider';
@Module({
imports: [
BullModule.forRootAsync({ useClass: QueueConfigProvider }),
BullModule.registerQueue({ name: 'send-invoice' }),