vendure-cron-plugin
Version:
Adds a simple CRON functionality to Vendure
98 lines (74 loc) • 2.87 kB
Markdown
Adds a simple CRON functionality to Vendure. This can be used to run functions regularly, like checking shipment apis, raise prices every month, export data etc.
The Vendure Cron Plugin provides the ability to run specified tasks at specific times, using cron-style scheduling. **This plugin works by firing events at predefined intervals, which you can subscribe to.**
To use the plugin, the following steps should be taken:
1. Install the plugin with a package manager.
2. Add the plugin to the Vendure configuration file.
3. Define a taskId for your CronEvent, which you can use to identify the CronEvent.
4. Write a plugin which listens for the CronEvent and checks if the taskId matches.
```
export const config: VendureConfig = {
// ...
plugins: [
CronPlugin.init({
cron: [
{
schedule: '0 0 * * *',
taskId: 'midnightBackup'
},
{
schedule: '*/5 * * * *',
task: () => {
console.log('Running task every 5 minutes');
}
}
],
logEvents: true //Turn on the logging whenever an event is fired (for debugging)
}),
]
}
```
For more information on the scheduling, visit the [node-cron](https://github.com/kelektiv/node-cron) docs.
```
import { OnApplicationBootstrap } from '@nestjs/common';
import { PluginCommonModule, VendurePlugin, EventBus } from '@vendure/core';
import { CronEvent } from 'vendure-cron-plugin';
@VendurePlugin({
imports: [PluginCommonModule],
})
export class YourPlugin implements OnApplicationBootstrap {
constructor(private eventBus: EventBus) {}
async onApplicationBootstrap() {
this.eventBus
.ofType(CronEvent)
.pipe(filter(event => event.taskId === "task1"))
.subscribe((event) => {
console.log(`Cron Event "${event.taskId}" fired`);
const ctx = event.ctx;
// Perform any tasks here in response to the fired event
});
}
}
```
A development server is configured in the `dev-server` folder, using [Docker](https://www.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) to spin up a Postgres database, as well as a server and worker. This is used to test the plugin during development.
To start the server, run:
```bash
yarn dev:run
```
To populate or reset the database, run the following command:
```bash
yarn dev:populate
```
To restart the server (only) after a change, use the following command:
```bash
yarn dev:restart
```
Note: The Docker containers must be rebuilt when updating dependencies. Use the following command:
```bash
yarn dev:rebuild
```