Use pg-boss in your Nest.js service!
npm install @apricote/nest-pg-boss
To begin using @apricote/nest-pg-boss
, initialize the root module:
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<string>("DB_HOST"),
user: config.get<string>("DB_USERNAME"),
password: config.get<string>("DB_PASSWORD"),
database: config.get<string>("DB_DATABASE"),
schema: "public",
max: config.get<number>("DB_POOL_MAX"),
}),
inject: [ConfigService],
}),
],
})
export class AppModule {}
For a list of available settings, check out the pg-boss docs.
// jobs.ts
import { createJob } from "@apricote/nest-pg-boss"
interface IFoobarJobData {
foo: string
bar: boolean
}
const FoobarJob = createJob<IFoobarJobData>("foobar")
// module.ts
import { PGBossModule } from "@apricote/nest-pg-boss";
import { FoobarService } from "./service.ts";
@Module({
imports: PGBossModule.forJobs([FoobarJob]),
providers: [FoobarService]
})
class FoobarModule {}
// 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<IFoobarJobData>,
) {}
async sendJob() {
await this.foobarJobService.send({ foo: "oof", bar: true }, {});
}
}
Jobs can be processed by using the @FoobarJob.Handle()
decorator.
// service.ts
@Injectable()
class FoobarService {
/* ... */
@FoobarJob.Handle()
async handleJob(job: Job<FoobarJobData>) {
// do something
}
}
You can optionally pass an object with WorkOptions to .Handle()
:
@FoobarJob.Handle({ teamSize: 10, teamConcurrency: 2 })
# unit tests
$ npm run test
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov
@apricote/nest-pg-boss
is MIT licensed.