Skip to content

Instantly share code, notes, and snippets.

@vladmelnikov
Created January 30, 2020 14:48
Show Gist options
  • Select an option

  • Save vladmelnikov/6fbf6f1b256e3f727fa0ea37c6755cd6 to your computer and use it in GitHub Desktop.

Select an option

Save vladmelnikov/6fbf6f1b256e3f727fa0ea37c6755cd6 to your computer and use it in GitHub Desktop.

Revisions

  1. vladmelnikov created this gist Jan 30, 2020.
    29 changes: 29 additions & 0 deletions BullOptionsFactory.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,29 @@
    import { Injectable } from '@nestjs/common';
    import { BullOptionsFactory as Factory, BullModuleOptions } from '@nestjs/bull';

    import { Configuration } from '&app/config/Configuration';

    @Injectable()
    export class BullOptionsFactory implements Factory {
    private readonly host: string;
    private readonly port: string;
    private readonly auth: string;

    public constructor(config: Configuration) {
    this.host = config.getStringOrThrow('REDIS_HOST');
    this.port = config.getStringOrThrow('REDIS_PORT');
    this.auth = config.getStringOrThrow('REDIS_AUTH');
    console.log('inside constrctor');
    }

    public createBullOptions(): BullModuleOptions {
    console.log('inside createBullOptions'); // function has not been called
    return {
    redis: {
    host: this.host,
    port: Number(this.port),
    password: this.auth,
    },
    };
    }
    }
    55 changes: 55 additions & 0 deletions app.module.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,55 @@
    import {
    MiddlewareConsumer,
    Module,
    NestModule,
    OnApplicationBootstrap,
    OnApplicationShutdown,
    forwardRef,
    } from '@nestjs/common';
    import { TypeOrmModule } from '@nestjs/typeorm';
    import { JwtModule } from '@nestjs/jwt';
    import { BullModule } from '@nestjs/bull';

    import { ConfigModule } from '&app/config/config.module';
    import { SrpModule } from '&app/srp/srp.module';

    import { DbOptionsFactory } from './DbOptionsFactory';
    import { EntitySaver } from './EntitySaver';
    import { JwtOptionsFactory } from './JwtOptionsFactory';
    import { Logger } from './Logger';
    import { MinioClient } from './MinioClient';
    import { JwtDecoder } from './JwtDecoder';
    import { IdGenerator } from './IdGenerator';

    import { BullOptionsFactory } from './BullOptionsFactory';
    import { DelayedPushka } from './DelayedPushka/DelayedPushka';
    import { DelayedPushkaConsumer } from './DelayedPushka/DelayedPuskaConsumer';
    import { Configuration } from '&app/config/Configuration';

    @Module({
    imports: [
    ConfigModule,
    BullModule.registerQueueAsync({
    name: 'adsasa',
    imports: [ConfigModule],
    useClass: RedisOptionsFactory,
    }),
    TypeOrmModule.forRootAsync({
    imports: [ConfigModule],
    useClass: DbOptionsFactory,
    }),
    JwtModule.registerAsync({
    imports: [ConfigModule],
    useClass: JwtOptionsFactory,
    }),
    ],
    providers: [],
    exports: [],
    })
    export class ExternalModule implements NestModule {
    constructor() {}

    public configure(consumer: MiddlewareConsumer) {
    // pass
    }