Refactor code structure for improved readability and maintainability

This commit is contained in:
2026-10-19 16:25:15 +02:00
parent 2ed2c0389d
commit a8aa6d9927
50 changed files with 1164 additions and 8 deletions
+78
View File
@@ -0,0 +1,78 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Facades\Storage;
class Modello extends Model
{
protected $table = 'modelli';
// Categorie usate dal configuratore (es. per scegliere altezza_maniglia_<categoria>.json).
public const CATEGORIE = [
'finestre' => 'Finestre',
'porte' => 'Porte',
'scorrevoli' => 'Scorrevoli',
'scuretti' => 'Scuretti',
'accessori' => 'Accessori',
];
// Moduli dati caricati dal configuratore per il modello.
public const MODULI = [
'listino' => 'Listino',
'modello' => 'Finiture',
'maniglia' => 'Maniglia',
'altezza_maniglia' => 'Altezza maniglia',
'vetro' => 'Vetro',
'cerniere' => 'Cerniere',
'telaio' => 'Telaio',
'avvolgibile' => 'Avvolgibile',
'select_finiture' => 'Select finiture',
];
protected $fillable = [
'sistema_id', 'codice', 'nome', 'descrizione', 'icona', 'ordine', 'attivo',
'cartella', 'file_modello', 'categoria', 'cartella_texture', 'moduli',
];
protected $casts = [
'ordine' => 'integer',
'attivo' => 'boolean',
'moduli' => 'array',
];
public function sistema(): BelongsTo
{
return $this->belongsTo(Sistema::class);
}
public function scopeAttivi(Builder $query): Builder
{
return $query->where('attivo', true)->orderBy('ordine')->orderBy('id');
}
public function getIconaUrlAttribute(): ?string
{
return $this->icona ? Storage::disk('public')->url($this->icona) : null;
}
protected static function booted(): void
{
// Rimuove il file dell'icona sostituita o del modello eliminato.
static::updated(function (Modello $modello): void {
$vecchia = $modello->getOriginal('icona');
if ($modello->wasChanged('icona') && $vecchia) {
Storage::disk('public')->delete($vecchia);
}
});
static::deleted(function (Modello $modello): void {
if ($modello->icona) {
Storage::disk('public')->delete($modello->icona);
}
});
}
}