diff --git a/src/bot/commands/task.ts b/src/bot/commands/task.ts index 630684b..f58dddf 100644 --- a/src/bot/commands/task.ts +++ b/src/bot/commands/task.ts @@ -107,12 +107,19 @@ export function handleTaskCommand(body: string, sender: string, groupId: string, return; } - completeTask(taskId); + const completedTask = completeTask(taskId, sender); // 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 - if (task.createdBy && task.createdBy !== sender) { - sendMessage(task.createdBy, `✅ Tarea ${taskId} completada por @${sender.split('@')[0]}: ${task.description}`); + if (completedTask.createdBy && completedTask.createdBy !== sender) { + 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) { console.error('Error completing task:', error); diff --git a/src/services/taskService.ts b/src/services/taskService.ts index 6130392..4450e5f 100644 --- a/src/services/taskService.ts +++ b/src/services/taskService.ts @@ -43,11 +43,29 @@ export function assignTask(taskId: number, assignedTo: string) { } // Mark a task as completed -export function completeTask(taskId: number) { - execute( - 'UPDATE tasks SET completed = TRUE WHERE id = ?', +export function completeTask(taskId: number, completedBy: string) { + const task = getTaskById(taskId); + 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] ); + + 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)