id(); // Dati anagrafici $table->string('name'); // Ragione sociale / nome $table->string('email')->unique(); // Email (univoca) $table->string('phone', 50)->nullable(); // Telefono $table->string('city', 100)->nullable(); // Città $table->string('address')->nullable(); // Indirizzo completo $table->string('vat_number', 20)->nullable(); // Partita IVA $table->string('fiscal_code', 20)->nullable(); // Codice fiscale // Tipo cliente: "privato" o "azienda" // enum() limita i valori accettati a livello DB $table->enum('type', ['privato', 'azienda'])->default('azienda'); // Stato nel ciclo di vita commerciale $table->enum('status', ['attivo', 'inattivo', 'prospect'])->default('prospect'); // Dati commerciali $table->decimal('contract_value', 10, 2)->default(0); // Valore contratto annuo $table->text('notes')->nullable(); // Note libere // timestamps(): crea created_at e updated_at (gestiti automaticamente da Eloquent) $table->timestamps(); // softDeletes(): aggiunge colonna deleted_at per il Soft Delete // I clienti "eliminati" hanno deleted_at valorizzato, non sono rimossi dal DB $table->softDeletes(); // Indici per velocizzare le ricerche più comuni $table->index('status'); $table->index('type'); $table->index('city'); }); } // down(): eseguita da "php artisan migrate:rollback" → annulla la migration public function down(): void { Schema::dropIfExists('customers'); } };