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:
parent
58b427fcd0
commit
446aada9c8
8 changed files with 161 additions and 8 deletions
|
|
@ -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');
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue