# ๐Ÿ—๏ธ 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**