@wavezync/nestjs-pgboss
v4.0.1
Published
A NestJS module that integrates pg-boss for job scheduling and handling.
Downloads
308
Readme
@wavezync/nestjs-pgboss
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';
import { JobWithMetadata } from 'pg-boss';
interface MyJobData {
id: number;
name: string;
}
@Injectable()
export class MyJobHandler {
private readonly logger = new Logger(MyJobHandler.name);
@Job('my-job')
async handleMyJob(jobs: JobWithMetadata<MyJobData>[]) {
this.logger.log(`Processing ${jobs.length} job(s)`);
}
}
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