Stripe: Einmalpreis News-Einrichtung 30 €
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
85bee3190c
commit
16fbb03c13
4 files changed
+43
-8
No files matched your search
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Stripe-Preise je Produkt (Wartungs-Abo, Hosting-Abo, E-Mail-Zusatzspeicher): legt fehlende
|
||||
* Stripe-Preise je Produkt (Wartungs-Abo, Hosting-Abo, E-Mail-Zusatzspeicher, News-Einrichtung als Einmalpreis): legt fehlende
|
||||
* Preise an (ensurePrice), haelt die Wartungs-Produktbeschreibung bei Stripe auf dem Katalogtext
|
||||
* (server/config.js) und passt die Kundenportal-Konfiguration an ("WEBklar – Abo verwalten").
|
||||
* Idempotent: vorhandene Preise werden ueber lookup_key gefunden, nicht neu angelegt.
|
||||
@@ -17,7 +17,7 @@ import { config } from '../server/config.js'
|
||||
import { ensurePortalConfiguration, ensurePrice, getStripe, PORTAL_HEADLINE } from '../server/services/stripeBilling.js'
|
||||
import { PRODUCT_KEYS } from '../server/services/products.js'
|
||||
|
||||
const KEYS = [...PRODUCT_KEYS, 'mailStorage'] // ['wartung', 'hosting', 'mailStorage']
|
||||
const KEYS = [...PRODUCT_KEYS, 'mailStorage', 'newsSetup'] // ['wartung', 'hosting', 'mailStorage', 'newsSetup']
|
||||
const USAGE = 'Usage: node scripts/stripe-products.mjs --pruefen | --anlegen'
|
||||
|
||||
export function parseArgs(argv) {
|
||||
@@ -28,7 +28,9 @@ export function parseArgs(argv) {
|
||||
}
|
||||
|
||||
function catalogEntry(key) {
|
||||
return key === 'mailStorage' ? config.mailStorage : config.products[key]
|
||||
if (key === 'mailStorage') return config.mailStorage
|
||||
if (key === 'newsSetup') return config.newsSetup
|
||||
return config.products[key]
|
||||
}
|
||||
|
||||
async function findPrice(lookupKey) {
|
||||
@@ -42,7 +44,9 @@ async function checkPrice(key) {
|
||||
if (!price) return { ok: false, note: `Preis ${catalog.lookupKey} fehlt bei Stripe` }
|
||||
const mismatches = []
|
||||
if (price.unit_amount !== catalog.amountCents) mismatches.push(`Betrag ${price.unit_amount} statt ${catalog.amountCents}`)
|
||||
if (price.recurring?.interval !== 'month') mismatches.push(`recurring.interval "${price.recurring?.interval}" statt "month"`)
|
||||
if (catalog.oneTime) {
|
||||
if (price.recurring) mismatches.push('Preis ist wiederkehrend statt einmalig')
|
||||
} else if (price.recurring?.interval !== 'month') mismatches.push(`recurring.interval "${price.recurring?.interval}" statt "month"`)
|
||||
if (price.tax_behavior !== 'inclusive') mismatches.push(`tax_behavior "${price.tax_behavior}" statt "inclusive"`)
|
||||
// Important 2: Produkt ohne Bild faellt in --pruefen auf (Checkout zeigt sonst kein Bild)
|
||||
const productId = typeof price.product === 'string' ? price.product : price.product?.id
|
||||
|
||||
Reference in new issue
Block a user