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:
- Install the plugin with a package manager.
- Add the plugin to the Vendure configuration file.
- Define a taskId for your CronEvent, which you can use to identify the CronEvent.
- 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 docs.
import { OnApplicationBootstrap } from '@nestjs/common';
import { PluginCommonModule, VendurePlugin, EventBus } from '@vendure/core';
import { CronEvent } from 'vendure-cron-plugin';
import {filter} from "rxjs/operators";
@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 and Docker 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:
yarn dev:run
To populate or reset the database, run the following command:
yarn dev:populate
To restart the server (only) after a change, use the following command:
yarn dev:restart
Note: The Docker containers must be rebuilt when updating dependencies. Use the following command:
yarn dev:rebuild