From 383d3a630d3e1faa068ca9f6e53afcc08e4b6c90 Mon Sep 17 00:00:00 2001 From: AV77web Date: Mon, 22 Jun 2026 13:41:47 +0200 Subject: [PATCH] modifica a init/01_schema.sql --- initdb/01_schema.sql | 141 ++++++++++++++++++------------------------- 1 file changed, 59 insertions(+), 82 deletions(-) diff --git a/initdb/01_schema.sql b/initdb/01_schema.sql index 32ad79a..02e8961 100644 --- a/initdb/01_schema.sql +++ b/initdb/01_schema.sql @@ -6,20 +6,20 @@ USE corrieri; -- ------------------------------------------------------------ --- Tabella operatore (API: GET/POST/PUT/DELETE /operatori) +-- Tabella utenti (API: GET/POST/PUT/DELETE /operatori) -- ------------------------------------------------------------ CREATE TABLE IF NOT EXISTS operatore ( - OperatoreID INT UNSIGNED NOT NULL AUTO_INCREMENT, + UtenteID INT UNSIGNED NOT NULL AUTO_INCREMENT, Nome VARCHAR(100) NOT NULL, Cognome VARCHAR(100) NOT NULL, Email VARCHAR(255) NOT NULL, PasswordHash VARCHAR(255) NOT NULL COMMENT 'Password salvata come hash (es. bcrypt)', - Admin BOOLEAN NOT NULL DEFAULT FALSE, + Ruolo ENUM("Amministratore", "Operatore") NOT NULL DEFAULT Operatore, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (OperatoreID), - UNIQUE KEY uk_operatore_email (Email) + PRIMARY KEY (UtenteID), + UNIQUE KEY uk_utente_email (Email) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; @@ -32,6 +32,8 @@ CREATE TABLE IF NOT EXISTS cliente ( ClienteID INT UNSIGNED NOT NULL AUTO_INCREMENT, Nome VARCHAR(100) NOT NULL, Cognome VARCHAR(100) NOT NULL, + Comune VARCHAR(100) NOT NULL, + Provincia VARCHAR(2) NOT NULL, Telefono VARCHAR(30) NOT NULL, Email VARCHAR(255) NOT NULL, Note TEXT, @@ -45,55 +47,30 @@ CREATE TABLE IF NOT EXISTS cliente ( COLLATE=utf8mb4_unicode_ci; --- ------------------------------------------------------------- --- Tabella camposportivo (API: GET/POST/PUT/DELETE /campi) --- ------------------------------------------------------------- -CREATE TABLE IF NOT EXISTS camposportivo ( - CampoID INT UNSIGNED NOT NULL AUTO_INCREMENT, - Nome VARCHAR(100) NOT NULL, - Tipo ENUM('tennis', 'padel', 'calcetto') NOT NULL, - Coperto BOOLEAN NOT NULL DEFAULT FALSE, - PrezzoOrario DECIMAL(10, 2) NOT NULL, - Attivo BOOLEAN NOT NULL DEFAULT TRUE, - - PRIMARY KEY (CampoID), - UNIQUE KEY uk_camposportivo_nome (Nome) -) ENGINE=InnoDB - DEFAULT CHARSET=utf8mb4 - COLLATE=utf8mb4_unicode_ci; - - -- ---------------------------------------------------------------- --- Tabella prenotazione (API: GET/POST/PUT/DELETE /prenotazioni) +-- Tabella consegna (API: GET/POST/PUT/DELETE /prenotazioni) -- ---------------------------------------------------------------- -CREATE TABLE IF NOT EXISTS prenotazione ( - PrenotazioneID INT UNSIGNED NOT NULL AUTO_INCREMENT, - Data DATE NOT NULL, - OraInizio TIME NOT NULL, - OraFine TIME NOT NULL, - Stato ENUM('prenotata', 'confermata', 'annullata', 'completata') NOT NULL DEFAULT 'prenotata', - CodicePrenotazione VARCHAR(8) NOT NULL, +CREATE TABLE IF NOT EXISTS consegna ( + ConsegnaID INT UNSIGNED NOT NULL AUTO_INCREMENT, ClienteID INT UNSIGNED NOT NULL, - CampoID INT UNSIGNED NOT NULL, + DataRitiro DATE NOT NULL, + DataConsegna DATE NOT NULL, + Stato ENUM('da ritirare', 'in deposito', 'in consegna', 'in giacenza') NOT NULL DEFAULT 'in deposito', + ChiaveConsegna VARCHAR(8) NOT NULL, - PRIMARY KEY (PrenotazioneID), - UNIQUE KEY uk_prenotazione_codice (CodicePrenotazione), - KEY idx_prenotazione_campo_data (CampoID, Data), + PRIMARY KEY (ConsegnaID), + UNIQUE KEY uk_chiaveConsegna (ChiaveConsegna), + KEY idx_DataConsegna ( DataConsegna), - CONSTRAINT ck_prenotazione_orario_valido - CHECK (OraFine > OraInizio), + #CONSTRAINT ck_prenotazione_orario_valido + # CHECK (OraFine > OraInizio), - CONSTRAINT fk_prenotazione_cliente + CONSTRAINT fk_consegna_cliente FOREIGN KEY (ClienteID) REFERENCES cliente (ClienteID) ON UPDATE CASCADE ON DELETE RESTRICT, - CONSTRAINT fk_prenotazione_campo - FOREIGN KEY (CampoID) - REFERENCES camposportivo (CampoID) - ON UPDATE CASCADE - ON DELETE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; @@ -103,46 +80,46 @@ CREATE TABLE IF NOT EXISTS prenotazione ( -- Trigger anti-sovrapposizione (stesso campo, stessa data) -- Le prenotazioni annullate non occupano lo slot. -- ---------------------------------------------------------------- -DROP TRIGGER IF EXISTS trg_prenotazione_no_overlap_insert; -DROP TRIGGER IF EXISTS trg_prenotazione_no_overlap_update; +#DROP TRIGGER IF EXISTS trg_prenotazione_no_overlap_insert; +#DROP TRIGGER IF EXISTS trg_prenotazione_no_overlap_update; -DELIMITER $$ +#DELIMITER $$ -CREATE TRIGGER trg_prenotazione_no_overlap_insert -BEFORE INSERT ON corrieri -FOR EACH ROW -BEGIN - IF NEW.Stato <> 'annullata' AND EXISTS ( - SELECT 1 - FROM corrieri AS p - WHERE p.CampoID = NEW.CampoID - AND p.Data = NEW.Data - AND p.Stato <> 'annullata' - AND NEW.OraInizio < p.OraFine - AND p.OraInizio < NEW.OraFine - ) THEN - SIGNAL SQLSTATE '45000' - SET MESSAGE_TEXT = 'Sovrapposizione: esiste già una prenotazione attiva in questo orario per il campo selezionato'; - END IF; -END$$ +#CREATE TRIGGER trg_prenotazione_no_overlap_insert +#BEFORE INSERT ON corrieri +#FOR EACH ROW +#BEGIN +# IF NEW.Stato <> 'annullata' AND EXISTS ( +# SELECT 1 +# FROM corrieri AS p +# WHERE p.CampoID = NEW.CampoID +# AND p.Data = NEW.Data +# AND p.Stato <> 'annullata' +# AND NEW.OraInizio < p.OraFine +# AND p.OraInizio < NEW.OraFine +# ) THEN +# SIGNAL SQLSTATE '45000' +# SET MESSAGE_TEXT = 'Sovrapposizione: esiste già una prenotazione attiva in questo orario per il campo selezionato'; +# END IF; +#END$$ -CREATE TRIGGER trg_prenotazione_no_overlap_update -BEFORE UPDATE ON corrieri -FOR EACH ROW -BEGIN - IF NEW.Stato <> 'annullata' AND EXISTS ( - SELECT 1 - FROM corrieri AS p - WHERE p.PrenotazioneID <> NEW.PrenotazioneID - AND p.CampoID = NEW.CampoID - AND p.Data = NEW.Data - AND p.Stato <> 'annullata' - AND NEW.OraInizio < p.OraFine - AND p.OraInizio < NEW.OraFine - ) THEN - SIGNAL SQLSTATE '45000' - SET MESSAGE_TEXT = 'Sovrapposizione: esiste già una prenotazione attiva in questo orario per il campo selezionato'; - END IF; -END$$ +#CREATE TRIGGER trg_prenotazione_no_overlap_update +#BEFORE UPDATE ON corrieri +#FOR EACH ROW +#BEGIN +# IF NEW.Stato <> 'annullata' AND EXISTS ( +# SELECT 1 +# FROM corrieri AS p +# WHERE p.PrenotazioneID <> NEW.PrenotazioneID +# AND p.CampoID = NEW.CampoID +# AND p.Data = NEW.Data +# AND p.Stato <> 'annullata' +# AND NEW.OraInizio < p.OraFine +# AND p.OraInizio < NEW.OraFine +# ) THEN +# SIGNAL SQLSTATE '45000' +# SET MESSAGE_TEXT = 'Sovrapposizione: esiste già una prenotazione attiva in questo orario per il campo selezionato'; +# END IF; +#END$$ -DELIMITER ; +#DELIMITER ;