@wavezync/nestjs-pgboss
Use pg-boss in your Nest.js app!
## Installation
```bash
npm install pg-boss @wavezync/nestjs-pgboss
```
## Usage
### Setup
To begin using `@wavezync/nestjs-pgboss`, initialize the root module:
```ts
import { PGBossModule } from "@wavezync/nestjs-pgboss";
// app.module.ts
@Module({
imports: [
PgBossModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
connectionString: configService.get
('DATABASE_URL'),
}),
inject: [ConfigService],
}),
],
})
export class AppModule {}
```
#### Schedule a job using `PgBossService`
```ts
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
```ts
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
```ts
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
```bash
# unit tests
$ npm run test
```
## License
`@wavezync/nestjs-pgboss` is [MIT licensed](LICENSE)