// /home/def/IPFSapp/backend/routes/delete-file.js // Marks a file "cancelled" (does not unpin from IPFS) export default function registerDeleteFile(app, _opts = {}) { app.post('/api/files/delete', async (req, res) => { try { const { query } = await import('pg'); } catch {} const poolMod = await import('pg'); const pool = new poolMod.Pool({ connectionString: process.env.DATABASE_URL }); const sql = (q, p = []) => pool.query(q, p); const b = req.body || {}; const byQuote = Number.isFinite(Number(b.quoteId)) ? Number(b.quoteId) : null; const byCid = (b.cid || '').toString() || null; let r; if (byQuote) { r = await sql(`UPDATE payments SET status='cancelled' WHERE quote_id=$1 RETURNING quote_id`, [byQuote]); } else if (byCid) { r = await sql(`UPDATE payments SET status='cancelled' WHERE cid=$1 RETURNING quote_id`, [byCid]); } else if (b.address && b.filename && b.createdAt) { r = await sql( `UPDATE payments SET status='cancelled' WHERE lower(address)=lower($1) AND filename=$2 AND created_at=$3 RETURNING quote_id`, [b.address, b.filename, b.createdAt] ); } else { return res.status(400).json({ ok: false, error: 'selector required (quoteId or cid or address+filename+createdAt)' }); } if (r.rowCount === 0) return res.status(404).json({ ok: false, error: 'not found' }); res.json({ ok: true, deleted: r.rows[0].quote_id }); }); }