// @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)
}
}