refactor: improve task creation with validation, error handling, and timestamps

main
brobert (aider) 3 months ago
parent 90c146a18d
commit 8cddb8f4f0

@ -20,9 +20,24 @@ export function handleTaskCommand(body: string, sender: string, groupId: string,
.trim(); .trim();
if (action === 'nueva') { if (action === 'nueva') {
try {
const finalAssignedUser = assignedUser || `@${sender.split('@')[0]}`; const finalAssignedUser = assignedUser || `@${sender.split('@')[0]}`;
const task = createTask(sender, cleanDescription, finalAssignedUser, dueDate); const task = createTask(sender, {
sendMessage(sender, `Tarea creada: ${task.id} - ${task.description}${task.assignedTo ? ` asignada a ${task.assignedTo}` : ''}${task.dueDate ? ` para el ${task.dueDate}` : ''}`); 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') { } else if (action === 'asignar') {
const taskId = args[0]; const taskId = args[0];
if (assignedUser) { if (assignedUser) {

@ -4,4 +4,19 @@ export interface Task {
assignedTo: string | null; assignedTo: string | null;
dueDate: string | null; dueDate: string | null;
completed: boolean; 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;
} }

@ -1,20 +1,30 @@
import { query, execute } from '../database/db'; import { query, execute } from '../database/db';
// Create a new task // 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( const result = execute(
'INSERT INTO tasks (description, assigned_to, due_date, completed) VALUES (?, ?, ?, ?)', '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; const task = getTaskById(result.lastInsertRowid);
return { if (!task) {
id: taskId, throw new Error('Error al crear la tarea');
description, }
assignedTo: assignedTo || null, return task;
dueDate: dueDate || null, }
completed: false,
}; function isValidDate(dateString: string): boolean {
const date = new Date(dateString);
return !isNaN(date.getTime());
} }
// Assign a task // Assign a task

Loading…
Cancel
Save