Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/apricote/nest-pg-boss

Use pg-boss in your NestJS app
https://github.com/apricote/nest-pg-boss

Last synced: 2 months ago
JSON representation

Use pg-boss in your NestJS app

Awesome Lists containing this project

README

        

# `@apricote/nest-pg-boss`


Use pg-boss in your Nest.js service!


NPM Version
Package License
NPM Downloads
CI Status

## Installation

```bash
npm install @apricote/nest-pg-boss
```

## Usage

### Setup

To begin using `@apricote/nest-pg-boss`, initialize the root module:

```ts
import { PGBossModule } from "@apricote/nest-pg-boss";

// app.module.ts
@Module({
imports: [
PGBossModule.forRootAsync({
application_name: "default",
useFactory: (config: ConfigService) => ({
// Connection details
host: config.get("DB_HOST"),
user: config.get("DB_USERNAME"),
password: config.get("DB_PASSWORD"),
database: config.get("DB_DATABASE"),
schema: "public",
max: config.get("DB_POOL_MAX"),
}),
inject: [ConfigService],
}),
],
})
export class AppModule {}
```

For a list of available settings, check out the [pg-boss docs](https://github.com/timgit/pg-boss/blob/master/docs/readme.md#newoptions).

### Jobs

```typescript
// jobs.ts
import { createJob } from "@apricote/nest-pg-boss"

interface IFoobarJobData {
foo: string
bar: boolean
}

const FoobarJob = createJob("foobar")
```

#### Create new Jobs

```typescript
// module.ts
import { PGBossModule } from "@apricote/nest-pg-boss";
import { FoobarService } from "./service.ts";

@Module({
imports: PGBossModule.forJobs([FoobarJob]),
providers: [FoobarService]
})
class FoobarModule {}

```

```typescript
// service.ts
import { JobService } from "@apricote/nest-pg-boss";
import { FoobarJob, IFoobarJobData } from "./jobs.ts";

@Injectable()
class FoobarService {
constructor(
@FoobarJob.Inject()
private readonly foobarJobService: JobService,
) {}

async sendJob() {
await this.foobarJobService.send({ foo: "oof", bar: true }, {});
}
}
```

#### Process Jobs

Jobs can be processed by using the `@FoobarJob.Handle()` decorator.

```typescript
// service.ts
@Injectable()
class FoobarService {
/* ... */

@FoobarJob.Handle()
async handleJob(job: Job) {
// do something
}
}
```

You can optionally pass an object with [WorkOptions](https://github.com/timgit/pg-boss/blob/1f541263a906781efaf607f539340c9609db77df/types.d.ts#L119) to `.Handle()`:

```typescript
@FoobarJob.Handle({ teamSize: 10, teamConcurrency: 2 })
```

## Test

```bash
# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

# test coverage
$ npm run test:cov
```

## License

`@apricote/nest-pg-boss` is [MIT licensed](LICENSE).