diff --git a/src/tasks/service.ts b/src/tasks/service.ts index 743e9cb..eaa6ac0 100644 --- a/src/tasks/service.ts +++ b/src/tasks/service.ts @@ -1,5 +1,5 @@ import type { Database } from 'bun:sqlite'; -import { db } from '../db'; +import { db, ensureUserExists } from '../db'; type CreateTaskInput = { description: string; @@ -23,11 +23,16 @@ export class TaskService { VALUES (?, ?, ?, ?) `); + const ensuredCreator = ensureUserExists(task.created_by, this.dbInstance); + if (!ensuredCreator) { + throw new Error('No se pudo asegurar created_by'); + } + const runResult = insertTask.run( task.description, task.due_date ?? null, task.group_id ?? null, - task.created_by + ensuredCreator ); const taskId = Number((runResult as any).lastInsertRowid); @@ -37,12 +42,18 @@ export class TaskService { VALUES (?, ?, ?) `); - // Evitar duplicados por (task_id, user_id) + // Evitar duplicados por (task_id, user_id) tras asegurar usuarios const seen = new Set(); for (const a of assignments) { - if (seen.has(a.user_id)) continue; - seen.add(a.user_id); - insertAssignment.run(taskId, a.user_id, a.assigned_by); + const ensuredUser = ensureUserExists(a.user_id, this.dbInstance); + if (!ensuredUser) continue; + if (seen.has(ensuredUser)) continue; + seen.add(ensuredUser); + + const ensuredAssigner = + ensureUserExists(a.assigned_by || ensuredCreator, this.dbInstance) || ensuredCreator; + + insertAssignment.run(taskId, ensuredUser, ensuredAssigner); } }