feat(akquise): Papierkorb fuer geloeschte Eintraege
Loeschen in der Akquise war ein echtes DELETE: der Eintrag stand danach in keiner Liste, auch nicht im Archiv, und war nicht zurueckholbar. Jetzt setzt es `deleted_at`/`deleted_by`, die Zeile bleibt 90 Tage stehen. Der Papierkorb ist die eine Ausnahme von der Regel, dass diese Tabelle keinen Zustand fuehrt: Loeschen von Hand ist eine Entscheidung, kein Ablauf. Was dort liegt, blenden alle anderen Abfragen ueber NOT_DELETED aus - Eingang, Archiv, Menuezahlen und Dashboard. Der Aufraeumlauf ueber `found_at` laesst geloeschte Zeilen ausdruecklich liegen, sonst waere ein alter Fund im Papierkorb sofort weg; der Papierkorb raeumt ab `deleted_at`. Zwei Rueckwege, deshalb zwei Routen. `/reopen` (bisher `/restore`) holt aus dem Archiv in den Eingang und setzt das Funddatum auf heute. `/restore` holt aus dem Papierkorb zurueck und laesst das Funddatum in Ruhe - der Eintrag soll dort auftauchen, wo er hingehoert, also im Archiv, wenn er alt ist. Die Meldung nennt das Ziel. Dazu `DELETE /:id/permanent` und `POST /trash/empty`. Im Papierkorb wird nicht gepflegt: Bearbeiten und Uebernehmen antworten 409. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f319b8207b
commit
6e66bd39d7
@@ -10,6 +10,10 @@
|
||||
*
|
||||
* Die Zeichenketten sind SQL-Bedingungen und erwarten die Aliase `a` fuer
|
||||
* crm_acquisitions und `opp` fuer die per LEFT JOIN angehaengte Opportunity.
|
||||
*
|
||||
* `NOT_DELETED` gehoert zu jeder dieser Abfragen dazu: der Papierkorb ist eine
|
||||
* dritte Liste, und was dort liegt, hat in Eingang, Archiv und Auswertung
|
||||
* nichts zu suchen.
|
||||
*/
|
||||
|
||||
/** Grenze zwischen Eingang und Archiv, in Tagen. */
|
||||
@@ -18,6 +22,19 @@ export const ARCHIVE_AFTER_DAYS = 14;
|
||||
/** Ab hier loescht das Archiv selbst. */
|
||||
export const DELETE_AFTER_DAYS = 90;
|
||||
|
||||
/** So lange liegt ein von Hand geloeschter Eintrag im Papierkorb. */
|
||||
export const TRASH_DELETE_AFTER_DAYS = 90;
|
||||
|
||||
/**
|
||||
* Nicht im Papierkorb. Steht in jeder Abfrage von Eingang, Archiv, Zaehlern und
|
||||
* Auswertung: ein geloeschter Eintrag ist ueberall weg, nur nicht in der
|
||||
* Datenbank.
|
||||
*/
|
||||
export const NOT_DELETED = 'a.deleted_at IS NULL';
|
||||
|
||||
/** Liegt im Papierkorb. */
|
||||
export const IN_TRASH = 'a.deleted_at IS NOT NULL';
|
||||
|
||||
/**
|
||||
* Die Opportunity zu einem Eintrag ist verschwunden - im Papierkorb oder
|
||||
* endgueltig geloescht. `opp.id IS NULL` deckt beides ab: nie uebernommen
|
||||
|
||||
Reference in New Issue
Block a user