esameits24-26backend/scripts/apply-academy-schema.sql
AV77web 3e94fdb6d9
All checks were successful
Deploy to VPS / build (push) Successful in 16s
Deploy to VPS / deploy (push) Successful in 18s
commit per adattare il data model alla web app Academy aziendale
2026-07-14 10:31:30 +02:00

68 lines
3 KiB
SQL

-- ============================================================
-- Migrazione manuale per database già inizializzati
-- Eseguire se il volume MySQL esisteva prima dell'aggiornamento schema Academy.
-- ============================================================
USE `esameits24-26`;
-- Allinea enum ruoli utente (se la tabella esisteva con valori precedenti)
ALTER TABLE utente
MODIFY Ruolo ENUM('Dipendente', 'Referente Academy') NOT NULL DEFAULT 'Dipendente';
UPDATE utente SET Ruolo = 'Referente Academy' WHERE Ruolo IN ('Amministratore', 'Refernete Academy');
UPDATE utente SET Ruolo = 'Dipendente' WHERE Ruolo = 'Operatore';
-- Catalogo corsi
CREATE TABLE IF NOT EXISTS corso (
CorsoID INT UNSIGNED NOT NULL AUTO_INCREMENT,
Titolo VARCHAR(200) NOT NULL,
Descrizione TEXT NULL,
Categoria VARCHAR(100) NOT NULL,
DurataOre SMALLINT UNSIGNED NOT NULL,
Obbligatorio TINYINT(1) NOT NULL DEFAULT 0,
Attivo TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (CorsoID),
KEY idx_corso_categoria (Categoria),
KEY idx_corso_attivo (Attivo),
CONSTRAINT chk_corso_durata_ore CHECK (DurataOre > 0)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
-- Assegnazioni corsi
CREATE TABLE IF NOT EXISTS assegnazione_corso (
AssegnazioneID INT UNSIGNED NOT NULL AUTO_INCREMENT,
CorsoID INT UNSIGNED NOT NULL,
DipendenteID INT UNSIGNED NOT NULL,
DataAssegnazione DATE NOT NULL,
DataScadenza DATE NOT NULL,
Stato ENUM('Assegnato', 'Completato', 'Scaduto', 'Annullato') NOT NULL DEFAULT 'Assegnato',
DataCompletamento DATE NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (AssegnazioneID),
KEY idx_assegnazione_corso (CorsoID),
KEY idx_assegnazione_dipendente (DipendenteID),
KEY idx_assegnazione_stato (Stato),
KEY idx_assegnazione_data_assegnazione (DataAssegnazione),
KEY idx_assegnazione_data_scadenza (DataScadenza),
CONSTRAINT fk_assegnazione_corso
FOREIGN KEY (CorsoID) REFERENCES corso (CorsoID)
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT fk_assegnazione_dipendente
FOREIGN KEY (DipendenteID) REFERENCES utente (UtenteID)
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT chk_assegnazione_scadenza
CHECK (DataScadenza >= DataAssegnazione),
CONSTRAINT chk_assegnazione_completamento
CHECK (DataCompletamento IS NULL OR DataCompletamento >= DataAssegnazione),
CONSTRAINT chk_assegnazione_completato
CHECK (
(Stato = 'Completato' AND DataCompletamento IS NOT NULL)
OR (Stato <> 'Completato' AND DataCompletamento IS NULL)
)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;