Files
SDS-CRM/server/lib/merge-attachment-events.js
2026-03-23 02:09:14 +01:00

52 lines
1.5 KiB
JavaScript

/**
* Mehrere ATTACHMENT-Events pro Ticket und Kalendertag (lokal) zu einem Event zusammenführen.
*/
export function mergeLegacyAttachmentEventsByDay(db) {
const rows = db
.prepare(
`SELECT id, ticket_id, created_at, description,
date(created_at, 'localtime') AS day_key
FROM events
WHERE type = 'ATTACHMENT'
ORDER BY ticket_id, day_key, created_at ASC`,
)
.all();
/** @type {Map<string, Array<{id: string, description: string}>>} */
const groups = new Map();
for (const r of rows) {
const k = `${r.ticket_id}|${r.day_key}`;
if (!groups.has(k)) groups.set(k, []);
groups.get(k).push({ id: r.id, description: r.description || '' });
}
for (const [, evs] of groups) {
if (evs.length <= 1) continue;
const keeper = evs[0].id;
const others = evs.slice(1);
const descParts = evs
.map((e) => String(e.description || '').trim())
.filter(Boolean);
const mergedDesc = [...new Set(descParts)].join('\n\n');
db.exec('BEGIN');
try {
db.prepare('UPDATE events SET description = ? WHERE id = ?').run(
mergedDesc,
keeper,
);
for (const o of others) {
db.prepare('UPDATE ticket_attachments SET event_id = ? WHERE event_id = ?').run(
keeper,
o.id,
);
db.prepare('DELETE FROM events WHERE id = ?').run(o.id);
}
db.exec('COMMIT');
} catch (e) {
db.exec('ROLLBACK');
throw e;
}
}
}