Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/wavezync/nestjs-pgboss

State of Art PG Boss integration with NestJS
https://github.com/wavezync/nestjs-pgboss

nestjs nestjs-backend nestjs-pgboss pg-boss pgboss postgresql postgresql-database

Last synced: about 1 month ago
JSON representation

State of Art PG Boss integration with NestJS

Awesome Lists containing this project

README

        

# `@wavezync/nestjs-pgboss`


Use pg-boss in your Nest.js app!



Build Status


NPM Version


License

## 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';
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[]) {
this.logger.log(`Processing ${jobs.length} job(s)`);
}
}

```

#### 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)