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

@@ -1,5 +1,52 @@
TASKMATE - CHANGELOG
====================
================================================================================
18.04.2026 - v403 - Bugfix: Archivierung + Task-Duplizieren
================================================================================
PROBLEM
--------------------------------------------------------------------------------
1. Archivierte Aufgaben konnten nicht wiederhergestellt werden: Backend-Update
lief durch, aber das Board zeigte den Task nicht zurueck. Grund: Archivierte
Tasks sind nie im Frontend-Store (API filtert per Default archived=0), und
store.updateTask() ist ein No-op fuer unbekannte IDs. Ausserdem hatte der
Socket-Event 'task:archived' keinen Frontend-Handler, d. h. andere Clients
und Ansichten (Kalender, Liste, Mobile) blieben out-of-sync.
2. Beim Duplizieren gingen abgehakte Subtasks verloren: INSERT kopierte nur
(task_id, title, position) - das 'completed'-Feld fiel auf Schema-Default 0.
Zusaetzlich wurden task_assignees (Mehrfachzuweisungen) nicht mitkopiert.
LOESUNG
--------------------------------------------------------------------------------
Backend (backend/routes/tasks.js):
- Duplicate-Route: INSERT INTO subtasks erweitert um Spalte 'completed'
- Duplicate-Route: task_assignees analog zu task_labels mitkopieren
- Archive-Route: Vollstaendigen Task im Socket-Event mitschicken (task + userId)
- Archive-Route: res.json() liefert jetzt auch den aktualisierten Task zurueck
Frontend (frontend/js/sync.js):
- Neuer Socket-Handler 'task:archived': entfernt Task aus Board bei archiv=true,
fuegt ihn bei archiv=false via store.addTask/updateTask wieder ein
- Eigene UserID wird wie bei anderen Events ignoriert
Frontend (frontend/js/app.js, task-modal.js):
- app.restoreTask + handleRestore + showColumnSelectDialog: nutzen den vom
Backend zurueckgegebenen Task, um ihn in den Store einzupflegen statt nur
store.updateTask() zu rufen (welches bei nicht vorhandenen Tasks wirkungslos ist)
- handleRestore schliesst jetzt zusaetzlich das archive-modal via
'modal:close'-Event, damit der Nutzer den wiederhergestellten Task sofort
im Board sieht
- Neue Helper-Methode applyRestoredTask() im task-modal
Service Worker:
- CACHE_VERSION: 402 -> 403 (erzwingt Neulade der Frontend-Assets)
Geaenderte Dateien:
- backend/routes/tasks.js
- frontend/js/sync.js
- frontend/js/app.js
- frontend/js/task-modal.js
- frontend/sw.js
================================================================================
19.03.2026 - v402 - Assistent: Umbau auf Claude-Proxy (HTTP/SSE)