diff --git a/src/bot/commands/task.ts b/src/bot/commands/task.ts index a66a493..acf0793 100644 --- a/src/bot/commands/task.ts +++ b/src/bot/commands/task.ts @@ -20,9 +20,24 @@ export function handleTaskCommand(body: string, sender: string, groupId: string, .trim(); if (action === 'nueva') { - const finalAssignedUser = assignedUser || `@${sender.split('@')[0]}`; - const task = createTask(sender, cleanDescription, finalAssignedUser, dueDate); - sendMessage(sender, `Tarea creada: ${task.id} - ${task.description}${task.assignedTo ? ` asignada a ${task.assignedTo}` : ''}${task.dueDate ? ` para el ${task.dueDate}` : ''}`); + try { + const finalAssignedUser = assignedUser || `@${sender.split('@')[0]}`; + const task = createTask(sender, { + description: cleanDescription, + assignedTo: finalAssignedUser, + dueDate: dueDate || undefined + }); + + let message = `✅ Tarea creada:\nID: ${task.id}\nDescripción: ${task.description}`; + if (task.assignedTo) message += `\nAsignada a: ${task.assignedTo}`; + if (task.dueDate) message += `\nFecha límite: ${task.dueDate}`; + message += `\nCreada: ${task.createdAt}`; + + sendMessage(sender, message); + } catch (error) { + console.error('Error creating task:', error); + sendMessage(sender, `❌ Error al crear la tarea: ${error.message}`); + } } else if (action === 'asignar') { const taskId = args[0]; if (assignedUser) { diff --git a/src/models/task.ts b/src/models/task.ts index ed1eade..2a765dd 100644 --- a/src/models/task.ts +++ b/src/models/task.ts @@ -4,4 +4,19 @@ export interface Task { assignedTo: string | null; dueDate: string | null; completed: boolean; + createdAt: string; + updatedAt: string; +} + +export interface CreateTaskParams { + description: string; + assignedTo?: string; + dueDate?: string; +} + +export interface UpdateTaskParams { + description?: string; + assignedTo?: string; + dueDate?: string; + completed?: boolean; } diff --git a/src/services/taskService.ts b/src/services/taskService.ts index eb28ff9..d7a8c92 100644 --- a/src/services/taskService.ts +++ b/src/services/taskService.ts @@ -1,20 +1,30 @@ import { query, execute } from '../database/db'; // Create a new task -export function createTask(sender: string, description: string, assignedTo?: string, dueDate?: string) { +export function createTask(sender: string, params: CreateTaskParams) { + if (!params.description || params.description.trim().length < 3) { + throw new Error('La descripción de la tarea debe tener al menos 3 caracteres'); + } + + if (params.dueDate && !isValidDate(params.dueDate)) { + throw new Error('Fecha inválida. Use el formato YYYY-MM-DD'); + } + const result = execute( 'INSERT INTO tasks (description, assigned_to, due_date, completed) VALUES (?, ?, ?, ?)', - [description, assignedTo || null, dueDate || null, false] + [params.description.trim(), params.assignedTo || null, params.dueDate || null, false] ); - const taskId = result.lastInsertRowid; - return { - id: taskId, - description, - assignedTo: assignedTo || null, - dueDate: dueDate || null, - completed: false, - }; + const task = getTaskById(result.lastInsertRowid); + if (!task) { + throw new Error('Error al crear la tarea'); + } + return task; +} + +function isValidDate(dateString: string): boolean { + const date = new Date(dateString); + return !isNaN(date.getTime()); } // Assign a task