Skip to content

wavezync/nestjs-pgboss

Repository files navigation

@wavezync/nestjs-pgboss

Use pg-boss in your Nest.js app!

Build Status NPM Version License

Installation

npm install pg-boss @wavezync/nestjs-pgboss

Usage

Setup

To begin using @wavezync/nestjs-pgboss, initialize the root module:

import { PGBossModule } from "@wavezync/nestjs-pgboss";

// app.module.ts
@Module({
  imports: [
    PgBossModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => ({
        connectionString: configService.get<string>('DATABASE_URL'),
      }),
      inject: [ConfigService],
    }),
  ],
})
export class AppModule {}

Schedule a job using PgBossService

import { Injectable } from '@nestjs/common';
import { PgBossService } from '@wavezync/nestjs-pgboss';

@Injectable()
export class JobSchedulerService {
  constructor(private readonly pgBossService: PgBossService) {}

  async scheduleJob() {
    await this.pgBossService.scheduleJob('my-job', { key: 'value' });
  }
}

Access boss Directly

You can access the PgBoss instance directly via pgBossService.boss

Handle jobs using the @Job decorator

import { Injectable, Logger } from '@nestjs/common';
import { Job } from '@wavezync/nestjs-pgboss';

@Injectable()
export class MyJobHandler {
  private readonly logger = new Logger(MyJobHandler.name);

  @Job('my-job')
  async handleMyJob(job: { data: any }) {
    this.logger.log('Handling job with data:', job.data);
  }
}

Handle cron jobs using the @CronJob decorator

import { Injectable, Logger } from '@nestjs/common';
import { PgBossService, CronJob } from '@wavezync/nestjs-pgboss';

@Injectable()
export class MyCronJobService {
  private readonly logger = new Logger(MyCronJobService.name);

  @CronJob('my-cron-job', '0 * * * *', { priority: 1 })
  async handleCron() {
    this.logger.log('Executing cron job: my-cron-job');
  }
}

Test

# unit tests
$ npm run test

License

@wavezync/nestjs-pgboss is MIT licensed