Use pg-boss in your Nest.js app!
npm install pg-boss @wavezync/nestjs-pgboss
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 {}
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' });
}
}
You can access the PgBoss
instance directly via pgBossService.boss
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);
}
}
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');
}
}
# unit tests
$ npm run test
@wavezync/nestjs-pgboss
is MIT licensed