Paket-Vorteile: dynamische, im Admin pflegbare Vorteilsliste je Tarif

Neue JSON-Spalte plans.benefits (Migration + Cast + Plan::benefitsList()).
Im Admin (Tarife & Pakete) pro Tarif zeilenweise pflegbar; die In-App-
Buchungsseite rendert die Liste in den Tarif-Karten statt einer festen
Zeile. Seeder/Factory mit Beispiel-Vorteilen. Single Source of Truth fuer
Buchungsseite und (folgt separat) die oeffentliche Preise-Seite.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-06-18 16:36:09 +00:00
parent 58b427fcd0
commit 446aada9c8
8 changed files with 161 additions and 8 deletions

View file

@ -30,6 +30,7 @@ class Plan extends Model
'stripe_price_id_yearly',
'is_active',
'sort_order',
'benefits',
];
protected function casts(): array
@ -41,9 +42,25 @@ class Plan extends Model
'daily_limit' => 'integer',
'is_active' => 'boolean',
'sort_order' => 'integer',
'benefits' => 'array',
];
}
/**
* Gepflegte Vorteilsliste als bereinigtes String-Array (leere Zeilen
* entfernt). Single Source of Truth für Buchungsseite und Preise-Seite.
*
* @return list<string>
*/
public function benefitsList(): array
{
return collect($this->benefits ?? [])
->map(fn ($benefit): string => trim((string) $benefit))
->filter()
->values()
->all();
}
public function scopeActive(Builder $query): Builder
{
return $query->where('is_active', true)->orderBy('sort_order');