c7a4c8bfd4
Boost-Geschaeftslogik (Decision-Update 2.2)
...
Bezahlte Platzierung gruener, veroeffentlichter PMs ueber die Credit-Wallet:
- boosts Tabelle (Zeitraum starts_at/ends_at, days, credits_charged)
- BoostService: Gate (nur Published + Green), Preis nach Laufzeit
(7/14/30 -> 12/20/35 Credits), Mehrfachkauf verlaengert vom laufenden
Ende, Wallet-Belastung referenziert den Boost im Ledger
- PressRelease::boosts()/isBoosted()/scopeBoosted() als Basis fuer die
Featured-Platzierung (Frontend-Anbindung bleibt der Web-Strecke ueberlassen)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:22:12 +00:00
3e8844245d
Pruefzaehler + Pruefkontingent (Decision-Update Phase-2 vorgezogen)
...
Eigener Pruef-Zaehler, getrennt von der Credit-Wallet (Paragraph 4.2/4.3):
- review_checks Ledger (eine Zeile je Pruefung, source free|credit,
charged_credits), aggregiert pro Account/Monat statt pro PM
- ReviewCheckService: Tageslimit (harte Bremse, nicht freikaufbar) ->
Monats-Freikontingent (tier-gestaffelt 4/12/30/60/120) -> Overflow
zieht 1 Credit/Pruefung aus der Wallet
- ReviewLimitException fuer das erreichte Tageslimit
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:19:37 +00:00
b63cd26326
Credit-Wallet + Ledger + Tier-Preisableitung (Fundament)
...
Echte Credit-Wallet (1 Credit = 1 EUR) mit append-only Ledger als Basis fuer
die Credit-Oekonomie aus dem Decision-Update (Rev. 4):
- credit_wallets (denormalisierter Saldo) + credit_transactions (Ledger,
vorzeichenbehaftet, balance_after, polymorphe reference)
- CreditWalletService: einziger Schreibpfad, atomar mit Row-Lock,
InsufficientCreditsException mit shortfall fuer den Mini-Checkout
- Tier-Enum (Einzel/Starter/Business/Pro/Agency) + User::currentTier()
- CreditPricingService: tier-gestaffelte Ableitung aus config/credits.php
(Extra-PM 19/15/12/10/8, Boost 12/20/35, PDF 3, Depublish 25, Pruef-Quota)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:16:43 +00:00