feat: Add task completion validation and enhanced notifications

main
brobert (aider) 3 months ago
parent 5a44e73106
commit 6d968b6208

@ -107,12 +107,19 @@ export function handleTaskCommand(body: string, sender: string, groupId: string,
return; return;
} }
completeTask(taskId); const completedTask = completeTask(taskId, sender);
// Send confirmation privately to the user who completed // Send confirmation privately to the user who completed
sendMessage(sender, `✅ Tarea ${taskId} completada: ${task.description}`); sendMessage(sender, `✅ Tarea completada:\n` +
`ID: ${completedTask.id}\n` +
`Descripción: ${completedTask.description}\n` +
`Completada el: ${completedTask.completedAt}`);
// Notify the task creator if different from completer // Notify the task creator if different from completer
if (task.createdBy && task.createdBy !== sender) { if (completedTask.createdBy && completedTask.createdBy !== sender) {
sendMessage(task.createdBy, `✅ Tarea ${taskId} completada por @${sender.split('@')[0]}: ${task.description}`); sendMessage(completedTask.createdBy, `✅ Tarea completada por @${sender.split('@')[0]}:\n` +
`ID: ${completedTask.id}\n` +
`Descripción: ${completedTask.description}\n` +
`Completada el: ${completedTask.completedAt}`);
} }
} catch (error) { } catch (error) {
console.error('Error completing task:', error); console.error('Error completing task:', error);

@ -43,11 +43,29 @@ export function assignTask(taskId: number, assignedTo: string) {
} }
// Mark a task as completed // Mark a task as completed
export function completeTask(taskId: number) { export function completeTask(taskId: number, completedBy: string) {
execute( const task = getTaskById(taskId);
'UPDATE tasks SET completed = TRUE WHERE id = ?', if (!task) {
throw new Error('Tarea no encontrada');
}
// Only allow completion if task is assigned to the user or to no one
const currentUser = normalizeUserIdentifier(completedBy);
if (task.assignedTo && task.assignedTo !== currentUser) {
throw new Error('No puedes completar una tarea asignada a otro usuario');
}
const result = execute(
'UPDATE tasks SET completed = TRUE, completed_at = CURRENT_TIMESTAMP WHERE id = ?',
[taskId] [taskId]
); );
if (result.changes === 0) {
throw new Error('No se pudo completar la tarea');
}
// Return updated task with completion info
return getTaskById(taskId);
} }
// Get all tasks (for debugging or future use) // Get all tasks (for debugging or future use)

Loading…
Cancel
Save