From de33e6149600b138276f88c31f009f2433da00fd Mon Sep 17 00:00:00 2001 From: AV77web Date: Mon, 22 Jun 2026 15:56:39 +0200 Subject: [PATCH] corretto file 01_schema.sql --- initdb/01_schema.sql | 48 ++++++++++++++++++++++++++++++++++++++++++-- initdb/02_seed.sql | 16 ++++++++------- 2 files changed, 55 insertions(+), 9 deletions(-) diff --git a/initdb/01_schema.sql b/initdb/01_schema.sql index bb9bbf4..a42ddae 100644 --- a/initdb/01_schema.sql +++ b/initdb/01_schema.sql @@ -1,6 +1,6 @@ -- ============================================================ -- Schema tabelle – Gestione Corrieri --- Allineato alle API: /utenti, /clienti, /cd campi, /prenotazioni +-- Allineato alle API: /utenti, /clienti, /consegne -- ============================================================ USE corrieri; @@ -49,6 +49,8 @@ CREATE TABLE IF NOT EXISTS cliente ( -- ---------------------------------------------------------------- -- Tabella consegna (API: GET/POST/PUT/DELETE /consegna) +-- DataRitiro e DataConsegna sono eventi indipendenti: nessun vincolo +-- di ordine tra le due date, solo retroattività rispetto a oggi. -- ---------------------------------------------------------------- CREATE TABLE IF NOT EXISTS consegna ( ConsegnaID INT UNSIGNED NOT NULL AUTO_INCREMENT, @@ -60,7 +62,7 @@ CREATE TABLE IF NOT EXISTS consegna ( PRIMARY KEY (ConsegnaID), UNIQUE KEY uk_chiaveConsegna (ChiaveConsegna), - KEY idx_DataConsegna ( DataConsegna), + KEY idx_DataConsegna (DataConsegna), CONSTRAINT fk_consegna_cliente FOREIGN KEY (ClienteID) @@ -71,3 +73,45 @@ CREATE TABLE IF NOT EXISTS consegna ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + +-- ---------------------------------------------------------------- +-- Trigger retroattività date (DataRitiro e DataConsegna >= oggi) +-- CURDATE() non è ammesso nei CHECK: validazione dinamica nei trigger. +-- ---------------------------------------------------------------- +DROP TRIGGER IF EXISTS trg_consegna_no_retroattivita_insert; +DROP TRIGGER IF EXISTS trg_consegna_no_retroattivita_update; + +DELIMITER $$ + +CREATE TRIGGER trg_consegna_no_retroattivita_insert +BEFORE INSERT ON consegna +FOR EACH ROW +BEGIN + IF NEW.DataRitiro < CURDATE() THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'DataRitiro non può essere anteriore alla data odierna'; + END IF; + + IF NEW.DataConsegna < CURDATE() THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'DataConsegna non può essere anteriore alla data odierna'; + END IF; +END$$ + +CREATE TRIGGER trg_consegna_no_retroattivita_update +BEFORE UPDATE ON consegna +FOR EACH ROW +BEGIN + IF NEW.DataRitiro <> OLD.DataRitiro AND NEW.DataRitiro < CURDATE() THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'DataRitiro non può essere anteriore alla data odierna'; + END IF; + + IF NEW.DataConsegna <> OLD.DataConsegna AND NEW.DataConsegna < CURDATE() THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'DataConsegna non può essere anteriore alla data odierna'; + END IF; +END$$ + +DELIMITER ; diff --git a/initdb/02_seed.sql b/initdb/02_seed.sql index 4bf1055..f34422f 100644 --- a/initdb/02_seed.sql +++ b/initdb/02_seed.sql @@ -35,11 +35,13 @@ INSERT INTO cliente (Nome, Cognome, Comune, Provincia, Telefono, Email, Note) VA -- Consegne -- ClienteID: 1=Mario, 2=Laura, 3=Marco, 4=Giulia, 5=Paolo -- ------------------------------------------------------------ +-- Date dinamiche: compatibili con i trigger di retroattività (>= CURDATE()) +-- DataRitiro e DataConsegna sono indipendenti (es. riga 4: consegna prima del ritiro) INSERT INTO consegna (ClienteID, DataRitiro, DataConsegna, Stato, ChiaveConsegna) VALUES - (1, '2026-06-18', '2026-06-20', 'in deposito', 'CNSG9001'), - (2, '2026-06-19', '2026-06-20', 'in consegna', 'CNSG3344'), - (3, '2026-06-20', '2026-06-21', 'da ritirare', 'CNSG2406'), - (4, '2026-06-17', '2026-06-21', 'in giacenza', 'CNSG7788'), - (5, '2026-06-21', '2026-06-22', 'in deposito', 'CNSG5522'), - (1, '2026-06-22', '2026-06-23', 'da ritirare', 'CNSG9876'), - (2, '2026-06-22', '2026-06-24', 'in consegna', 'CNSG1122'); + (1, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 2 DAY), 'in deposito', 'CNSG9001'), + (2, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 DAY), 'in consegna', 'CNSG3344'), + (3, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 DAY), 'da ritirare', 'CNSG2406'), + (4, DATE_ADD(CURDATE(), INTERVAL 5 DAY), DATE_ADD(CURDATE(), INTERVAL 2 DAY), 'in giacenza', 'CNSG7788'), + (5, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 DAY), 'in deposito', 'CNSG5522'), + (1, DATE_ADD(CURDATE(), INTERVAL 1 DAY), DATE_ADD(CURDATE(), INTERVAL 3 DAY), 'da ritirare', 'CNSG9876'), + (2, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 2 DAY), 'in consegna', 'CNSG1122');