Kundenansicht P5: Analyse im Abo-Modell (Hosting, Zielgruppe erzwungen, Nachweis, Tagesprüfung)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-16 16:14:35 +00:00
1 parent 23252df359
commit 57d5db2344
4 files changed
+271 -21

No files matched your search

+20
View File
@@ -1,5 +1,8 @@
import { config } from '../config.js'
import { getDocument } from './appwriteAdmin.js'
import { ACTIVE_STATUSES, getCurrentSubscription } from './stripeBilling.js'
import { listContractEvents, openWithdrawals } from './contractEvents.js'
import { neueAnsichtFuerKunde } from './kundenansicht/schalter.js'
/**
* Abo-Zuordnung der Funktionen (V5, Spec E3/E8): Welches Abo deckt welche Funktion? Ein Lesepfad (lies) fuer alle
@@ -87,3 +90,20 @@ export async function aboLaeuftFuer(customerId, key) {
const l = await lies(customerId, new Date())
return l.laeuft && ENTHALTEN_IN[key].includes(l.produkt)
}
/**
* Gehoert dieser Kunde zum Abo-Modell (sieht er die neue Ansicht)? Fuer Jobs und Dienste ohne Cookie (Tagespruefung der Analyse,
* Team-Aktivierung): liest das Kundendokument (kein Dokument: false) und fragt neueAnsichtFuerKunde({ customerId, email }). Nie
* neueAnsichtFuerSession: eine Sitzung braucht dort auch appwriteUserId, die ein Job nicht hat. Lesefehler werden weitergereicht.
*/
export async function aboModellFuerKunde(customerId) {
if (typeof customerId !== 'string' || customerId === '') return false
let kunde
try {
kunde = await getDocument(config.collections.customers, customerId)
} catch (err) {
if (err.status === 404) return false
throw err
}
return neueAnsichtFuerKunde({ customerId, email: kunde.email })
}