49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
import {Server, Socket} from "socket.io";
|
|
import db from "../../config/db";
|
|
import {SocketEvents} from "../events";
|
|
|
|
import {getLoggedInUserIdFromSocket, log_error, notifyProjectUpdates} from "../util";
|
|
|
|
export async function on_task_timer_stop(_io: Server, socket: Socket, data?: string) {
|
|
try {
|
|
const body = JSON.parse(data as string);
|
|
const userId = getLoggedInUserIdFromSocket(socket);
|
|
const q = `
|
|
DO
|
|
$$
|
|
DECLARE
|
|
_start_time TIMESTAMPTZ;
|
|
_time_spent NUMERIC;
|
|
BEGIN
|
|
|
|
SELECT start_time FROM task_timers WHERE user_id = '${userId}' AND task_id = '${body.task_id}' INTO _start_time;
|
|
|
|
_time_spent = COALESCE(EXTRACT(EPOCH FROM
|
|
(DATE_TRUNC('second', (CURRENT_TIMESTAMP - _start_time::TIMESTAMPTZ)))::INTERVAL),
|
|
0);
|
|
|
|
IF (_time_spent > 0)
|
|
THEN
|
|
INSERT INTO task_work_log (time_spent, task_id, user_id, logged_by_timer, created_at)
|
|
VALUES (_time_spent, '${body.task_id}', '${userId}', TRUE, _start_time);
|
|
END IF;
|
|
|
|
DELETE FROM task_timers WHERE user_id = '${userId}' AND task_id = '${body.task_id}';
|
|
END
|
|
$$;
|
|
`;
|
|
await db.query(q, []);
|
|
|
|
socket.emit(SocketEvents.TASK_TIMER_STOP.toString(), {
|
|
id: body.task_id,
|
|
parent_task: body.parent_task,
|
|
});
|
|
notifyProjectUpdates(socket, body.task_id);
|
|
return;
|
|
} catch (error) {
|
|
log_error(error);
|
|
}
|
|
|
|
socket.emit(SocketEvents.TASK_TIMER_STOP.toString(), null);
|
|
}
|