fix: persistir tarea con created_by y asignaciones en transacción

Co-authored-by: aider (openrouter/openai/gpt-5) <aider@aider.chat>
pull/1/head
borja 2 months ago
parent 06e661e844
commit 94f6813cb2

@ -1,36 +1,52 @@
import { db } from '../db'; import { db } from '../db';
import type { Task, TaskAssignment } from './model';
type CreateTaskInput = {
description: string;
due_date?: string | null; // Expect 'YYYY-MM-DD' or null
group_id?: string | null; // Full JID (e.g., 'xxx@g.us') or null
created_by: string; // Normalized user ID
};
type CreateAssignmentInput = {
user_id: string; // Normalized user ID
assigned_by: string; // Normalized user ID (typically created_by)
};
export class TaskService { export class TaskService {
static createTask(task: Omit<Task, 'id'>, assignments: Omit<TaskAssignment, 'task_id'>[]) { static createTask(task: CreateTaskInput, assignments: CreateAssignmentInput[] = []): number {
return db.transaction(() => { const runTx = db.transaction(() => {
const insertTask = db.prepare(` const insertTask = db.prepare(`
INSERT INTO tasks (description, due_date, group_id) INSERT INTO tasks (description, due_date, group_id, created_by)
VALUES (?, ?, ?) VALUES (?, ?, ?, ?)
RETURNING id RETURNING id
`); `);
const taskResult = insertTask.get( const taskResult = insertTask.get(
task.description, task.description,
task.due_date?.toISOString(), task.due_date ?? null,
task.group_id task.group_id ?? null,
task.created_by
) as { id: number }; ) as { id: number };
if (assignments.length > 0) {
const insertAssignment = db.prepare(` const insertAssignment = db.prepare(`
INSERT INTO task_assignments (task_id, user_id, assigned_by) INSERT INTO task_assignments (task_id, user_id, assigned_by)
VALUES (?, ?, ?) VALUES (?, ?, ?)
`); `);
assignments.forEach(assignment => { // Evitar duplicados por (task_id, user_id)
insertAssignment.run( const seen = new Set<string>();
taskResult.id, for (const a of assignments) {
assignment.user_id, if (seen.has(a.user_id)) continue;
assignment.assigned_by seen.add(a.user_id);
); insertAssignment.run(taskResult.id, a.user_id, a.assigned_by);
}); }
}
return taskResult.id; return taskResult.id;
}); });
return runTx();
} }
// We'll add more methods here as we progress // We'll add more methods here as we progress

Loading…
Cancel
Save