netgescon-day0/docs/91-database/01-struttura-principale/README.md

118 lines
3.1 KiB
Markdown
Executable File

# 🏗️ STRUTTURA PRINCIPALE DATABASE
## Tabelle core del sistema NetGescon
---
## 🎯 **OBIETTIVO**
Definire le tabelle fondamentali del sistema con **architettura multi-tenant** basata su **codice amministratore di 8 cifre**.
---
## 📋 **TABELLE CORE IDENTIFICATE**
### **✅ 1. AMMINISTRATORI** - Tabella Master
- **Scopo**: Tabella principale con codice univoco 8 cifre
- **Caratteristiche**: Ogni amministratore ha la sua "bolla" di dati
- **File**: `amministratori.md`
### **✅ 2. USERS** - Utenti Sistema
- **Scopo**: Utenti collegati agli amministratori
- **Caratteristiche**: Ogni user appartiene a un amministratore
- **File**: `users.md`
### **✅ 3. ROLES & PERMISSIONS** - Sistema Ruoli
- **Scopo**: Gestione permessi multi-ruolo
- **Caratteristiche**: Spatie Laravel Permission
- **File**: `roles-permissions.md`
---
## 🗄️ **SCHEMA RELAZIONI CORE**
```sql
-- Schema semplificato relazioni principali
amministratori (id, codice_univoco)
(1:N)
users (id, amministratore_id)
(N:M via model_has_roles)
roles (id, name)
(N:M via role_has_permissions)
permissions (id, name)
-- Tutti i dati business collegati ad amministratori
amministratori (id, codice_univoco)
(1:N)
stabili (id, amministratore_id)
(1:N)
gestioni (id, stabile_id)
(1:N)
unita_immobiliari (id, stabile_id)
```
---
## 🔑 **PRINCIPI ARCHITETTURA**
### **🎯 Isolamento Dati**:
- Ogni amministratore vede **SOLO i suoi dati**
- Filtro automatico su `amministratore_id` in tutte le query
- Codice 8 cifre per identificazione univoca
### **🎯 Scalabilità**:
- Database single-tenant logico ma multi-tenant fisico
- Possibilità di estrarre dati singolo amministratore
- Backup/restore selettivo per amministratore
### **🎯 Sicurezza**:
- Nessun incrocio dati tra amministratori
- Foreign key constraints per integrità
- Audit trail con created_by/updated_by
---
## 🚀 **IMPLEMENTAZIONE**
### **Step 1**: Leggi File Dettagliati
1. **`amministratori.md`** → Struttura tabella master
2. **`users.md`** → Collegamento utenti-amministratori
3. **`roles-permissions.md`** → Sistema permessi
### **Step 2**: Crea Migrations
1. Amministratori (con codice 8 cifre + trigger)
2. Users (con foreign key amministratore_id)
3. Spatie permissions (roles, permissions, pivot tables)
### **Step 3**: Implementa Query Pattern
1. Sempre filtrare per amministratore_id
2. Join con tabella amministratori per codice
3. Middleware per controllo accesso
---
## 📊 **QUERY PATTERN ESEMPIO**
```php
// Laravel Controller pattern
class BaseController extends Controller
{
protected function getAmministratoreId()
{
return auth()->user()->amministratore_id;
}
protected function scopeForAmministratore($query)
{
return $query->where('amministratore_id', $this->getAmministratoreId());
}
}
// Esempio query stabili per amministratore loggato
$stabili = DB::table('stabili')
->where('amministratore_id', auth()->user()->amministratore_id)
->get();
```
---
**📖 Continua con `amministratori.md` per dettagli implementazione**