import { pool } from '../pool.js'; import { recordAudit } from './audit_stub.js'; export async function create({ space_id, project_id = null, title, body, priority, due_at, position }, actor) { const { rows: [r] } = await pool.query( `INSERT INTO tasks(space_id, project_id, title, body, priority, due_at, position) VALUES($1,$2,$3,$4,$5,$6,$7) RETURNING *`, [space_id, project_id, title, body || null, priority || null, due_at || null, position || null] ); await recordAudit(actor, 'create', 'task', r.id, null, r); return r; } export async function getById(id) { const { rows: [r] } = await pool.query(`SELECT * FROM tasks WHERE id=$1`, [id]); return r; } export async function listByProject(project_id) { const { rows } = await pool.query( `SELECT * FROM tasks WHERE project_id=$1 ORDER BY position NULLS LAST, created_at`, [project_id] ); return rows; } export async function listBySpace(space_id, { status } = {}) { const sql = status ? `SELECT * FROM tasks WHERE space_id=$1 AND status=$2 ORDER BY created_at` : `SELECT * FROM tasks WHERE space_id=$1 ORDER BY created_at`; const { rows } = await pool.query(sql, status ? [space_id, status] : [space_id]); return rows; } export async function update(id, patch, actor) { const before = await getById(id); const fields = ['title','body','status','priority','due_at','position','project_id']; const sets = [], vals = []; let i = 1; for (const f of fields) { if (patch[f] !== undefined) { sets.push(`${f}=$${i++}`); vals.push(patch[f]); } } if (patch.status === 'done') { sets.push(`completed_at=now()`); } sets.push(`updated_at=now()`); vals.push(id); const { rows: [r] } = await pool.query( `UPDATE tasks SET ${sets.join(', ')} WHERE id=$${i} RETURNING *`, vals ); await recordAudit(actor, 'update', 'task', id, before, r); return r; } export async function del(id, actor) { const before = await getById(id); await pool.query(`DELETE FROM tasks WHERE id=$1`, [id]); await recordAudit(actor, 'delete', 'task', id, before, null); }