import { pool } from '../pool.js'; import { recordAudit } from './audit_stub.js'; export async function create({ space_id, slug, name, description, status = 'active', started_at }, actor) { const { rows: [r] } = await pool.query( `INSERT INTO projects(space_id, slug, name, description, status, started_at) VALUES($1,$2,$3,$4,$5,$6) RETURNING *`, [space_id, slug, name, description || null, status, started_at || null] ); await recordAudit(actor, 'create', 'project', r.id, null, r); return r; } export async function getById(id) { const { rows: [r] } = await pool.query(`SELECT * FROM projects WHERE id=$1`, [id]); return r; } export async function listBySpace(space_id, { status } = {}) { const sql = status ? `SELECT * FROM projects WHERE space_id=$1 AND status=$2 ORDER BY name` : `SELECT * FROM projects WHERE space_id=$1 ORDER BY name`; const args = status ? [space_id, status] : [space_id]; const { rows } = await pool.query(sql, args); return rows; } export async function update(id, patch, actor) { const before = await getById(id); const fields = ['slug','name','description','status','started_at','completed_at']; const sets = [], vals = []; let i = 1; for (const f of fields) { if (patch[f] !== undefined) { sets.push(`${f}=$${i++}`); vals.push(patch[f]); } } sets.push(`updated_at=now()`); vals.push(id); const { rows: [r] } = await pool.query( `UPDATE projects SET ${sets.join(', ')} WHERE id=$${i} RETURNING *`, vals ); await recordAudit(actor, 'update', 'project', id, before, r); return r; } export async function del(id, actor) { const before = await getById(id); await pool.query(`DELETE FROM projects WHERE id=$1`, [id]); await recordAudit(actor, 'delete', 'project', id, before, null); }