@apricote/nest-pg-boss
Use pg-boss in your Nest.js service!
## 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).