Source: Router/job/delete.js

// @ts-check
/**
 * @import {ExpressRequestAuthorized, ExpressResponse} from '../../types.js'
 */
import  {query,UUID2hex,transaction} from '@commtool/sql-query'
import { parseTimestampToSeconds } from '../../utils/parseTimestamp.js'
import { errorLoggerUpdate } from '../../utils/requestLogger.js';
import { addUpdateList } from '../../server.ws.js';
import { queueAdd } from '../../tree/treeQueue/treeQueue.js';

/**
 * Deletes a job from the database.
 * 
 * @param {Object} req - Express request object.
 * @param {Object} req.query - The query parameters.
 * @param {number} [req.query.timestamp] - Optional timestamp for historical data access (time travel query).
 * @param {Object} req.params - URL parameters.
 * @param {string} req.params.UID - The unique identifier of the job to delete.
 * @param {Object} req.session - Session object.
 * @param {string} req.session.root - Root user UID.
 * @param {string} req.session.user - Current user UID.
 * 
 * @param {Object} res - Express response object.
 * @param {Function} res.json - Function to send JSON response.
 * 
 * @returns {Promise<void>} - A promise that resolves when the job is deleted.
 * @throws {Error} - Any errors during the deletion process are logged via errorLoggerUpdate.
 */
export const deleteJob =async (req,res)=>
    {
        try {
            const timestamp = parseTimestampToSeconds(req.query.timestamp ? String(req.query.timestamp) : undefined);
            const asOf=timestamp ? `FOR SYSTEM_TIME AS OF FROM_UNIXTIME(${timestamp})` : ''
            const UID=UUID2hex(req.params.UID)
            // get Job Data
            const [job]=await query(`SELECT ObjectBase.UID, ObjectBase.UIDBelongsTo AS user, Links.UIDTarget 
                FROM ObjectBase ${asOf} INNER JOIN Links ${asOf} ON
                (Links.UID=ObjectBase.UID AND Links.Type ='memberA')
                WHERE ObjectBase.UID =? AND ObjectBase.Type='job'`,[UID])
            if(job)
            {
                await transaction(async (connection)=>
                {
                    // delete Job. 
                    await connection.query(`DELETE FROM ObjectBase WHERE UID =? AND Type='job'`,[UID])
                    // delete memberA link. 
                    await connection.query(`DELETE FROM Links WHERE UID =? AND Type='memberA'`,[UID])
                
                },{backDate:timestamp})
                addUpdateList(job.user)
                queueAdd(UUID2hex(req.session.root),UUID2hex(req.session.user),'job',UID,job.user,job.UIDTarget,null,timestamp)
    
                res.json({success:true})
            }
            else
            {
                res.json({success:false, message:'job not found'})
            }
        }
        catch(e)
        {
            errorLoggerUpdate(e)
        }
    }