Files

40 lines
1.2 KiB
JavaScript

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,
};
}
}