- shop/jobs.js: taeglicherJob (Käuferdaten bezahlter Bestellungen und Widerrufe 3 Jahre nach Ende des Bestelljahres anonymisieren, Grenze 1. Januar Berlin; unbezahlte/stornierte Bestellungen nach 30 Tagen löschen; Shops seit 90 Tagen disabled samt Artikeln, Bestellungen, Widerrufen, Bildern und shopConfig löschen, Funktionsdokument bleibt disabled mit Vermerk), seitenweise mit Deckel je Lauf, Schritte und Dokumente einzeln abgesichert; stuendlicherJob räumt nie beanspruchte Bilder auf - shop/loeschen.js: gemeinsamer Baustein zum Löschen aller Daten eines Shops (Tagesjob und Löschfristen) - shop/kundenLoeschung.js + customerAdmin.js: Kundenlöschung schaltet den Webshop ab (kunde_geloescht) und schließt die Shops - retention.js: fällige Kunden verlieren auch ihre Shopdaten (vor den Abo-Dokumenten, bei Fehler held) - server/index.js: Minuten- (75 s), Stunden- (130 s) und Tagesjob (200 s) registriert - Tests: shopJobs.test.js, retention.test.js erweitert Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
27 lines
1.1 KiB
JavaScript
27 lines
1.1 KiB
JavaScript
import { config } from '../../config.js'
|
|
import { listAllDocuments, Query, updateDocument } from '../appwriteAdmin.js'
|
|
import { leereCache } from './kontext.js'
|
|
|
|
/**
|
|
* Kundenloeschung (Plan 2026-10-05-webshop.md, J3): schliesst alle Shops des Kunden (shopConfig.geoeffnet=false) und leert den
|
|
* Speicher der oeffentlichen Schnittstelle. Die Funktion selbst schaltet disableCustomerFeatures ab; die Daten loescht der Tagesjob
|
|
* (shop/jobs.js) 90 Tage nach dem Abschalten. Scheitert ein Shop, werden die uebrigen trotzdem geschlossen und der erste Fehler weitergereicht.
|
|
* @returns {Promise<number>} Zahl der geschlossenen Shops
|
|
*/
|
|
export async function schliesseShopsVonKunde(customerId) {
|
|
const shops = await listAllDocuments(config.collections.shopConfig, [Query.equal('customerId', customerId)])
|
|
let geschlossen = 0
|
|
let erster = null
|
|
for (const shop of shops) {
|
|
try {
|
|
if (shop.geoeffnet !== false) await updateDocument(config.collections.shopConfig, shop.$id, { geoeffnet: false })
|
|
geschlossen += 1
|
|
} catch (err) {
|
|
erster ||= err
|
|
}
|
|
leereCache(shop.siteKey || undefined)
|
|
}
|
|
if (erster) throw erster
|
|
return geschlossen
|
|
}
|