tududi/backend/modules/tasks/utils/logging.js
Chris 542be2c1e9
Fix bug 366 (#764)
* Optimize DB

* Clean up names

* fixup! Clean up names

* fixup! fixup! Clean up names
2026-01-07 18:18:07 +02:00

116 lines
3.7 KiB
JavaScript

const { logError } = require('../../../services/logService');
const { logTaskUpdate, logEvent } = require('../taskEventService');
function captureOldValues(task) {
return {
name: task.name,
status: task.status,
priority: task.priority,
due_date: task.due_date,
defer_until: task.defer_until,
project_id: task.project_id,
note: task.note,
recurrence_type: task.recurrence_type,
recurrence_interval: task.recurrence_interval,
recurrence_end_date: task.recurrence_end_date,
recurrence_weekday: task.recurrence_weekday,
recurrence_month_day: task.recurrence_month_day,
recurrence_week_of_month: task.recurrence_week_of_month,
completion_based: task.completion_based,
tags: task.Tags
? task.Tags.map((tag) => ({ id: tag.id, name: tag.name }))
: [],
};
}
async function logTaskChanges(task, oldValues, reqBody, tagsData, userId) {
try {
const changes = {};
const fields = [
'name',
'status',
'priority',
'project_id',
'note',
'recurrence_type',
'recurrence_interval',
'recurrence_end_date',
'recurrence_weekday',
'recurrence_month_day',
'recurrence_week_of_month',
'completion_based',
];
fields.forEach((field) => {
if (
reqBody[field] !== undefined &&
reqBody[field] !== oldValues[field]
) {
changes[field] = {
oldValue: oldValues[field],
newValue: reqBody[field],
};
}
});
if (reqBody.due_date !== undefined) {
const oldDateStr = oldValues.due_date
? oldValues.due_date.toISOString().split('T')[0]
: null;
const newDateStr = reqBody.due_date || null;
if (oldDateStr !== newDateStr) {
changes.due_date = {
oldValue: oldValues.due_date,
newValue: reqBody.due_date,
};
}
}
if (reqBody.defer_until !== undefined) {
const oldDeferStr = oldValues.defer_until
? oldValues.defer_until.toISOString()
: null;
const newDeferStr = reqBody.defer_until || null;
if (oldDeferStr !== newDeferStr) {
changes.defer_until = {
oldValue: oldValues.defer_until,
newValue: reqBody.defer_until,
};
}
}
if (Object.keys(changes).length > 0) {
await logTaskUpdate(task.id, userId, changes, { source: 'web' });
}
if (tagsData) {
const newTags = tagsData.map((tag) => ({
id: tag.id,
name: tag.name,
}));
const oldTagNames = oldValues.tags.map((tag) => tag.name).sort();
const newTagNames = newTags.map((tag) => tag.name).sort();
if (JSON.stringify(oldTagNames) !== JSON.stringify(newTagNames)) {
await logEvent({
taskId: task.id,
userId: userId,
eventType: 'tags_changed',
fieldName: 'tags',
oldValue: oldValues.tags,
newValue: newTags,
metadata: { source: 'web', action: 'tags_update' },
});
}
}
} catch (eventError) {
logError('Error logging task update events:', eventError);
}
}
module.exports = {
captureOldValues,
logTaskChanges,
};