v403: Bugfix Archivierung + Task-Duplizieren

Zwei verwandte Frontend/Backend-Bugs behoben:

1. Archivierte Aufgaben liessen sich nicht wiederherstellen
   - Task war nie im Frontend-Store (Board laedt nur archived=0)
   - store.updateTask() ist no-op fuer unbekannte IDs
   - task:archived Socket-Event hatte keinen Frontend-Handler

   Fix: Backend emittiert/retourniert vollen Task, Frontend
   fuegt ihn via store.addTask ein, schliesst archive-modal,
   neuer sync.js-Handler haelt andere Clients in sync.

2. Dupliziertes Task verlor abgehakte Subtasks
   - INSERT INTO subtasks liess completed-Spalte weg -> Default 0
   - task_assignees wurden ueberhaupt nicht mitkopiert

   Fix: subtasks-INSERT um completed erweitert, task_assignees
   analog zu task_labels mitkopiert.

CACHE_VERSION 402 -> 403.
Dieser Commit ist enthalten in:
Server Deploy
2026-04-18 12:15:40 +02:00
Ursprung 4040b5f306
Commit ba8bef7680
6 geänderte Dateien mit 120 neuen und 13 gelöschten Zeilen

Datei anzeigen

@@ -163,6 +163,10 @@ class SyncManager {
this.handleTaskMoved(data);
});
this.socket.on('task:archived', (data) => {
this.handleTaskArchived(data);
});
this.socket.on('label:created', (data) => {
this.handleLabelCreated(data);
});
@@ -369,6 +373,27 @@ class SyncManager {
store.moveTask(taskId, columnId, position);
}
handleTaskArchived(data) {
const { id, archived, task, userId } = data;
if (userId && userId === store.get('currentUser')?.id) return;
if (archived) {
// Archivieren: aus Board-Sicht entfernen (Task bleibt in DB)
store.removeTask(id);
} else {
// Wiederherstellen: Task zurück in den Store bringen
if (task) {
const existing = store.getTaskById ? store.getTaskById(id) : null;
if (existing) {
store.updateTask(id, { ...task, archived: false });
} else {
store.addTask({ ...task, archived: false });
}
}
}
}
handleLabelCreated(data) {
const { label, userId } = data;