The modern MongoDB-powered scheduling library pulse for NestJS
npm install @pulsecron/nestjs-pulse

The modern MongoDB-powered scheduling library for NestJS
Table of Contents
- Overview
- Getting Started
- Installation
- Example
- app.module.ts
- notification.module.ts
- notification.processor.ts
- notification.service.ts
- Contributing
- License
Pulse module for NestJS, working with nestjs v9.x, v10.x and v11.x.
---
``console`
npm install --save @pulsecron/nestjs-pulse @pulsecron/pulse
#### Example
##### app.module.ts
`typescript
// src/app.module.ts
import { Module } from '@nestjs/common';
import { PulseModule } from '@pulsecron/nestjs-pulse';
import { NotificationsModule } from './notification/notification.module';
@Module({
imports: [
PulseModule.forRoot({
db: {
address: 'mongodb://localhost:27017/pulse',
},
}),
NotificationsModule,
],
providers: [],
})
export class AppModule {}
`
##### notification.module.ts
`typescript
// src/notification/notification.module.ts
import { Module } from '@nestjs/common';
import { PulseModule } from '@pulsecron/nestjs-pulse';
import { NotificationsQueue } from './notification.processor';
@Module({
imports: [
PulseModule.registerQueue('notifications', {
processEvery: '1 minutes',
autoStart: false, // default: true
}),
],
providers: [NotificationsQueue],
exports: [],
})
export class NotificationsModule {}
`
##### notification.processor.ts
`typescript
// src/notification/notification.processor.ts
import { Job } from '@pulsecron/pulse';
import { Every, Queue, Define, Schedule } from '@pulsecron/nestjs-pulse';
@Queue('notifications')
export class NotificationsQueue {
@Every({ name: 'send notifications', interval: '1 minutes' })
async sendNotifications(job: Job) {
console.log('Sending notifications[1]');
}
@Schedule({ name: 'send notifications', when: 'tomorrow at noon' })
async sendNotifications(job: Job) {
console.log('Sending notifications[2]');
}
@Now()
async sendNotifications(job: Job) {
console.log('Sending notifications[3]');
}
@Define({ name: 'emailJob' })
async test(job: Job) {
console.log('Sending email to:', job.data.to);
}
}
`
##### notification.service.ts
`typescript
import { Inject, Injectable } from '@nestjs/common';
import { Pulse } from '@pulsecron/pulse';
@Injectable()
export class NotificationService {
constructor(@Inject('notifications') private pulse: Pulse) {}
async scheduleEmail(email: string) {
const emailJob = this.pulse.create('emailJob', { to: email });
emailJob.unique(
{
'data.to': email,
},
{
insertOnly: true,
}
);
emailJob.schedule('5 seconds').save();
}
}
`
---
Contributions are welcome! Here are several ways you can contribute:
- Report Issues: Submit bugs found or log feature requests for the pulse project.
- Submit Pull Requests: Review open PRs, and submit your own PRs.
- Join the Discussions: Share your insights, provide feedback, or ask questions.
Contributing Guidelines
1. Fork the Repository: Start by forking the project repository to your github account.
2. Clone Locally: Clone the forked repository to your local machine using a git client.
`sh`
git clone https://github.com/pulsecron/nestjs-pulse
3. Create a New Branch: Always work on a new branch, giving it a descriptive name.
`sh`
git checkout -b new-feature-x
4. Make Your Changes: Develop and test your changes locally.
5. Commit Your Changes: Commit with a clear message describing your updates.
`sh`
git commit -m 'Implemented new feature x.'
6. Push to github: Push the changes to your forked repository.
`sh``
git push origin new-feature-x
7. Submit a Pull Request: Create a PR against the original project repository. Clearly describe the changes and their motivations.
8. Review: Once your PR is reviewed and approved, it will be merged into the main branch. Congratulations on your contribution!
---
This project is protected under the MIT License. For more details, refer to the LICENSE file.
---