116 lines
3.7 KiB
JavaScript
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,
|
|
};
|