Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/wavezync/nestjs-pgboss
- Owner: wavezync
- License: mit
- Created: 2024-07-12T15:47:37.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2024-11-25T10:31:06.000Z (about 2 months ago)
- Last Synced: 2024-11-25T11:19:00.878Z (about 2 months ago)
- Topics: nestjs, nestjs-backend, nestjs-pgboss, pg-boss, pgboss, postgresql, postgresql-database
- Language: TypeScript
- Homepage: https://wavezync.com
- Size: 137 KB
- Stars: 9
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.MD
- License: LICENSE
Awesome Lists containing this project
README
# `@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';
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)