8.2 KiB
8.2 KiB
📊 DATABASE CONFIG E CONNESSIONI
Configurazione database NetGescon standard
🔑 CREDENZIALI DATABASE NETGESCON
Environment Produzione:
# 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:
-- 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:
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:
// 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:
// 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
'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:
// 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:
-- 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:
-- 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
// database/migrations/YYYY_MM_DD_create_{modulo}_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class Create{Modulo}Table extends Migration
{
public function up()
{
Schema::create('{modulo}', function (Blueprint $table) {
$table->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:
# Verifica servizio MySQL
sudo systemctl status mysql
sudo systemctl start mysql
# Verifica credenziali
mysql -u netgescon_user -p netgescon
2. Permessi Denied:
-- 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:
# Esegui migrations
cd /var/www/netgescon
php artisan migrate:status
php artisan migrate
4. Cache Database:
# 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