mirror of
https://github.com/xtr-dev/payload-automation.git
synced 2025-12-10 08:53:23 +00:00
56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import type {Payload} from 'payload'
|
|
|
|
import {updateWorkflowCronJobs, removeWorkflowCronJobs} from './cron-scheduler.js'
|
|
|
|
/**
|
|
* Initialize hooks for the workflows collection itself
|
|
* to manage cron jobs when workflows are created/updated
|
|
*/
|
|
export function initWorkflowHooks(payload: Payload, logger: Payload['logger']): void {
|
|
// Add afterChange hook to workflows collection to update cron jobs
|
|
const workflowsCollection = payload.collections.workflows
|
|
|
|
if (!workflowsCollection) {
|
|
logger.warn('Workflows collection not found, cannot initialize workflow hooks')
|
|
return
|
|
}
|
|
|
|
// Add afterChange hook to register/update cron jobs
|
|
if (!workflowsCollection.config.hooks?.afterChange) {
|
|
if (!workflowsCollection.config.hooks) {
|
|
// @ts-expect-error - hooks object will be populated by Payload
|
|
workflowsCollection.config.hooks = {}
|
|
}
|
|
workflowsCollection.config.hooks.afterChange = []
|
|
}
|
|
|
|
workflowsCollection.config.hooks.afterChange.push(async ({ doc, operation }) => {
|
|
if (operation === 'create' || operation === 'update') {
|
|
logger.debug({
|
|
operation,
|
|
workflowId: doc.id,
|
|
workflowName: doc.name
|
|
}, 'Workflow changed, updating cron jobs selectively')
|
|
|
|
// Update cron jobs for this specific workflow only
|
|
await updateWorkflowCronJobs(doc.id, payload, logger)
|
|
}
|
|
})
|
|
|
|
// Add afterDelete hook to clean up cron jobs
|
|
if (!workflowsCollection.config.hooks?.afterDelete) {
|
|
workflowsCollection.config.hooks.afterDelete = []
|
|
}
|
|
|
|
workflowsCollection.config.hooks.afterDelete.push(async ({ doc }) => {
|
|
logger.debug({
|
|
workflowId: doc.id,
|
|
workflowName: doc.name
|
|
}, 'Workflow deleted, removing cron jobs')
|
|
|
|
// Remove cron jobs for the deleted workflow
|
|
removeWorkflowCronJobs(doc.id, payload, logger)
|
|
})
|
|
|
|
logger.info('Workflow hooks initialized for cron job management')
|
|
} |