import dbHandler from "../db-handler"; import { quoteIdentifier } from "../../utils/sql-identifier"; import { QUEUE_NOW_SQL, requireQueueTable } from "./queue-utils"; /** * Take a `pending` job out of the queue without deleting it. Jobs a worker * has already claimed can't be cancelled. */ export default async function QueueCancel({ table, id, config, }) { try { requireQueueTable(table); const tableSql = quoteIdentifier(table); const res = await dbHandler({ query: `UPDATE ${tableSql} SET queue_status = 'cancelled', updated_at = ${QUEUE_NOW_SQL} WHERE id = ? AND queue_status = 'pending'`, values: [id], config, }); if (!res.success) { return { ...res, success: false }; } if (!res.db_res?.affectedRows) { return { ...res, success: false, msg: "Job is not pending", }; } return await dbHandler({ query: `SELECT * FROM ${tableSql} WHERE id = ?`, values: [id], config, }); } catch (error) { return { success: false, error: error.message, }; } }