Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/apricote/nest-pg-boss
- Owner: apricote
- License: mit
- Created: 2023-03-05T23:24:26.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-10-23T15:01:28.000Z (2 months ago)
- Last Synced: 2024-10-23T15:14:54.704Z (2 months ago)
- Language: TypeScript
- Size: 1.03 MB
- Stars: 12
- Watchers: 2
- Forks: 6
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# `@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).