presseportale/app/Models/RejectionCategory.php
Kevin Adametz 0bec71ffa5 Ablehnungskategorien live aus der DB (rejection_categories)
/richtlinien rendert jetzt alle aktiven Kategorien aus der neuen
rejection_categories-Tabelle (stabiler code als Anker, public_label/desc,
optionale Beispiele) statt der statischen K1-K6-Liste. Kategorien werden
nie geloescht, nur deaktiviert; neue Kategorien erscheinen ohne
Textaenderung und ohne neue AGB-Version (AGB par. 7 Abs. 3 verweist nicht
abschliessend). Seeder legt K1-K6 idempotent an; Versionszeile der Seite
kommt aus legal_documents. Go-Live-Checkliste um beide Seeder ergaenzt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 09:25:16 +00:00

59 lines
1.5 KiB
PHP

<?php
namespace App\Models;
use Database\Factories\RejectionCategoryFactory;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
/**
* Ablehnungskategorie der Inhaltsprüfung (Richtlinien v0.1, AGB § 7 Abs. 3).
*
* Der `code` (K1, K2, …) ist stabil und wird in Ablehnungs-Begründungen
* referenziert; die öffentliche Richtlinien-Seite rendert alle aktiven
* Kategorien als Anker-Abschnitte. Kategorien werden nie gelöscht, nur
* deaktiviert (`active = false`).
*/
class RejectionCategory extends Model
{
/** @use HasFactory<RejectionCategoryFactory> */
use HasFactory;
protected $fillable = [
'code',
'public_label',
'public_desc',
'examples',
'severity',
'rubric_ref',
'active',
'sort_order',
];
protected function casts(): array
{
return [
'active' => 'boolean',
'sort_order' => 'integer',
];
}
/**
* @param Builder<RejectionCategory> $query
* @return Builder<RejectionCategory>
*/
public function scopeActive(Builder $query): Builder
{
return $query->where('active', true);
}
/**
* @param Builder<RejectionCategory> $query
* @return Builder<RejectionCategory>
*/
public function scopeOrdered(Builder $query): Builder
{
return $query->orderBy('sort_order')->orderBy('code');
}
}