# ๐Ÿ“Š DATABASE CONFIG E CONNESSIONI ## Configurazione database NetGescon standard --- ## ๐Ÿ”‘ **CREDENZIALI DATABASE NETGESCON** ### **Environment Produzione**: ```env # File: /var/www/netgescon/.env DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=netgescon DB_USERNAME=netgescon_user DB_PASSWORD=NetGescon2024! ``` ### **Paths Configurazione**: - **Laravel .env**: `/var/www/netgescon/.env` - **Database config**: `/var/www/netgescon/config/database.php` - **Migrations folder**: `/var/www/netgescon/database/migrations/` - **Seeders folder**: `/var/www/netgescon/database/seeders/` --- ## ๐Ÿ—„๏ธ **TABELLE CORE NETGESCON** ### **Schema Base Sempre Presente**: ```sql -- Tabelle fondamentali del sistema stabili ( id INT PRIMARY KEY, denominazione VARCHAR(255), indirizzo VARCHAR(255), amministratore_id INT, created_at TIMESTAMP, updated_at TIMESTAMP ) gestioni ( id_gestione INT PRIMARY KEY, stabile_id INT, anno_gestione YEAR, tipo_gestione VARCHAR(50), data_inizio DATE, data_fine DATE, created_at TIMESTAMP, updated_at TIMESTAMP ) unita_immobiliari ( id INT PRIMARY KEY, stabile_id INT, scala VARCHAR(10), piano VARCHAR(10), interno VARCHAR(10), denominazione VARCHAR(255), created_at TIMESTAMP, updated_at TIMESTAMP ) amministratori ( id INT PRIMARY KEY, nome VARCHAR(255), cognome VARCHAR(255), email VARCHAR(255), created_at TIMESTAMP, updated_at TIMESTAMP ) ``` --- ## ๐Ÿ“Š **PATTERN QUERY STANDARD** ### **Query Base per Listing**: ```php use Illuminate\Support\Facades\DB; // Pattern query con relazioni standard $items = DB::table('main_table') ->leftJoin('stabili', 'main_table.stabile_id', '=', 'stabili.id') ->leftJoin('gestioni', 'main_table.gestione_id', '=', 'gestioni.id_gestione') ->select([ 'main_table.*', 'stabili.denominazione as stabile_nome', 'gestioni.anno_gestione', 'gestioni.tipo_gestione' ]) ->where('stabili.amministratore_id', auth()->user()->amministratore_id ?? null) ->orderBy('main_table.created_at', 'desc') ->paginate(20); ``` ### **Query Statistiche per Cards**: ```php // Pattern stats query standard $stats = [ 'totale' => DB::table('main_table')->count(), 'questo_mese' => DB::table('main_table') ->whereMonth('created_at', now()->month) ->whereYear('created_at', now()->year) ->count(), 'attivi' => DB::table('main_table') ->where('stato', 'attivo') ->count(), 'problemi' => DB::table('main_table') ->where('stato', 'errore') ->orWhere('stato', 'sospeso') ->count() ]; ``` ### **Query con Filtro Amministratore**: ```php // IMPORTANTE: Sempre filtrare per amministratore $query = DB::table('main_table') ->join('stabili', 'main_table.stabile_id', '=', 'stabili.id') ->where('stabili.amministratore_id', auth()->user()->amministratore_id); // Se l'utente รจ super admin, non filtrare if (auth()->user()->is_super_admin ?? false) { $query = DB::table('main_table'); // Senza filtro } ``` --- ## ๐Ÿ”ง **CONFIGURAZIONE LARAVEL DATABASE** ### **File**: `/var/www/netgescon/config/database.php` ```php 'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'netgescon'), 'username' => env('DB_USERNAME', 'netgescon_user'), 'password' => env('DB_PASSWORD', 'NetGescon2024!'), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], ], ``` ### **Test Connessione Database**: ```php // In qualsiasi controller try { $connection = DB::connection(); $tables = DB::select('SHOW TABLES'); echo "Connessione DB: OK - Tabelle trovate: " . count($tables); } catch (\Exception $e) { echo "Errore DB: " . $e->getMessage(); } ``` --- ## ๐Ÿ—‚๏ธ **NAMING CONVENTION TABELLE** ### **Pattern Nomi Tabelle per Nuovi Moduli**: ```sql -- Modulo base {modulo} -- es: fornitori, gestioni {modulo}_categorie -- es: fornitori_categorie {modulo}_registrazioni -- es: contabilita_registrazioni {modulo}_configurazioni -- es: fornitori_configurazioni {modulo}_statistiche -- es: fornitori_statistiche -- Tabelle di relazione {modulo}_{altro_modulo} -- es: fornitori_stabili {modulo}_documenti -- es: fornitori_documenti ``` ### **Campi Standard per Ogni Tabella**: ```sql -- Campi obbligatori id INT PRIMARY KEY AUTO_INCREMENT created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Campi relazione (se applicabili) stabile_id INT -- Relazione con stabili gestione_id INT -- Relazione con gestioni amministratore_id INT -- Relazione con amministratori -- Campi audit (opzionali) created_by INT -- Chi ha creato updated_by INT -- Chi ha modificato deleted_at TIMESTAMP NULL -- Soft delete ``` --- ## ๐Ÿš€ **MIGRATION TEMPLATE STANDARD** ### **Template Nuova Tabella**: ```php id(); $table->string('denominazione'); $table->text('descrizione')->nullable(); $table->enum('stato', ['attivo', 'inattivo', 'sospeso'])->default('attivo'); // Relazioni standard $table->foreignId('stabile_id')->nullable()->constrained('stabili')->onDelete('cascade'); $table->foreignId('gestione_id')->nullable()->constrained('gestioni', 'id_gestione')->onDelete('cascade'); $table->integer('amministratore_id')->nullable(); // Audit fields $table->integer('created_by')->nullable(); $table->integer('updated_by')->nullable(); $table->timestamps(); $table->softDeletes(); // Indexes $table->index(['stabile_id', 'stato']); $table->index('amministratore_id'); }); } public function down() { Schema::dropIfExists('{modulo}'); } } ``` --- ## ๐Ÿ” **TROUBLESHOOTING DATABASE** ### **Problemi Comuni e Soluzioni**: #### **1. Errore Connessione**: ```bash # Verifica servizio MySQL sudo systemctl status mysql sudo systemctl start mysql # Verifica credenziali mysql -u netgescon_user -p netgescon ``` #### **2. Permessi Denied**: ```sql -- Ricrea utente database DROP USER IF EXISTS 'netgescon_user'@'localhost'; CREATE USER 'netgescon_user'@'localhost' IDENTIFIED BY 'NetGescon2024!'; GRANT ALL PRIVILEGES ON netgescon.* TO 'netgescon_user'@'localhost'; FLUSH PRIVILEGES; ``` #### **3. Tabelle Non Trovate**: ```bash # Esegui migrations cd /var/www/netgescon php artisan migrate:status php artisan migrate ``` #### **4. Cache Database**: ```bash # Pulisci cache config php artisan config:clear php artisan config:cache ``` --- ## ๐Ÿ“‹ **CHECKLIST DATABASE** ### **Prima di Creare Nuovo Modulo**: - [ ] **Connessione DB** - Testata e funzionante - [ ] **Tabelle core** - Stabili, gestioni, unita_immobiliari esistenti - [ ] **Migration pronta** - Con naming convention - [ ] **Foreign keys** - Relazioni con tabelle esistenti - [ ] **Indexes** - Su campi di ricerca frequente - [ ] **Soft deletes** - Per preservare dati - [ ] **Audit fields** - Created_by, updated_by ### **Dopo Creazione Tabella**: - [ ] **Seeder dati test** - Per development - [ ] **Model Eloquent** - Con relazioni - [ ] **Factory** - Per testing automatico - [ ] **Backup schema** - Prima di modifiche --- ## ๐Ÿ”— **FILES COLLEGATI** ### **Aggiornare Anche**: - **Controller**: `04-controller-standard.md` โ†’ Metodi per query DB - **Model**: Creare Eloquent model corrispondente - **Routes**: Aggiungere route per nuovo modulo - **Seeder**: Dati iniziali per testing --- **๐Ÿ“– Prossimo file: `08-manuali-collegati.md`**