Buchungskalender: Konfiguration, Schalter, Schema und Setup-Skript
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
18369a348c
commit
5717a5cdd0
7 files changed
+728
No files matched your search
@@ -31,6 +31,7 @@ function nonNegativeNumber(raw, fallback) {
|
||||
|
||||
const termineEnabled = (process.env.TERMINE_ENABLED || '').trim().toLowerCase()
|
||||
const shopEnabled = (process.env.SHOP_ENABLED || '').trim().toLowerCase()
|
||||
const unterkunftEnabled = (process.env.UNTERKUNFT_ENABLED || '').trim().toLowerCase()
|
||||
const zeitenEnabled = (process.env.ZEITEN_ENABLED || '').trim().toLowerCase()
|
||||
|
||||
/** Komma-Liste aus einer Umgebungsvariablen: getrimmt, klein geschrieben, ohne Leereintraege; leer ergibt den Vorgabewert. */
|
||||
@@ -137,6 +138,16 @@ const shopSetup = {
|
||||
priceNickname: 'Webshop-Einrichtung 299 €',
|
||||
}
|
||||
|
||||
// Buchungskalender (Funktionsschluessel 'unterkunft'): einmalige Einrichtung (Einmalpreis, kein Abo)
|
||||
const unterkunftSetup = {
|
||||
key: 'unterkunftSetup',
|
||||
name: 'Buchungskalender (Einrichtung)',
|
||||
amountCents: 19900,
|
||||
lookupKey: 'webklar_unterkunft_einrichtung_19900',
|
||||
oneTime: true,
|
||||
priceNickname: 'Buchungskalender-Einrichtung 199 €',
|
||||
}
|
||||
|
||||
// Oeffnungszeiten live: einmalige Einrichtung (Einmalpreis, kein Abo); im Wartungs-Abo ist die Funktion enthalten
|
||||
const zeitenSetup = {
|
||||
key: 'zeitenSetup',
|
||||
@@ -631,6 +642,13 @@ export const config = {
|
||||
shopOrders: process.env.APPWRITE_COLLECTION_SHOP_ORDERS || 'shopOrders',
|
||||
shopWiderrufe: process.env.APPWRITE_COLLECTION_SHOP_WIDERRUFE || 'shopWiderrufe',
|
||||
shopRechtstexteArchiv: process.env.APPWRITE_COLLECTION_SHOP_RECHTSTEXTE_ARCHIV || 'shopRechtstexteArchiv',
|
||||
// Buchungskalender (Unterkuenfte, Preise, Sperren, Anfragen, Rechnungen, Einstellungen; scripts/unterkunft-setup.mjs)
|
||||
ukUnterkuenfte: process.env.APPWRITE_COLLECTION_UK_UNTERKUENFTE || 'ukUnterkuenfte',
|
||||
ukPreise: process.env.APPWRITE_COLLECTION_UK_PREISE || 'ukPreise',
|
||||
ukSperren: process.env.APPWRITE_COLLECTION_UK_SPERREN || 'ukSperren',
|
||||
ukAnfragen: process.env.APPWRITE_COLLECTION_UK_ANFRAGEN || 'ukAnfragen',
|
||||
ukRechnungen: process.env.APPWRITE_COLLECTION_UK_RECHNUNGEN || 'ukRechnungen',
|
||||
ukEinstellungen: process.env.APPWRITE_COLLECTION_UK_EINSTELLUNGEN || 'ukEinstellungen',
|
||||
// Oeffnungszeiten live (Einstellungen, Erinnerungsmerker; scripts/zeiten-setup.mjs)
|
||||
oeffnungszeiten: process.env.APPWRITE_COLLECTION_OEFFNUNGSZEITEN || 'oeffnungszeiten',
|
||||
zeitenErinnerungen: process.env.APPWRITE_COLLECTION_ZEITEN_ERINNERUNGEN || 'zeitenErinnerungen',
|
||||
@@ -651,6 +669,7 @@ export const config = {
|
||||
newsSetup,
|
||||
termineSetup,
|
||||
shopSetup,
|
||||
unterkunftSetup,
|
||||
zeitenSetup,
|
||||
ustHinweis,
|
||||
// Register der kaufbaren Funktionen (siehe oben)
|
||||
@@ -915,6 +934,47 @@ export const config = {
|
||||
unbezahltLoeschTage: 30,
|
||||
},
|
||||
|
||||
// Buchungskalender (Funktionsschluessel 'unterkunft'). Wird bei jedem Aufruf gelesen (Tests aendern die Werte zur
|
||||
// Laufzeit); Schalter siehe server/services/unterkunft/schalter.js
|
||||
unterkunft: {
|
||||
// off (Vorgabe) | pilot (nur UNTERKUNFT_PILOT_EMAILS) | on (alle Kunden)
|
||||
mode: ['pilot', 'on'].includes(unterkunftEnabled) ? unterkunftEnabled : 'off',
|
||||
// Kunden-E-Mails fuer den Pilotbetrieb; '*' = alle
|
||||
pilotEmails: (process.env.UNTERKUNFT_PILOT_EMAILS || '')
|
||||
.split(',')
|
||||
.map((s) => s.trim().toLowerCase())
|
||||
.filter(Boolean),
|
||||
// Fassung der Rechtstexte: Berliner Kalendertag (JJJJ-MM-TT); eine ausgelieferte Fassung wird nie ueberschrieben
|
||||
fassung: '2026-10-07',
|
||||
// Mindestzeit (Sekunden) zwischen Laden und Absenden des Anfrageformulars (schneller = Bot)
|
||||
formMinSekunden: nonNegativeNumber(process.env.UNTERKUNFT_FORM_MIN_SEKUNDEN, 3),
|
||||
// Kuerzeste Antwortzeit (ms) der POST-Routen der oeffentlichen Schnittstelle. Tests setzen 0.
|
||||
minAntwortMs: nonNegativeNumber(process.env.UNTERKUNFT_MIN_ANTWORT_MS, 300),
|
||||
// iCal-Import: Abrufintervall, Groessen-/Zeitgrenzen, Fehlermail nach so vielen Stunden anhaltenden Fehlern
|
||||
icalIntervallMin: 15,
|
||||
icalMaxBytes: 1_000_000,
|
||||
icalTimeoutMs: 10_000,
|
||||
icalFehlerStunden: 6,
|
||||
// Buchbar sind so viele Monate in die Zukunft
|
||||
horizontMonate: 18,
|
||||
maxPosten: 30,
|
||||
postenTextMax: 200,
|
||||
nachrichtMax: 2000,
|
||||
// Anfragen je Unterkunfts-Seite und Stunde (Missbrauchsbremse)
|
||||
anfragenJeSiteStunde: 30,
|
||||
// IP-Hashes werden nach so vielen Tagen geloescht
|
||||
ipHashTage: 30,
|
||||
// Unverbindliche Anfragen werden nach so vielen Monaten anonymisiert/geloescht
|
||||
unverbindlichMonate: 6,
|
||||
// Offene (neue) Anfragen verfallen nach so vielen Tagen
|
||||
neuVerfallTage: 60,
|
||||
// Anfragen werden so viele Jahre nach Abschluss anonymisiert; Rechnungen bleiben rechnungJahre Jahre
|
||||
anonymisierenJahre: 3,
|
||||
rechnungJahre: 8,
|
||||
// Tage nach Abschalten der Funktion bis zur Loeschung der Daten
|
||||
loeschTageNachAbschalten: 90,
|
||||
},
|
||||
|
||||
// Oeffnungszeiten live (Funktionsschluessel 'zeiten'); Geschwister von termine (termineSchalter.test.js pinnt
|
||||
// config.termine). Wird bei jedem Aufruf gelesen; Schalter siehe server/services/zeiten/schalter.js
|
||||
zeiten: {
|
||||
|
||||
Reference in new issue
Block a user