Primo rilascio

This commit is contained in:
2026-03-07 00:15:59 +01:00
commit dd5282dd69
609 changed files with 75246 additions and 0 deletions

118
backend/database/schema.sql Normal file
View File

@@ -0,0 +1,118 @@
-- Tabella per le Strutture (Sedi dell'asilo nido)
CREATE TABLE structures (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL COMMENT 'Nome della struttura',
address VARCHAR(255) NULL COMMENT 'Indirizzo',
city VARCHAR(100) NULL COMMENT 'Città',
province VARCHAR(100) NULL COMMENT 'Provincia',
zip_code VARCHAR(10) NULL COMMENT 'CAP',
phone VARCHAR(50) NULL COMMENT 'Numero di telefono',
email VARCHAR(255) NULL COMMENT 'Indirizzo email',
notes TEXT NULL COMMENT 'Note aggiuntive',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Tabella per gli Insegnanti
CREATE TABLE teachers (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL COMMENT 'Nome',
last_name VARCHAR(100) NOT NULL COMMENT 'Cognome',
email VARCHAR(255) UNIQUE NULL COMMENT 'Email (opzionale, ma unica se presente)',
phone VARCHAR(50) NULL COMMENT 'Telefono',
date_of_birth DATE NULL COMMENT 'Data di nascita',
hire_date DATE NULL COMMENT 'Data di assunzione',
qualifications TEXT NULL COMMENT 'Qualifiche o note',
is_active BOOLEAN DEFAULT true COMMENT 'Indica se l''insegnante è attualmente attivo',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Tabella per gli Anni Scolastici
CREATE TABLE school_years (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL UNIQUE COMMENT 'Nome anno scolastico (es. 2024/2025)',
start_date DATE NOT NULL COMMENT 'Data inizio anno scolastico',
end_date DATE NOT NULL COMMENT 'Data fine anno scolastico',
is_active BOOLEAN DEFAULT false COMMENT 'Indica se è l''anno scolastico corrente/attivo',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT chk_dates CHECK (end_date > start_date) -- Assicura che la fine sia dopo l'inizio
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Tabella per i Contratti degli Insegnanti
CREATE TABLE teacher_contracts (
id INT AUTO_INCREMENT PRIMARY KEY,
teacher_id INT NOT NULL COMMENT 'FK a teachers',
school_year_id INT NOT NULL COMMENT 'FK a school_years',
structure_id INT NULL COMMENT 'FK a structures (opzionale, se il contratto è specifico per una struttura)',
contract_type VARCHAR(100) NULL COMMENT 'Tipo di contratto (es. Tempo Indeterminato, Tempo Determinato, Collaborazione)',
start_date DATE NOT NULL COMMENT 'Data inizio validità contratto',
end_date DATE NULL COMMENT 'Data fine validità contratto (NULL se indeterminato)',
weekly_hours DECIMAL(5, 2) NULL COMMENT 'Ore settimanali previste',
salary DECIMAL(10, 2) NULL COMMENT 'Stipendio lordo (mensile/annuale a seconda delle policy)',
notes TEXT NULL COMMENT 'Note aggiuntive sul contratto',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (teacher_id) REFERENCES teachers(id) ON DELETE CASCADE, -- Se elimino un insegnante, elimino i suoi contratti
FOREIGN KEY (school_year_id) REFERENCES school_years(id) ON DELETE RESTRICT, -- Non posso eliminare un anno scolastico se ha contratti
FOREIGN KEY (structure_id) REFERENCES structures(id) ON DELETE SET NULL, -- Se elimino una struttura, il contratto rimane ma senza struttura associata
UNIQUE KEY unique_teacher_year (teacher_id, school_year_id) -- Un insegnante può avere un solo contratto per anno scolastico? (Da valutare)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Tabella per i Bambini
CREATE TABLE children (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL COMMENT 'Nome',
last_name VARCHAR(100) NOT NULL COMMENT 'Cognome',
date_of_birth DATE NOT NULL COMMENT 'Data di nascita',
enrollment_date DATE NOT NULL COMMENT 'Data di iscrizione',
structure_id INT NULL COMMENT 'FK a structures (struttura di appartenenza principale)',
parent1_name VARCHAR(200) NULL COMMENT 'Nome Genitore 1 / Contatto Principale',
parent1_phone VARCHAR(50) NULL COMMENT 'Telefono Genitore 1',
parent1_email VARCHAR(255) NULL COMMENT 'Email Genitore 1',
parent2_name VARCHAR(200) NULL COMMENT 'Nome Genitore 2 / Contatto Secondario',
parent2_phone VARCHAR(50) NULL COMMENT 'Telefono Genitore 2',
parent2_email VARCHAR(255) NULL COMMENT 'Email Genitore 2',
address VARCHAR(255) NULL COMMENT 'Indirizzo residenza',
city VARCHAR(100) NULL COMMENT 'Città residenza',
notes TEXT NULL COMMENT 'Note (allergie, esigenze particolari, etc.)',
is_active BOOLEAN DEFAULT true COMMENT 'Indica se l''iscrizione è attualmente attiva',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (structure_id) REFERENCES structures(id) ON DELETE SET NULL -- Se elimino struttura, il bambino rimane ma senza struttura
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Tabella per le Definizioni dei Turni Standard
CREATE TABLE shift_definitions (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL UNIQUE COMMENT 'Nome del turno (es. Mattina, Pomeriggio)',
start_time TIME NOT NULL COMMENT 'Orario di inizio previsto',
end_time TIME NOT NULL COMMENT 'Orario di fine previsto',
notes TEXT NULL COMMENT 'Note aggiuntive',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
-- Potremmo aggiungere un flag 'is_default' o 'is_active' se necessario
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Tabella per gli Utenti (Admin, Operator)
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL COMMENT 'Nome e Cognome utente',
email VARCHAR(255) NOT NULL UNIQUE COMMENT 'Email per login',
password VARCHAR(255) NOT NULL COMMENT 'Password hashata',
role ENUM('admin', 'operator') NOT NULL DEFAULT 'operator' COMMENT 'Ruolo utente',
structure_id INT NULL COMMENT 'FK a structures (se operatore è legato a una struttura specifica)',
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (structure_id) REFERENCES structures(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Aggiungi qui le altre tabelle (actual_shifts, etc.)
-- man mano che le definiamo.
-- Aggiungi qui le altre tabelle (children, shifts, users, etc.)
-- man mano che le definiamo.