removed all references to credits. now credits are completely replaced by addons.
This commit is contained in:
@@ -4,29 +4,10 @@
|
||||
**Version:** 1.0
|
||||
**Autor:** Kilo Code (Architect Mode)
|
||||
**Status:** Finaler Plan für Review und Implementation in Code-Mode.
|
||||
**Ziel:** Ersetze das aktuelle Credits-basierte Freemium-Modell (One-off-Käufe via Stripe/RevenueCat, Balance-Checks) durch ein package-basiertes Modell mit vordefinierten Bündeln (Einmalkäufe pro Event für Endkunden, jährliche Subscriptions für Reseller/Agenturen). Der Plan deckt Analyse, Design, Änderungen in DB/Code/UI/Billing, Lücken und Rollout ab. Alle Details basieren auf User-Feedback und Best Practices für Laravel 12, Filament 4, React/Vite PWA.
|
||||
**Ziel:** Packages/Add-ons ersetzen das frühere Credits-Modell (Credits sind legacy/outdated). Der Plan deckt Analyse, Design, Änderungen in DB/Code/UI/Billing, Lücken und Rollout ab. Alle Details basieren auf User-Feedback und Best Practices für Laravel 12, Filament 4, React/Vite PWA.
|
||||
|
||||
## 1. Analyse des Aktuellen Modells
|
||||
Das bestehende Modell ist Credits-basiert (Freemium mit 1 Free-Credit, One-off-Käufen für Events). Subscriptions sind deferred (nicht implementiert).
|
||||
|
||||
### Betroffene Komponenten:
|
||||
- **DB:**
|
||||
- Felder: `event_credits_balance` (in `tenants`, default 1), `subscription_tier`/`subscription_expires_at` (in `tenants`).
|
||||
- Tabellen: `event_purchases` (Käufe), `event_credits_ledger` (Transaktionen), `purchase_history` (IAP-Historie).
|
||||
- **Code (Backend):**
|
||||
- Models: `Tenant::decrementCredits()`/`incrementCredits()`.
|
||||
- Controllers: `EventController` (Credit-Check bei Create), `CreditController` (Balance/Purchase).
|
||||
- Middleware: `CreditMiddleware` (prüft Balance >=1 für Events).
|
||||
- Filament: `TenantResource` (credits-Column, add_credits-Action), `PurchaseHistoryResource` (CRUD/Refund).
|
||||
- **API:** Endpunkte `/api/v1/tenant/credits/balance`, `/credits/ledger`, `/credits/purchase`, `/credits/sync`, `/purchases/intent`.
|
||||
- **Frontend (Admin PWA):** Dashboard-Cards für Balance, Kauf-Integration (RevenueCat).
|
||||
- **Guest PWA:** Keine direkten Checks (Backend-handhabt).
|
||||
- **Billing:** Stripe (Checkout/Webhooks), RevenueCat (IAP), PaddleWebhookController (teilweise).
|
||||
- **Tests:** `RevenueCatWebhookTest`, Credit-Unit-Tests.
|
||||
- **Docs:** PRP 08-billing.md (Credits-MVP), 14-freemium-business-model.md (IAP-Struktur), API-Specs (credits-Endpunkte).
|
||||
- **Lücken im Aktuellen:** Keine Package-Limits (nur Balance), Subscriptions nicht live, Paddle untergenutzt.
|
||||
|
||||
**Auswirkungen:** Vollständige Ersetzung, um Flexibilität (Limits/Features pro Package) zu ermöglichen.
|
||||
## 1. Analyse des Alt-Modells (Legacy Credits)
|
||||
Früheres Credits-Modell ist deprecated. Alle neuen Flows basieren auf Packages/Add-ons.
|
||||
|
||||
## 2. Neues Package-basiertes Modell
|
||||
Packages ersetzen Credits: Vordefinierte Bündel mit Limits/Features. Kauf bei Event-Create (Endkunden) oder Tenant-Upgrade (Reseller). Freemium: Free/Test-Paket für Einstieg.
|
||||
@@ -113,11 +94,8 @@ $table->timestamps();
|
||||
$table->index(['tenant_id', 'purchased_at']);
|
||||
```
|
||||
|
||||
### Migration-Strategie (php artisan make:migration migrate_to_packages)
|
||||
- **Schritt 1:** Neue Tabellen erstellen + Seeder für Standard-Packages (php artisan make:seeder PackageSeeder).
|
||||
- **Schritt 2:** Daten-Transfer (Artisan-Command packages:migrate):
|
||||
- Tenants: if event_credits_balance > 0 → Zuweisen zu Free-Paket (insert tenant_packages mit expires_at = now() + 30 days); alte Balance zu used_events konvertieren (z.B. balance / 100 = initial events).
|
||||
- Events: Bestehende Events zu Test-Paket migrieren (insert event_packages).
|
||||
### Migration-Strategie
|
||||
- Credits-Migration wird nicht mehr genutzt; Bestandsdaten auf Packages/Add-ons umstellen (event_credits_* Felder/Tables droppen).
|
||||
- Ledger: Transfer event_purchases zu package_purchases (map credits_added zu package_id = 'free').
|
||||
- **Schritt 3:** Alte Felder/Tabellen droppen (in separater Migration, nach Backup).
|
||||
- **Rollback:** php artisan migrate:rollback --step=3; Restore aus Backup.
|
||||
|
||||
Reference in New Issue
Block a user