corretto file 01_schema.sql
All checks were successful
Deploy to VPS / build (push) Successful in 14s
Deploy to VPS / deploy (push) Successful in 12s

This commit is contained in:
AV77web 2026-06-22 15:56:39 +02:00
parent dc82506248
commit de33e61496
2 changed files with 55 additions and 9 deletions

View file

@ -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,
@ -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 ;

View file

@ -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');